From 4e4aabdb8c2441583504c917020e5f43fe0aefb5 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Sat, 17 Sep 2016 22:00:54 +0300 Subject: [PATCH] junit: recognized junit 5 inner classes with test methods --- .../src/com/intellij/execution/junit/JUnitUtil.java | 8 +++++--- .../com/intellij/junit5/JUnit5AcceptanceTest.java | 12 ++++++++++++ .../com/intellij/junit5/JUnit5CodeInsightTest.java | 7 ++++++- .../com/intellij/junit5/JUnit5GenerationTest.java | 2 -- 4 files changed, 23 insertions(+), 6 deletions(-) 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 da55d9203f15..239d496fe5d5 100644 --- a/java/execution/impl/src/com/intellij/execution/junit/JUnitUtil.java +++ b/java/execution/impl/src/com/intellij/execution/junit/JUnitUtil.java @@ -133,6 +133,9 @@ public class JUnitUtil { public static boolean isTestClass(@NotNull PsiClass psiClass, boolean checkAbstract, boolean checkForTestCaseInheritance) { if (psiClass.getQualifiedName() == null) return false; + if (isJUnit5(psiClass)) { + return isJUnit5TestClass(psiClass, checkAbstract); + } final PsiClass topLevelClass = PsiTreeUtil.getTopmostParentOfType(psiClass, PsiClass.class); if (topLevelClass != null) { final PsiAnnotation annotation = AnnotationUtil.findAnnotationInHierarchy(topLevelClass, Collections.singleton(RUN_WITH)); @@ -146,12 +149,11 @@ public class JUnitUtil { } } } - boolean hasJUnit5 = isJUnit5(psiClass); - if (!PsiClassUtil.isRunnableClass(psiClass, !hasJUnit5, checkAbstract)) return false; + if (!PsiClassUtil.isRunnableClass(psiClass, true, checkAbstract)) return false; if (AnnotationUtil.isAnnotated(psiClass, RUN_WITH, true)) return true; - if (checkForTestCaseInheritance && (!hasJUnit5 || psiClass.hasModifierProperty(PsiModifier.PUBLIC)) && isTestCaseInheritor(psiClass)) return true; + if (checkForTestCaseInheritance && isTestCaseInheritor(psiClass)) return true; return CachedValuesManager.getCachedValue(psiClass, () -> CachedValueProvider.Result.create(hasTestOrSuiteMethods(psiClass), PsiModificationTracker.JAVA_STRUCTURE_MODIFICATION_COUNT)); diff --git a/plugins/junit5_rt_tests/test/com/intellij/junit5/JUnit5AcceptanceTest.java b/plugins/junit5_rt_tests/test/com/intellij/junit5/JUnit5AcceptanceTest.java index 129d81ebceed..9c208dac192a 100644 --- a/plugins/junit5_rt_tests/test/com/intellij/junit5/JUnit5AcceptanceTest.java +++ b/plugins/junit5_rt_tests/test/com/intellij/junit5/JUnit5AcceptanceTest.java @@ -19,6 +19,7 @@ import com.intellij.codeInsight.TestFrameworks; import com.intellij.execution.junit.JUnit5Framework; import com.intellij.execution.junit.JUnitConfiguration; import com.intellij.execution.junit.JUnitUtil; +import com.intellij.execution.junit2.info.MethodLocation; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiMethod; import com.intellij.testIntegration.TestFramework; @@ -52,6 +53,17 @@ class JUnit5AcceptanceTest extends JUnit5CodeInsightTest { }); } + @Test + void recognizedInnerClassesWithTestMethods() { + doTest(() -> { + PsiClass aClass = myFixture.addClass("import org.junit.jupiter.api.*; class MyTest {@Nested class NTest { @Test void method() {}}}"); + assertTrue(JUnitUtil.isTestClass(aClass, false, false)); + PsiClass innerClass = aClass.getInnerClasses()[0]; + assertTrue(JUnitUtil.isTestClass(innerClass)); + assertTrue(JUnitUtil.isTestMethod(MethodLocation.elementInClass(innerClass.getMethods()[0], innerClass))); + }); + } + @Test void testFrameworkDetection() { doTest(() -> { diff --git a/plugins/junit5_rt_tests/test/com/intellij/junit5/JUnit5CodeInsightTest.java b/plugins/junit5_rt_tests/test/com/intellij/junit5/JUnit5CodeInsightTest.java index 2123f9ea1990..9795b6dbfb63 100644 --- a/plugins/junit5_rt_tests/test/com/intellij/junit5/JUnit5CodeInsightTest.java +++ b/plugins/junit5_rt_tests/test/com/intellij/junit5/JUnit5CodeInsightTest.java @@ -40,8 +40,13 @@ class JUnit5CodeInsightTest { myFixture.tearDown(); } - protected static void doTest(ThrowableRunnable run) { + protected void doTest(ThrowableRunnable run) { TestRunnerUtil.replaceIdeEventQueueSafely(); + //init junit 5 framework + EdtTestUtil.runInEdtAndWait(() -> { + myFixture.addClass("package org.junit.jupiter.api; public @interface Test {}"); + myFixture.addClass("package org.junit.jupiter.api; public @interface Nested {}"); + }); EdtTestUtil.runInEdtAndWait(run); } } diff --git a/plugins/junit5_rt_tests/test/com/intellij/junit5/JUnit5GenerationTest.java b/plugins/junit5_rt_tests/test/com/intellij/junit5/JUnit5GenerationTest.java index 37e519adff1d..940d8bb12257 100644 --- a/plugins/junit5_rt_tests/test/com/intellij/junit5/JUnit5GenerationTest.java +++ b/plugins/junit5_rt_tests/test/com/intellij/junit5/JUnit5GenerationTest.java @@ -50,8 +50,6 @@ class JUnit5GenerationTest extends JUnit5CodeInsightTest { private void doTest(String text, String expected) { doTest(() -> { - myFixture.addClass("package org.junit.jupiter.api; public @interface Test {}"); - myFixture.addClass("package org.junit.jupiter.api; public @interface Nested {}"); myFixture.configureByText("MyTest.java", text); new BaseGenerateTestSupportMethodAction.MyHandler(TestIntegrationUtils.MethodKind.TEST).invoke(myFixture.getProject(),