Extended Testing-Framework to work around IntelliJ IDEA introducing an unwanted assertj-core dependency conflicting with our newer one.
This commit is contained in:
		
							parent
							
								
									77d3608fd3
								
							
						
					
					
						commit
						58298fabc6
					
				| @ -35,7 +35,7 @@ compileTestKotlin { | ||||
|     kotlinOptions.jvmTarget = "1.8" | ||||
| } | ||||
| intellij { | ||||
|     version '2019.2.4' // Upgrading to 2019.3.x breaks build/tests due to dependency with assertj-core 13.3.2 | ||||
|     version '2019.3.2' | ||||
| //    pluginName 'Concise AssertJ Optimizing Nitpicker (Cajon)' | ||||
|     updateSinceUntilBuild false | ||||
|     plugins = ['java'] | ||||
|  | ||||
| @ -0,0 +1,24 @@ | ||||
| package de.platon42.intellij.jupiter; | ||||
| 
 | ||||
| import com.intellij.openapi.roots.DependencyScope; | ||||
| 
 | ||||
| import java.lang.annotation.*; | ||||
| 
 | ||||
| @Target({ElementType.TYPE, ElementType.METHOD}) | ||||
| @Retention(RetentionPolicy.RUNTIME) | ||||
| @Inherited | ||||
| @Repeatable(AddMavenDependencyToModule.List.class) | ||||
| public @interface AddMavenDependencyToModule { | ||||
|     String value(); | ||||
| 
 | ||||
|     boolean includeTransitiveDependencies = false; | ||||
| 
 | ||||
|     DependencyScope scope = DependencyScope.COMPILE; | ||||
| 
 | ||||
|     @Target({ElementType.TYPE, ElementType.METHOD}) | ||||
|     @Retention(RetentionPolicy.RUNTIME) | ||||
|     @Inherited | ||||
|     @interface List { | ||||
|         AddMavenDependencyToModule[] value(); | ||||
|     } | ||||
| } | ||||
| @ -1,10 +1,17 @@ | ||||
| package de.platon42.intellij.jupiter; | ||||
| 
 | ||||
| import com.intellij.jarRepository.JarRepositoryManager; | ||||
| import com.intellij.jarRepository.RemoteRepositoryDescription; | ||||
| import com.intellij.openapi.module.Module; | ||||
| import com.intellij.openapi.projectRoots.Sdk; | ||||
| import com.intellij.openapi.projectRoots.impl.JavaAwareProjectJdkTableImpl; | ||||
| import com.intellij.openapi.roots.ContentEntry; | ||||
| import com.intellij.openapi.roots.DependencyScope; | ||||
| import com.intellij.openapi.roots.LibraryOrderEntry; | ||||
| import com.intellij.openapi.roots.ModifiableRootModel; | ||||
| import com.intellij.openapi.roots.libraries.Library; | ||||
| import com.intellij.openapi.roots.libraries.LibraryTable; | ||||
| import com.intellij.openapi.roots.libraries.ui.OrderRoot; | ||||
| import com.intellij.openapi.util.Disposer; | ||||
| import com.intellij.openapi.vfs.LocalFileSystem; | ||||
| import com.intellij.openapi.vfs.VirtualFile; | ||||
| @ -13,6 +20,7 @@ import com.intellij.testFramework.fixtures.IdeaTestExecutionPolicy; | ||||
| import com.intellij.testFramework.fixtures.JavaCodeInsightTestFixture; | ||||
| import com.intellij.testFramework.fixtures.LightJavaCodeInsightFixtureTestCase; | ||||
| import org.jetbrains.annotations.NotNull; | ||||
| import org.jetbrains.idea.maven.utils.library.RepositoryLibraryProperties; | ||||
| import org.junit.jupiter.api.extension.*; | ||||
| import org.junit.jupiter.api.extension.ExtensionContext.Namespace; | ||||
| import org.junit.jupiter.api.extension.ExtensionContext.Store; | ||||
| @ -23,7 +31,11 @@ import java.lang.reflect.Parameter; | ||||
| import java.net.URISyntaxException; | ||||
| import java.nio.file.Path; | ||||
| import java.nio.file.Paths; | ||||
| import java.util.Arrays; | ||||
| import java.util.Collection; | ||||
| import java.util.List; | ||||
| import java.util.logging.Logger; | ||||
| import java.util.stream.Collectors; | ||||
| import java.util.stream.Stream; | ||||
| 
 | ||||
| public class LightCodeInsightExtension implements ParameterResolver, AfterTestExecutionCallback, InvocationInterceptor { | ||||
| @ -150,10 +162,12 @@ public class LightCodeInsightExtension implements ParameterResolver, AfterTestEx | ||||
|                 @Override | ||||
|                 public void configureModule(@NotNull Module module, @NotNull ModifiableRootModel model, @NotNull ContentEntry contentEntry) { | ||||
|                     super.configureModule(module, model, contentEntry); | ||||
|                     AddLocalJarToModule methodOrClassAnnotation = getMethodOrClassAnnotation(AddLocalJarToModule.class); | ||||
|                     if (methodOrClassAnnotation != null) { | ||||
|                         Stream.of(methodOrClassAnnotation.value()).forEach(it -> addJarContaining(model, it)); | ||||
|                     AddLocalJarToModule localJars = getMethodOrClassAnnotation(AddLocalJarToModule.class); | ||||
|                     if (localJars != null) { | ||||
|                         Stream.of(localJars.value()).forEach(it -> addJarContaining(model, it)); | ||||
|                     } | ||||
|                     List<AddMavenDependencyToModule> mavenDependencies = getMethodOrClassAnnotations(AddMavenDependencyToModule.class); | ||||
|                     mavenDependencies.forEach(it -> addFromMaven(model, it.value(), it.includeTransitiveDependencies, it.scope)); | ||||
|                 } | ||||
|             }; | ||||
|         } | ||||
| @ -175,6 +189,33 @@ public class LightCodeInsightExtension implements ParameterResolver, AfterTestEx | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         void addFromMaven(ModifiableRootModel model, String mavenCoordinates, | ||||
|                           boolean includeTransitiveDependencies, DependencyScope dependencyScope) { | ||||
|             List<RemoteRepositoryDescription> remoteRepositoryDescriptions = RemoteRepositoryDescription.DEFAULT_REPOSITORIES; | ||||
|             RepositoryLibraryProperties libraryProperties = new RepositoryLibraryProperties(mavenCoordinates, includeTransitiveDependencies); | ||||
|             Collection<OrderRoot> roots = | ||||
|                     JarRepositoryManager.loadDependenciesModal(model.getProject(), libraryProperties, false, false, null, remoteRepositoryDescriptions); | ||||
|             LibraryTable.ModifiableModel tableModel = model.getModuleLibraryTable().getModifiableModel(); | ||||
|             Library library = tableModel.createLibrary(mavenCoordinates); | ||||
|             Library.ModifiableModel libraryModel = library.getModifiableModel(); | ||||
|             if (roots.isEmpty()) { | ||||
|                 throw new IllegalStateException(String.format("No roots for '%s'", mavenCoordinates)); | ||||
|             } | ||||
| 
 | ||||
|             for (OrderRoot root : roots) { | ||||
|                 libraryModel.addRoot(root.getFile(), root.getType()); | ||||
|             } | ||||
| 
 | ||||
|             LibraryOrderEntry libraryOrderEntry = model.findLibraryOrderEntry(library); | ||||
|             if (libraryOrderEntry == null) { | ||||
|                 throw new IllegalStateException("Unable to find registered library " + mavenCoordinates); | ||||
|             } | ||||
|             libraryOrderEntry.setScope(dependencyScope); | ||||
| 
 | ||||
|             libraryModel.commit(); | ||||
|             tableModel.commit(); | ||||
|         } | ||||
| 
 | ||||
|         @Override | ||||
|         protected String getTestDataPath() { | ||||
|             TestDataPath testDataPath = getMethodOrClassAnnotation(TestDataPath.class); | ||||
| @ -199,5 +240,12 @@ public class LightCodeInsightExtension implements ParameterResolver, AfterTestEx | ||||
|             } | ||||
|             return annotation; | ||||
|         } | ||||
| 
 | ||||
