From 452f6407872243a9812005828404107d19837f31 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Fri, 26 Jan 2018 16:33:41 +0300 Subject: [PATCH] junit: skip inner classes for known runners in test detection (IDEA-185621) replace mock junit with project library --- .../com/intellij/execution/junit/JUnitUtil.java | 10 ++-------- .../mock JUnit/junit/framework/TestCase.class | Bin 206 -> 0 bytes .../mock JUnit/junit/framework/TestCase.java | 2 -- .../junit/framework/ThirdPartyClass.class | Bin 228 -> 0 bytes .../junit/framework/ThirdPartyClass.java | 2 -- .../mock JUnit/org/junit/Test.class | Bin 636 -> 0 bytes .../mock JUnit/org/junit/Test.java | 2 -- .../mock JUnit/org/junit/runner/RunWith.class | Bin 521 -> 0 bytes .../mock JUnit/org/junit/runner/RunWith.java | 4 ---- .../module1/test1/DerivedTest.java | 4 +--- .../module1/test1/ThirdPartyTest.java | 3 +++ .../module1/test1/nested/TestWithJunit4.java | 9 +++++++++ .../execution/BaseConfigurationTestCase.java | 11 +++++------ .../execution/ConfigurationRefactoringsTest.java | 13 +++++++++++-- .../java/execution/ConfigurationsTest.java | 15 ++++++++++++--- 15 files changed, 43 insertions(+), 32 deletions(-) delete mode 100644 java/java-tests/testData/junit/configurations/mock JUnit/junit/framework/TestCase.class delete mode 100644 java/java-tests/testData/junit/configurations/mock JUnit/junit/framework/TestCase.java delete mode 100644 java/java-tests/testData/junit/configurations/mock JUnit/junit/framework/ThirdPartyClass.class delete mode 100644 java/java-tests/testData/junit/configurations/mock JUnit/junit/framework/ThirdPartyClass.java delete mode 100644 java/java-tests/testData/junit/configurations/mock JUnit/org/junit/Test.class delete mode 100644 java/java-tests/testData/junit/configurations/mock JUnit/org/junit/Test.java delete mode 100644 java/java-tests/testData/junit/configurations/mock JUnit/org/junit/runner/RunWith.class delete mode 100644 java/java-tests/testData/junit/configurations/mock JUnit/org/junit/runner/RunWith.java create mode 100644 java/java-tests/testData/junit/configurations/module1/test1/ThirdPartyTest.java create mode 100644 java/java-tests/testData/junit/configurations/module1/test1/nested/TestWithJunit4.java diff --git a/java/execution/impl/src/com/intellij/execution/junit/JUnitUtil.java b/java/execution/impl/src/com/intellij/execution/junit/JUnitUtil.java index 22901597d974..541f1529a293 100644 --- a/java/execution/impl/src/com/intellij/execution/junit/JUnitUtil.java +++ b/java/execution/impl/src/com/intellij/execution/junit/JUnitUtil.java @@ -166,14 +166,8 @@ public class JUnitUtil { final PsiClass topLevelClass = PsiTreeUtil.getTopmostParentOfType(psiClass, PsiClass.class); if (topLevelClass != null) { final PsiAnnotation annotation = AnnotationUtil.findAnnotationInHierarchy(topLevelClass, Collections.singleton(RUN_WITH)); - if (annotation != null) { - final PsiAnnotationMemberValue attributeValue = annotation.findAttributeValue("value"); - if (attributeValue instanceof PsiClassObjectAccessExpression) { - final String runnerName = ((PsiClassObjectAccessExpression)attributeValue).getOperand().getType().getCanonicalText(); - if (!(PARAMETERIZED_CLASS_NAME.equals(runnerName) || SUITE_CLASS_NAME.equals(runnerName))) { - return true; - } - } + if (annotation != null && !isInheritorOrSelfRunner(annotation, RUNNERS_REQUIRE_ANNOTATION_ON_TEST_METHOD)) { + return true; } } diff --git a/java/java-tests/testData/junit/configurations/mock JUnit/junit/framework/TestCase.class b/java/java-tests/testData/junit/configurations/mock JUnit/junit/framework/TestCase.class deleted file mode 100644 index bdd44ceb93e25a6461ecbea98abcbded3a98dc03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 206 zcmXv|I}Ub W#{pyc1Ub^1}=66ZgvJ9Mg}&U%)HDJJ4Oa(4b3n{1{UZ1lvG9rexJ;| zRKL>Pq|~C2#H1Xc2v=}^X;E^jTPBDj5|WWwloF6wR8r}jlUQ7=mz7wS$iu+Gz{r%_jJvz=*nXVJgr!4L4G#NB<+ ziY7Lh?94sqo^wAwzurFp9AeADx`ho3MGKn($%a-WkgF+0{;4N}fC7O@dh1i$(4)ZO zUiq>sU!?6x)v;qnMPU9!DQ%>2wK}6G8G1$_f2sYB-3^s%Y=;7~8%Z-a({ejXn$TyT z{l98Q`y=|!v#(#}gGZHP&a{l%BOS7KVy|3JasBZpkZtMEZ_~N!v1TSRJBVr&C^SPA zCEdA!%PPYvxvA|DANfhf$q$D6P z!6(79oJevDnB;ecUx_xdn2N&4F))o8ro})Vv&^55p#?1Rf1OE74Ce{USix#^y@wza Pu!b}fvK&eBNg?wMl$58< diff --git a/java/java-tests/testData/junit/configurations/mock JUnit/org/junit/Test.java b/java/java-tests/testData/junit/configurations/mock JUnit/org/junit/Test.java deleted file mode 100644 index 66c78b4fe66d..000000000000 --- a/java/java-tests/testData/junit/configurations/mock JUnit/org/junit/Test.java +++ /dev/null @@ -1,2 +0,0 @@ -package org.junit; -public @interface Test {} \ No newline at end of file diff --git a/java/java-tests/testData/junit/configurations/mock JUnit/org/junit/runner/RunWith.class b/java/java-tests/testData/junit/configurations/mock JUnit/org/junit/runner/RunWith.class deleted file mode 100644 index e059434a16393d9c8f63de7c75fb315dd7cbf57b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 521 zcmah`(Mm!=5It+!O|!BrsE06mkV0tb*$5&G1S`>75k0LoTvyh;v3IZFul3Le^ik31 zLkbx^470Q6oSE6PpI`4E0M4-&U?)I1z^*`UtV~J*<&)FaP>q!|%0}|qs3fTiN^)qg1M*y#R*i9zS#E^OX51P+%=Lggaz%sgI> zHw=wD_waQfn0ms_xlt+Pcg<0#2W(h@XU~_tWfgo(5gl*s(y#$q7 diff --git a/java/java-tests/testData/junit/configurations/mock JUnit/org/junit/runner/RunWith.java b/java/java-tests/testData/junit/configurations/mock JUnit/org/junit/runner/RunWith.java deleted file mode 100644 index b4b9e9978904..000000000000 --- a/java/java-tests/testData/junit/configurations/mock JUnit/org/junit/runner/RunWith.java +++ /dev/null @@ -1,4 +0,0 @@ -package org.junit.runner; -@interface RunWith { - Class value(); -} diff --git a/java/java-tests/testData/junit/configurations/module1/test1/DerivedTest.java b/java/java-tests/testData/junit/configurations/module1/test1/DerivedTest.java index 4669cc0058d0..c6c632bf68b8 100644 --- a/java/java-tests/testData/junit/configurations/module1/test1/DerivedTest.java +++ b/java/java-tests/testData/junit/configurations/module1/test1/DerivedTest.java @@ -1,6 +1,4 @@ package test1; -import junit.framework.ThirdPartyClass; - -public class DerivedTest extends ThirdPartyClass { +public class DerivedTest extends ThirdPartyTest { } \ No newline at end of file diff --git a/java/java-tests/testData/junit/configurations/module1/test1/ThirdPartyTest.java b/java/java-tests/testData/junit/configurations/module1/test1/ThirdPartyTest.java new file mode 100644 index 000000000000..863666c23e78 --- /dev/null +++ b/java/java-tests/testData/junit/configurations/module1/test1/ThirdPartyTest.java @@ -0,0 +1,3 @@ +package test1; +import junit.framework.*; +public class ThirdPartyTest extends TestCase {} \ No newline at end of file diff --git a/java/java-tests/testData/junit/configurations/module1/test1/nested/TestWithJunit4.java b/java/java-tests/testData/junit/configurations/module1/test1/nested/TestWithJunit4.java new file mode 100644 index 000000000000..39aa54c72e1e --- /dev/null +++ b/java/java-tests/testData/junit/configurations/module1/test1/nested/TestWithJunit4.java @@ -0,0 +1,9 @@ +package test1.nested; + +@org.junit.runner.RunWith(org.junit.runners.Parameterized.class) +public class TestWithJunit4 { + @org.junit.Test + public void test1() {} + + public static class InnerNoTests {} +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/execution/BaseConfigurationTestCase.java b/java/java-tests/testSrc/com/intellij/java/execution/BaseConfigurationTestCase.java index 74e2d3c5a4bc..2e1d68297c2a 100644 --- a/java/java-tests/testSrc/com/intellij/java/execution/BaseConfigurationTestCase.java +++ b/java/java-tests/testSrc/com/intellij/java/execution/BaseConfigurationTestCase.java @@ -23,6 +23,7 @@ import com.intellij.execution.actions.ConfigurationFromContext; import com.intellij.execution.actions.RunConfigurationProducer; import com.intellij.execution.configurations.RunConfiguration; import com.intellij.execution.junit.JUnitConfiguration; +import com.intellij.execution.junit.JUnitUtil; import com.intellij.execution.testframework.AbstractJavaTestConfigurationProducer; import com.intellij.openapi.actionSystem.CommonDataKeys; import com.intellij.openapi.actionSystem.LangDataKeys; @@ -37,6 +38,7 @@ import com.intellij.openapi.roots.ModuleRootManager; import com.intellij.openapi.roots.ModuleRootModificationUtil; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.project.IntelliJProjectConfiguration; import com.intellij.psi.JavaPsiFacade; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiElement; @@ -51,7 +53,6 @@ import java.util.List; public abstract class BaseConfigurationTestCase extends IdeaTestCase { protected TempFiles myTempFiles; private final List myModulesToDispose = new ArrayList<>(); - protected static final String MOCK_JUNIT = "mock JUnit"; @Override protected void setUp() throws Exception { @@ -83,13 +84,11 @@ public abstract class BaseConfigurationTestCase extends IdeaTestCase { PsiTestUtil.addContentRoot(module, module1Content); } - VirtualFile mockJUnit = findFile(MOCK_JUNIT); - ModuleRootModificationUtil.addModuleLibrary(module, mockJUnit.getUrl()); + IntelliJProjectConfiguration.LibraryRoots junit4Library = IntelliJProjectConfiguration.getProjectLibrary("JUnit4"); + ModuleRootModificationUtil.addModuleLibrary(module, "JUnit4", junit4Library.getClassesUrls(), junit4Library.getSourcesUrls()); ModuleRootModificationUtil.setModuleSdk(module, ModuleRootManager.getInstance(myModule).getSdk()); GlobalSearchScope scope = GlobalSearchScope.moduleWithDependenciesAndLibrariesScope(module); - VirtualFile testCase = mockJUnit.findFileByRelativePath("junit/framework/TestCase.java"); - assertNotNull(testCase); - assertTrue(scope.contains(testCase)); + assertNotNull(JavaPsiFacade.getInstance(getProject()).findClass(JUnitUtil.TEST_CASE_CLASS, scope)); Module missingModule = createTempModule(); addDependency(module, missingModule); ModuleManager.getInstance(myProject).disposeModule(missingModule); diff --git a/java/java-tests/testSrc/com/intellij/java/execution/ConfigurationRefactoringsTest.java b/java/java-tests/testSrc/com/intellij/java/execution/ConfigurationRefactoringsTest.java index ae13e0c27258..fa87631dbd20 100644 --- a/java/java-tests/testSrc/com/intellij/java/execution/ConfigurationRefactoringsTest.java +++ b/java/java-tests/testSrc/com/intellij/java/execution/ConfigurationRefactoringsTest.java @@ -13,7 +13,10 @@ import com.intellij.execution.junit.AllInPackageConfigurationProducer; import com.intellij.execution.junit.JUnitConfiguration; import com.intellij.execution.junit.JUnitConfigurationType; import com.intellij.execution.testframework.AbstractJavaTestConfigurationProducer; +import com.intellij.openapi.vfs.JarFileSystem; +import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.project.IntelliJProjectConfiguration; import com.intellij.psi.*; import com.intellij.refactoring.PackageWrapper; import com.intellij.refactoring.move.moveClassesOrPackages.MoveClassesOrPackagesProcessor; @@ -22,10 +25,11 @@ import com.intellij.refactoring.move.moveMembers.MockMoveMembersOptions; import com.intellij.refactoring.move.moveMembers.MoveMembersProcessor; import com.intellij.refactoring.rename.RenameProcessor; import com.intellij.testFramework.MapDataContext; -import java.util.HashSet; import org.jetbrains.annotations.NotNull; +import java.io.File; import java.io.IOException; +import java.util.HashSet; public class ConfigurationRefactoringsTest extends BaseConfigurationTestCase { private static final String APPLICATION_CODE = "public class Application {" + @@ -194,7 +198,12 @@ public class ConfigurationRefactoringsTest extends BaseConfigurationTestCase { private void initModule() { mySource.initModule(); mySource.copyJdkFrom(myModule); - mySource.addLibrary(findFile(MOCK_JUNIT)); + IntelliJProjectConfiguration.LibraryRoots junit4Library = IntelliJProjectConfiguration.getProjectLibrary("JUnit4"); + for (File file : junit4Library.getClasses()) { + VirtualFile libFile = LocalFileSystem.getInstance().findFileByIoFile(file); + assertNotNull(libFile); + mySource.addLibrary(JarFileSystem.getInstance().getJarRootForLocalFile(libFile)); + } } private void move(final PsiElement psiElement, String packageName) { diff --git a/java/java-tests/testSrc/com/intellij/java/execution/ConfigurationsTest.java b/java/java-tests/testSrc/com/intellij/java/execution/ConfigurationsTest.java index 3b5464eb3be7..3981a9d918fc 100644 --- a/java/java-tests/testSrc/com/intellij/java/execution/ConfigurationsTest.java +++ b/java/java-tests/testSrc/com/intellij/java/execution/ConfigurationsTest.java @@ -38,6 +38,7 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.JarFileSystem; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.project.IntelliJProjectConfiguration; import com.intellij.psi.*; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.rt.ant.execution.SegmentedOutputStream; @@ -158,7 +159,7 @@ public class ConfigurationsTest extends BaseConfigurationTestCase { PsiClass psiClass = findTestA(module1); PsiClass psiClass2 = findTestA(getModule2()); PsiClass derivedTest = findClass(module1, "test1.DerivedTest"); - PsiClass baseTestCase = findClass("junit.framework.ThirdPartyClass", module1AndLibraries); + PsiClass baseTestCase = findClass("test1.ThirdPartyTest", module1AndLibraries); PsiClass testB = findClass(getModule3(), "test1.TestB"); assertNotNull(testCase); assertNotNull(derivedTest); @@ -177,6 +178,8 @@ public class ConfigurationsTest extends BaseConfigurationTestCase { psiClass2.getQualifiedName(), derivedTest.getQualifiedName(), RT_INNER_TEST_NAME, "test1.nested.TestA", + "test1.nested.TestWithJunit4", + "test1.ThirdPartyTest", testB.getQualifiedName()}, lines); } @@ -259,7 +262,10 @@ public class ConfigurationsTest extends BaseConfigurationTestCase { CHECK.singleOccurence(classPath, getOutput(module2, true)); CHECK.singleOccurence(classPath, getOutput(module3, false)); CHECK.singleOccurence(classPath, getOutput(module3, true)); - CHECK.singleOccurence(classPath, getFSPath(findFile(MOCK_JUNIT))); + IntelliJProjectConfiguration.LibraryRoots junit4Library = IntelliJProjectConfiguration.getProjectLibrary("JUnit4"); + for (File file : junit4Library.getClasses()) { + CHECK.singleOccurence(classPath, file.getPath()); + } } public void testExternalizeJUnitConfiguration() { @@ -489,7 +495,10 @@ public class ConfigurationsTest extends BaseConfigurationTestCase { CompilerTester tester = new CompilerTester(project, Arrays.asList(ModuleManager.getInstance(project).getModules())); try { List messages = tester.make(); - assertFalse(messages.stream().anyMatch(message -> message.getCategory() == CompilerMessageCategory.ERROR)); + assertFalse(messages.stream().filter(message -> message.getCategory() == CompilerMessageCategory.ERROR) + .map(message -> message.getMessage()) + .findFirst().orElse("Compiles fine"), + messages.stream().anyMatch(message -> message.getCategory() == CompilerMessageCategory.ERROR)); task.startSearch(); } finally {