ensure single tests are started with old junit when they are compatible with

This commit is contained in:
Anna.Kozlova
2017-04-13 14:03:16 +02:00
parent db203c1941
commit e561e921da
4 changed files with 51 additions and 13 deletions
@@ -219,7 +219,7 @@ public class JUnitUtil {
return false;
}
public static boolean isJUnit5TestClass(final PsiClass psiClass, boolean checkAbstract) {
public static boolean isJUnit5TestClass(@NotNull final PsiClass psiClass, boolean checkAbstract) {
final PsiModifierList modifierList = psiClass.getModifierList();
if (modifierList == null) return false;
@@ -19,13 +19,19 @@ package com.intellij.execution.junit;
import com.intellij.execution.ExecutionBundle;
import com.intellij.execution.ExecutionException;
import com.intellij.execution.JavaExecutionUtil;
import com.intellij.execution.configurations.*;
import com.intellij.execution.junit2.configuration.JUnitConfigurationModel;
import com.intellij.execution.configurations.JavaParameters;
import com.intellij.execution.configurations.JavaRunConfigurationModule;
import com.intellij.execution.configurations.RuntimeConfigurationException;
import com.intellij.execution.configurations.RuntimeConfigurationWarning;
import com.intellij.execution.runners.ExecutionEnvironment;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Comparing;
import com.intellij.psi.*;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.refactoring.listeners.RefactoringElementListener;
import com.intellij.rt.execution.junit.JUnitStarter;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
class TestClass extends TestObject {
public TestClass(JUnitConfiguration configuration, ExecutionEnvironment environment) {
@@ -40,6 +46,20 @@ class TestClass extends TestObject {
return javaParameters;
}
@Nullable
@Override
protected String getPreferredRunner(GlobalSearchScope globalSearchScope) {
Project project = getConfiguration().getProject();
final PsiClass psiClass = JavaExecutionUtil.findMainClass(project, getConfiguration().getPersistentData().getMainClassName(), globalSearchScope);
if (psiClass != null) {
if (JUnitUtil.isJUnit5TestClass(psiClass, false)) {
return JUnitStarter.JUNIT5_RUNNER_NAME;
}
return JUnitStarter.JUNIT4_PARAMETER;
}
return null;
}
@NotNull
@Override
protected String getForkMode() {
@@ -29,6 +29,7 @@ import com.intellij.refactoring.listeners.RefactoringElementListener;
import com.intellij.refactoring.listeners.UndoRefactoringElementListener;
import com.intellij.rt.execution.junit.JUnitStarter;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
class TestMethod extends TestObject {
public TestMethod(JUnitConfiguration configuration, ExecutionEnvironment environment) {
@@ -39,8 +40,6 @@ class TestMethod extends TestObject {
protected JavaParameters createJavaParameters() throws ExecutionException {
final JavaParameters javaParameters = createDefaultJavaParameters();
final JUnitConfiguration.Data data = getConfiguration().getPersistentData();
RunConfigurationModule module = getConfiguration().getConfigurationModule();
addJUnit3Parameter(javaParameters, data, module.getProject());
javaParameters.getProgramParametersList().add(data.getMainClassName() + "," + data.getMethodNameWithSignature());
return javaParameters;
}
@@ -49,19 +48,30 @@ class TestMethod extends TestObject {
return super.createJavaParameters();
}
protected void addJUnit3Parameter(JavaParameters javaParameters, final JUnitConfiguration.Data data, Project project) throws ExecutionException {
final PsiClass psiClass = JavaExecutionUtil.findMainClass(project, data.getMainClassName(), GlobalSearchScope.allScope(project));
if (psiClass == null || JUnitUtil.isJUnit4TestClass(psiClass) || JUnitUtil.isJUnit5(psiClass)) {
return;
@Nullable
@Override
protected String getPreferredRunner(GlobalSearchScope globalSearchScope) {
Project project = getConfiguration().getProject();
JUnitConfiguration.Data data = getConfiguration().getPersistentData();
final PsiClass psiClass = JavaExecutionUtil.findMainClass(project, data.getMainClassName(), globalSearchScope);
if (psiClass == null) return null;
if (JUnitUtil.isJUnit5TestClass(psiClass, false)) {
return JUnitStarter.JUNIT5_RUNNER_NAME;
}
if (JUnitUtil.isJUnit4TestClass(psiClass)) {
return JUnitStarter.JUNIT4_PARAMETER;
}
final String methodName = data.getMethodName();
final PsiMethod[] methods = psiClass.findMethodsByName(methodName, true);
for (PsiMethod method : methods) {
if (JUnitUtil.isTestAnnotated(method)) {
return;
return JUnitStarter.JUNIT4_PARAMETER;
}
}
javaParameters.getProgramParametersList().add(JUnitStarter.JUNIT3_PARAMETER);
return JUnitStarter.JUNIT3_PARAMETER;
}
@Override
@@ -158,8 +158,8 @@ public abstract class TestObject extends JavaTestFrameworkRunnableState<JUnitCon
final Project project = getConfiguration().getProject();
final SourceScope sourceScope = getSourceScope();
GlobalSearchScope globalSearchScope = getScopeForJUnit(getConfiguration().getConfigurationModule().getModule(), sourceScope, project);
if (JUnitUtil.isJUnit5(globalSearchScope, project)) {
javaParameters.getProgramParametersList().add(JUnitStarter.JUNIT5_PARAMETER);
String preferredRunner = getPreferredRunner(globalSearchScope);
if (JUnitStarter.JUNIT5_RUNNER_NAME.equals(preferredRunner)) {
//detect junit 5 rt without dependency on junit5_rt module
File junit4Rt = new File(PathUtil.getJarPathForClass(JUnit4IdeaTestRunner.class));
String junit5Name = junit4Rt.getName().replace("junit", "junit5");
@@ -191,10 +191,18 @@ public abstract class TestObject extends JavaTestFrameworkRunnableState<JUnitCon
}
}
}
if (preferredRunner != null) {
javaParameters.getProgramParametersList().add(preferredRunner);
}
return javaParameters;
}
@Nullable
protected String getPreferredRunner(GlobalSearchScope globalSearchScope) {
return JUnitUtil.isJUnit5(globalSearchScope, getConfiguration().getProject()) ? JUnitStarter.JUNIT5_RUNNER_NAME : null;
}
private static boolean hasPackageWithDirectories(JavaPsiFacade psiFacade,
String packageQName,
GlobalSearchScope globalSearchScope) {