blob: a3538059b1db974dc745725b218d2368c610255c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
package com.theoryinpractice.testng.ui.actions;
import com.intellij.execution.CantRunException;
import com.intellij.execution.ExecutionException;
import com.intellij.execution.Executor;
import com.intellij.execution.Location;
import com.intellij.execution.actions.JavaRerunFailedTestsAction;
import com.intellij.execution.configurations.RunProfileState;
import com.intellij.execution.runners.ExecutionEnvironment;
import com.intellij.execution.testframework.AbstractTestProxy;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.ComponentContainer;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiMethod;
import com.intellij.psi.PsiModifier;
import com.intellij.psi.search.GlobalSearchScope;
import com.theoryinpractice.testng.configuration.SearchingForTestsTask;
import com.theoryinpractice.testng.configuration.TestNGConfiguration;
import com.theoryinpractice.testng.configuration.TestNGRunnableState;
import org.jetbrains.annotations.NotNull;
import java.io.File;
import java.net.ServerSocket;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
public class RerunFailedTestsAction extends JavaRerunFailedTestsAction {
public RerunFailedTestsAction(@NotNull ComponentContainer componentContainer) {
super(componentContainer);
}
@Override
public MyRunProfile getRunProfile() {
final TestNGConfiguration configuration = (TestNGConfiguration)getModel().getProperties().getConfiguration();
final List<AbstractTestProxy> failedTests = getFailedTests(configuration.getProject());
return new MyRunProfile(configuration) {
@NotNull
public Module[] getModules() {
return Module.EMPTY_ARRAY;
}
public RunProfileState getState(@NotNull Executor executor, @NotNull ExecutionEnvironment env) throws ExecutionException {
return new TestNGRunnableState(env, configuration) {
@Override
protected SearchingForTestsTask createSearchingForTestsTask(ServerSocket serverSocket,
final TestNGConfiguration config, final File tempFile) {
return new SearchingForTestsTask(serverSocket, config, tempFile, client) {
@Override
protected void fillTestObjects(final Map<PsiClass, Collection<PsiMethod>> classes) throws CantRunException {
final GlobalSearchScope scope = config.getConfigurationModule().getSearchScope();
final Project project = config.getProject();
for (AbstractTestProxy proxy : failedTests) {
final Location location = proxy.getLocation(project, scope);
if (location != null) {
final PsiElement element = location.getPsiElement();
if (element instanceof PsiMethod && element.isValid()) {
final PsiMethod psiMethod = (PsiMethod)element;
PsiClass psiClass = psiMethod.getContainingClass();
if (psiClass != null && psiClass.hasModifierProperty(PsiModifier.ABSTRACT)) {
final AbstractTestProxy parent = proxy.getParent();
final PsiElement elt = parent != null ? parent.getLocation(project, scope).getPsiElement() : null;
if (elt instanceof PsiClass) {
psiClass = (PsiClass)elt;
}
}
Collection<PsiMethod> psiMethods = classes.get(psiClass);
if (psiMethods == null) {
psiMethods = new ArrayList<PsiMethod>();
classes.put(psiClass, psiMethods);
}
psiMethods.add(psiMethod);
}
}
}
}
};
}
};
}
};
}
}
|