junit: rerun failed tests with sm runner

This commit is contained in:
Anna Kozlova
2015-04-10 20:03:51 +02:00
parent c0e9e468ef
commit 95b81e4340
2 changed files with 14 additions and 25 deletions
@@ -17,6 +17,7 @@ package com.intellij.execution.testframework;
import com.intellij.execution.Location;
import com.intellij.execution.PsiLocation;
import com.intellij.execution.junit2.info.MethodLocation;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.JavaPsiFacade;
@@ -64,7 +65,7 @@ public class JavaTestLocationProvider implements TestLocationProvider {
for (PsiClass aClass : classes) {
PsiMethod[] methods = aClass.findMethodsByName(methodName, true);
for (PsiMethod method : methods) {
results.add(new PsiLocation<PsiMethod>(project, method));
results.add(MethodLocation.elementInClass(method, aClass));
}
}
}
@@ -21,16 +21,13 @@ import com.intellij.execution.JavaExecutionUtil;
import com.intellij.execution.Location;
import com.intellij.execution.configurations.JavaParameters;
import com.intellij.execution.configurations.RunConfigurationModule;
import com.intellij.execution.junit2.PsiMemberParameterizedLocation;
import com.intellij.execution.junit2.TestProxy;
import com.intellij.execution.junit2.info.MethodLocation;
import com.intellij.execution.junit2.info.TestInfo;
import com.intellij.execution.runners.ExecutionEnvironment;
import com.intellij.execution.testframework.AbstractTestProxy;
import com.intellij.idea.ActionsBundle;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiMethod;
import com.intellij.psi.search.GlobalSearchScope;
@@ -38,7 +35,6 @@ import com.intellij.util.Function;
import org.jetbrains.annotations.NotNull;
import java.util.Collection;
import java.util.LinkedHashSet;
public class TestMethods extends TestMethod {
private static final Logger LOG = Logger.getInstance(TestMethods.class);
@@ -59,29 +55,21 @@ public class TestMethods extends TestMethod {
final JUnitConfiguration.Data data = getConfiguration().getPersistentData();
RunConfigurationModule module = getConfiguration().getConfigurationModule();
final Project project = module.getProject();
final LinkedHashSet<TestInfo> methods = new LinkedHashSet<TestInfo>();
final GlobalSearchScope searchScope = getConfiguration().getConfigurationModule().getSearchScope();
for (AbstractTestProxy failedTest : myFailedTests) {
Location location = failedTest.getLocation(project, searchScope);
if (location instanceof PsiMemberParameterizedLocation) {
final PsiElement element = location.getPsiElement();
if (element instanceof PsiMethod) {
location = MethodLocation.elementInClass(((PsiMethod)element),
((PsiMemberParameterizedLocation)location).getContainingClass());
}
}
if (!(location instanceof MethodLocation)) continue;
PsiElement psiElement = location.getPsiElement();
LOG.assertTrue(psiElement instanceof PsiMethod);
methods.add(((TestProxy)failedTest).getInfo());
}
addClassesListToJavaParameters(methods, new Function<TestInfo, String>() {
addClassesListToJavaParameters(myFailedTests, new Function<AbstractTestProxy, String>() {
@Override
public String fun(TestInfo testInfo) {
public String fun(AbstractTestProxy testInfo) {
if (testInfo != null) {
final MethodLocation location = (MethodLocation)testInfo.getLocation(project, searchScope);
final Location location = testInfo.getLocation(project, searchScope);
LOG.assertTrue(location != null);
return JavaExecutionUtil.getRuntimeQualifiedName(location.getContainingClass()) + "," + testInfo.getName();
final PsiElement element = location.getPsiElement();
if (element instanceof PsiMethod) {
final PsiClass containingClass = location instanceof MethodLocation ? ((MethodLocation)location).getContainingClass()
: ((PsiMethod)element).getContainingClass();
if (containingClass != null) {
return JavaExecutionUtil.getRuntimeQualifiedName(containingClass) + "," + testInfo.getName();
}
}
}
return null;
}