force using junit3 starter for single tests in junit4.5 as the filtering was broken till 4.6 (IDEA-84031)

This commit is contained in:
anna
2012-04-04 12:27:09 +02:00
parent da0e467517
commit 3dc00cddf5
2 changed files with 32 additions and 0 deletions
@@ -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) + "()";
}
@@ -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 {