From 222ce59abea60c2c0b76d905a779a95fd1bc6074 Mon Sep 17 00:00:00 2001 From: anna Date: Mon, 30 Nov 2009 00:33:38 +0300 Subject: [PATCH] rerun failed tests with @Parameterized runner: one test method can cause multiple test failures --- .../com/intellij/execution/junit/TestMethods.java | 14 ++++++-------- .../com/intellij/execution/junit/TestObject.java | 4 ++-- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/plugins/junit/src/com/intellij/execution/junit/TestMethods.java b/plugins/junit/src/com/intellij/execution/junit/TestMethods.java index d9640cd617cf..46610b5decb1 100644 --- a/plugins/junit/src/com/intellij/execution/junit/TestMethods.java +++ b/plugins/junit/src/com/intellij/execution/junit/TestMethods.java @@ -37,7 +37,7 @@ import com.intellij.rt.execution.junit.JUnitStarter; import com.intellij.util.Function; import java.util.Collection; -import java.util.LinkedHashMap; +import java.util.LinkedHashSet; public class TestMethods extends TestMethod { private static final Logger LOG = Logger.getInstance("#com.intellij.execution.junit.TestMethods"); @@ -71,20 +71,18 @@ public class TestMethods extends TestMethod { } }); if (exception[0] != null) throw exception[0]; - final LinkedHashMap methods = new LinkedHashMap(); + final LinkedHashSet methods = new LinkedHashSet(); for (AbstractTestProxy failedTest : myFailedTests) { Location location = failedTest.getLocation(project); if (!(location instanceof MethodLocation)) continue; PsiElement psiElement = location.getPsiElement(); LOG.assertTrue(psiElement instanceof PsiMethod); PsiMethod method = (PsiMethod)psiElement; - methods.put(method, ((TestProxy)failedTest).getInfo()); + methods.add(((TestProxy)failedTest).getInfo()); } - addClassesListToJavaParameters(methods.keySet(), new Function() { - public String fun(PsiElement element) { - if (element instanceof PsiMethod) { - final PsiMethod method = (PsiMethod)element; - final TestInfo testInfo = methods.get(method); + addClassesListToJavaParameters(methods, new Function() { + public String fun(TestInfo testInfo) { + if (testInfo != null) { final MethodLocation location = (MethodLocation)testInfo.getLocation(project); LOG.assertTrue(location != null); return JavaExecutionUtil.getRuntimeQualifiedName(location.getContainingClass()) + "," + testInfo.getName(); diff --git a/plugins/junit/src/com/intellij/execution/junit/TestObject.java b/plugins/junit/src/com/intellij/execution/junit/TestObject.java index dc41fd979f9e..bfb8885eb6cc 100644 --- a/plugins/junit/src/com/intellij/execution/junit/TestObject.java +++ b/plugins/junit/src/com/intellij/execution/junit/TestObject.java @@ -285,7 +285,7 @@ public abstract class TestObject implements JavaCommandLine { } - protected void addClassesListToJavaParameters(Collection elements, Function nameFunction, String packageName, + protected void addClassesListToJavaParameters(Collection elements, Function nameFunction, String packageName, boolean createTempFile, boolean junit4) { try { @@ -300,7 +300,7 @@ public abstract class TestObject implements JavaCommandLine { writer.println(junit4 ? JUnitStarter.JUNIT4_PARAMETER : "-junit3"); writer.println(packageName); final List testNames = new ArrayList(); - for (final PsiElement element : elements) { + for (final T element : elements) { final String name = nameFunction.fun(element); if (name == null) { LOG.error("invalid element " + element);