From 02f44a0fb500ed2e6d9d0f546b876bcd90d2d56d Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Fri, 16 Sep 2016 12:34:48 +0300 Subject: [PATCH] junit 5: ensure junit 5 framework detected --- .../com/intellij/execution/junit/JUnitUtil.java | 17 ++++++++++++++++- plugins/junit/src/META-INF/plugin.xml | 2 +- .../execution/junit/JUnit5Framework.java | 2 +- .../intellij/junit5/JUnit5AcceptanceTest.java | 14 ++++++++++++++ 4 files changed, 32 insertions(+), 3 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 ca048e0c41dc..4208ac921e63 100644 --- a/java/execution/impl/src/com/intellij/execution/junit/JUnitUtil.java +++ b/java/execution/impl/src/com/intellij/execution/junit/JUnitUtil.java @@ -66,6 +66,7 @@ public class JUnitUtil { private static final Collection TEST_ANNOTATIONS = Collections.unmodifiableList(Arrays.asList(TEST_ANNOTATION, TEST5_ANNOTATION, TEST5_FACTORY_ANNOTATION)); +private static final Collection TEST5_ANNOTATIONS = Collections.unmodifiableList(Arrays.asList(TEST5_ANNOTATION, TEST5_FACTORY_ANNOTATION)); private static final List INSTANCE_CONFIGS = Arrays.asList(BEFORE_ANNOTATION_NAME, AFTER_ANNOTATION_NAME); private static final List INSTANCE_5_CONFIGS = Arrays.asList(BEFORE_EACH_ANNOTATION_NAME, AFTER_EACH_ANNOTATION_NAME); @@ -185,7 +186,7 @@ public class JUnitUtil { if (modifierList == null) return false; if (AnnotationUtil.isAnnotated(psiClass, RUN_WITH, true)) return true; - if (!PsiClassUtil.isRunnableClass(psiClass, !isJUnit5(modifierList), checkAbstract)) return false; + if (!PsiClassUtil.isRunnableClass(psiClass, true, checkAbstract)) return false; for (final PsiMethod method : psiClass.getAllMethods()) { ProgressManager.checkCanceled(); @@ -195,6 +196,20 @@ public class JUnitUtil { return false; } + public static boolean isJUnit5TestClass(final PsiClass psiClass, boolean checkAbstract) { + final PsiModifierList modifierList = psiClass.getModifierList(); + if (modifierList == null) return false; + + if (!PsiClassUtil.isRunnableClass(psiClass, false, checkAbstract)) return false; + + for (final PsiMethod method : psiClass.getAllMethods()) { + ProgressManager.checkCanceled(); + if (AnnotationUtil.isAnnotated(method, TEST5_ANNOTATIONS)) return true; + } + + return false; + } + public static boolean isJUnit5(@NotNull PsiElement element) { return isJUnit5(element.getResolveScope(), element.getProject()); } diff --git a/plugins/junit/src/META-INF/plugin.xml b/plugins/junit/src/META-INF/plugin.xml index c9932f33b0d7..faae9d9d31cb 100644 --- a/plugins/junit/src/META-INF/plugin.xml +++ b/plugins/junit/src/META-INF/plugin.xml @@ -39,8 +39,8 @@ + - diff --git a/plugins/junit/src/com/intellij/execution/junit/JUnit5Framework.java b/plugins/junit/src/com/intellij/execution/junit/JUnit5Framework.java index 11bb66a98f86..8d04dd4039cd 100644 --- a/plugins/junit/src/com/intellij/execution/junit/JUnit5Framework.java +++ b/plugins/junit/src/com/intellij/execution/junit/JUnit5Framework.java @@ -63,7 +63,7 @@ public class JUnit5Framework extends JavaTestFramework { public boolean isTestClass(PsiClass clazz, boolean canBePotential) { if (canBePotential) return isUnderTestSources(clazz); - return JUnitUtil.isJUnit4TestClass(clazz); + return JUnitUtil.isJUnit5TestClass(clazz, true); } @Nullable 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 d1fd0f8b0e3e..1fd2fe5f59ff 100644 --- a/plugins/junit5_rt_tests/test/com/intellij/junit5/JUnit5AcceptanceTest.java +++ b/plugins/junit5_rt_tests/test/com/intellij/junit5/JUnit5AcceptanceTest.java @@ -15,6 +15,8 @@ */ package com.intellij.junit5; +import com.intellij.codeInsight.TestFrameworks; +import com.intellij.execution.junit.JUnit5Framework; import com.intellij.execution.junit.JUnitUtil; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiMethod; @@ -22,6 +24,7 @@ import com.intellij.testFramework.EdtTestUtil; import com.intellij.testFramework.TestRunnerUtil; import com.intellij.testFramework.fixtures.*; import com.intellij.testFramework.fixtures.impl.LightTempDirTestFixtureImpl; +import com.intellij.testIntegration.TestFramework; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -66,4 +69,15 @@ class JUnit5AcceptanceTest { assertTrue(JUnitUtil.isTestClass(aClass, false, false)); }); } + + @Test + void testFrameworkDetection() { + TestRunnerUtil.replaceIdeEventQueueSafely(); + EdtTestUtil.runInEdtAndWait(() -> { + PsiClass aClass = myFixture.addClass("class MyTest {@org.junit.jupiter.api.Test void method() {}}"); + assertNotNull(aClass); + TestFramework framework = TestFrameworks.detectFramework(aClass); + assertTrue(framework instanceof JUnit5Framework, framework.getName()); + }); + } }