|         private <T extends Annotation> List<T> getMethodOrClassAnnotations(Class<T> clazz) { | ||||
|             return Stream.of(extensionContext.getRequiredTestMethod().getAnnotationsByType(clazz), | ||||
|                     extensionContext.getRequiredTestClass().getAnnotationsByType(clazz)) | ||||
|                     .flatMap(Arrays::stream) | ||||
|                     .collect(Collectors.toList()); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -3,11 +3,10 @@ package de.platon42.intellij.plugins.cajon | ||||
| import com.intellij.codeInsight.intention.IntentionAction | ||||
| import com.intellij.pom.java.LanguageLevel | ||||
| import com.intellij.testFramework.fixtures.JavaCodeInsightTestFixture | ||||
| import de.platon42.intellij.jupiter.AddLocalJarToModule | ||||
| import de.platon42.intellij.jupiter.AddMavenDependencyToModule | ||||
| import de.platon42.intellij.jupiter.LightCodeInsightExtension | ||||
| import de.platon42.intellij.jupiter.TestDataPath | ||||
| import de.platon42.intellij.jupiter.TestJdk | ||||
| import org.assertj.core.api.Assertions | ||||
| import org.assertj.core.api.Assertions.assertThat | ||||
| import org.junit.jupiter.api.DisplayNameGeneration | ||||
| import org.junit.jupiter.api.DisplayNameGenerator | ||||
| @ -17,7 +16,8 @@ import java.lang.reflect.Method | ||||
| @ExtendWith(LightCodeInsightExtension::class) | ||||
| @TestDataPath("src/test/resources") | ||||
| @TestJdk(LanguageLevel.JDK_1_8, annotations = true, useInternal = true) | ||||
| @AddLocalJarToModule(Assertions::class) | ||||
| //@AddLocalJarToModule(Assertions::class) | ||||
| @AddMavenDependencyToModule("org.assertj:assertj-core:3.15.0") | ||||
| @DisplayNameGeneration(AbstractCajonTest.CutOffFixtureDisplayNameGenerator::class) | ||||
| abstract class AbstractCajonTest { | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user