junit 5: ensure junit 5 framework detected

This commit is contained in:
Anna Kozlova
2016-09-16 13:25:11 +03:00
parent 5080c1295f
commit 02f44a0fb5
4 changed files with 32 additions and 3 deletions
@@ -66,6 +66,7 @@ public class JUnitUtil {
private static final Collection<String> TEST_ANNOTATIONS = Collections.unmodifiableList(Arrays.asList(TEST_ANNOTATION,
TEST5_ANNOTATION,
TEST5_FACTORY_ANNOTATION));
private static final Collection<String> TEST5_ANNOTATIONS = Collections.unmodifiableList(Arrays.asList(TEST5_ANNOTATION, TEST5_FACTORY_ANNOTATION));
private static final List<String> INSTANCE_CONFIGS = Arrays.asList(BEFORE_ANNOTATION_NAME, AFTER_ANNOTATION_NAME);
private static final List<String> 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());
}
+1 -1
View File
@@ -39,8 +39,8 @@
<deadCode implementation="com.intellij.execution.junit2.inspection.JUnitEntryPoint"/>
<cantBeStatic implementation="com.intellij.execution.junit2.inspection.JUnitCantBeStaticExtension" />
<testFramework implementation="com.intellij.execution.junit.JUnit3Framework"/>
<testFramework implementation="com.intellij.execution.junit.JUnit5Framework" id="junit5" order="before junit4"/>
<testFramework implementation="com.intellij.execution.junit.JUnit4Framework" id="junit4"/>
<testFramework implementation="com.intellij.execution.junit.JUnit5Framework" id="junit5"/>
<configurationType implementation="com.intellij.execution.junit.JUnitConfigurationType"/>
<library.dependencyScopeSuggester implementation="com.intellij.execution.junit.JUnitDependencyScopeSuggester"/>
@@ -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
@@ -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());
});
}
}