From 3dc00cddf56880baad772d0634fadff73d0cd38b Mon Sep 17 00:00:00 2001 From: anna Date: Wed, 4 Apr 2012 12:03:09 +0200 Subject: [PATCH] force using junit3 starter for single tests in junit4.5 as the filtering was broken till 4.6 (IDEA-84031) --- .../intellij/execution/junit/TestMethod.java | 19 +++++++++++++++++++ .../rt/execution/junit/JUnitStarter.java | 13 +++++++++++++ 2 files changed, 32 insertions(+) diff --git a/plugins/junit/src/com/intellij/execution/junit/TestMethod.java b/plugins/junit/src/com/intellij/execution/junit/TestMethod.java index 8ad7f6245043..5a333bf8391c 100644 --- a/plugins/junit/src/com/intellij/execution/junit/TestMethod.java +++ b/plugins/junit/src/com/intellij/execution/junit/TestMethod.java @@ -25,9 +25,11 @@ import com.intellij.psi.PsiClass; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiMethod; import com.intellij.psi.PsiPackage; +import com.intellij.psi.search.GlobalSearchScope; import com.intellij.refactoring.listeners.RefactoringElementAdapter; import com.intellij.refactoring.listeners.RefactoringElementListener; import com.intellij.refactoring.listeners.UndoRefactoringElementListener; +import com.intellij.rt.execution.junit.JUnitStarter; import org.jetbrains.annotations.NotNull; class TestMethod extends TestObject { @@ -43,6 +45,7 @@ class TestMethod extends TestObject { final JUnitConfiguration.Data data = myConfiguration.getPersistentData(); RunConfigurationModule module = myConfiguration.getConfigurationModule(); configureModule(getJavaParameters(), module, data.getMainClassName()); + addJUnit3Parameter(data, module.getProject()); getJavaParameters().getProgramParametersList().add(data.getMainClassName() + "," + data.getMethodName()); } @@ -50,6 +53,22 @@ class TestMethod extends TestObject { super.initialize(); } + protected void addJUnit3Parameter(final JUnitConfiguration.Data data, Project project) { + final PsiClass psiClass = JavaExecutionUtil.findMainClass(project, data.getMainClassName(), GlobalSearchScope.allScope(project)); + LOG.assertTrue(psiClass != null); + if (JUnitUtil.isJUnit4TestClass(psiClass)) { + return; + } + final String methodName = data.getMethodName(); + final PsiMethod[] methods = psiClass.findMethodsByName(methodName, true); + for (PsiMethod method : methods) { + if (JUnitUtil.isTestAnnotated(method)) { + return; + } + } + myJavaParameters.getProgramParametersList().add(JUnitStarter.JUNIT3_PARAMETER); + } + public String suggestActionName() { return ProgramRunnerUtil.shortenName(myConfiguration.getPersistentData().METHOD_NAME, 2) + "()"; } diff --git a/plugins/junit_rt/src/com/intellij/rt/execution/junit/JUnitStarter.java b/plugins/junit_rt/src/com/intellij/rt/execution/junit/JUnitStarter.java index 376f1e749890..9bdfd692aca4 100644 --- a/plugins/junit_rt/src/com/intellij/rt/execution/junit/JUnitStarter.java +++ b/plugins/junit_rt/src/com/intellij/rt/execution/junit/JUnitStarter.java @@ -32,6 +32,7 @@ import java.util.Vector; public class JUnitStarter { public static final int VERSION = 5; public static final String IDE_VERSION = "-ideVersion"; + public static final String JUNIT3_PARAMETER = "-junit3"; private static final String SOCKET = "-socket"; private static String ourForkMode; private static String ourCommandFileName; @@ -64,12 +65,16 @@ public class JUnitStarter { } private static boolean processParameters(Vector args, final List listeners) { + boolean isJunit4 = true; Vector result = new Vector(args.size()); for (int i = 0; i < args.size(); i++) { String arg = (String)args.get(i); if (arg.startsWith(IDE_VERSION)) { //ignore } + else if (arg.equals(JUNIT3_PARAMETER)){ + isJunit4 = false; + } else { if (arg.startsWith("@@@")) { final int pos = arg.indexOf(','); @@ -116,6 +121,14 @@ public class JUnitStarter { String arg = (String)result.get(i); args.addElement(arg); } + if (!isJunit4) { + try { + Class.forName("org.junit.runner.Computer"); + } + catch (ClassNotFoundException e) { + return false; + } + } final String forceJUnit3 = System.getProperty("idea.force.junit3"); if (forceJUnit3 != null && Boolean.valueOf(forceJUnit3).booleanValue()) return false; try {