junit sm runner: parameterized test tree construction, navigation, rerun of single test

This commit is contained in:
Anna Kozlova
2015-04-10 20:03:55 +02:00
parent 5f6641fa32
commit e726cb3d68
3 changed files with 119 additions and 9 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.PsiMemberParameterizedLocation;
import com.intellij.execution.junit2.info.MethodLocation;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.text.StringUtil;
@@ -46,26 +47,52 @@ public class JavaTestLocationProvider implements TestLocationProvider {
public List<Location> getLocation(@NotNull String protocolId, @NotNull String locationData, Project project) {
List<Location> results = Collections.emptyList();
final JavaPsiFacade javaPsiFacade = JavaPsiFacade.getInstance(project);
if (SUITE_PROTOCOL.equals(protocolId)) {
PsiClass[] classes = JavaPsiFacade.getInstance(project).findClasses(locationData, myScope);
PsiClass[] classes = javaPsiFacade.findClasses(locationData, myScope);
if (classes.length > 0) {
results = ContainerUtil.newSmartList();
for (PsiClass aClass : classes) {
results.add(new PsiLocation<PsiClass>(project, aClass));
}
}
else {
//parameter root for parameterized tests: ClassName.[paramName]
final String className = StringUtil.getPackageName(locationData);
classes = javaPsiFacade.findClasses(className, myScope);
if (classes.length > 0) {
final String paramName = StringUtil.getShortName(locationData);
results = ContainerUtil.newSmartList();
for (PsiClass aClass : classes) {
results.add(PsiMemberParameterizedLocation.getParameterizedLocation(aClass, paramName));
}
}
}
}
else if (TEST_PROTOCOL.equals(protocolId)) {
final String className = StringUtil.getPackageName(locationData);
if (!StringUtil.isEmpty(className)) {
final String methodName = StringUtil.getShortName(locationData);
PsiClass[] classes = JavaPsiFacade.getInstance(project).findClasses(className, myScope);
String methodName = StringUtil.getShortName(locationData);
PsiClass[] classes = javaPsiFacade.findClasses(className, myScope);
if (classes.length > 0) {
results = ContainerUtil.newSmartList();
for (PsiClass aClass : classes) {
PsiMethod[] methods = aClass.findMethodsByName(methodName, true);
for (PsiMethod method : methods) {
results.add(MethodLocation.elementInClass(method, aClass));
if (methods.length > 0) {
for (PsiMethod method : methods) {
results.add(MethodLocation.elementInClass(method, aClass));
}
}
else {
//parameterized tests: ClassName.testName[paramName]
final int paramIdx = methodName.indexOf("[");
if (paramIdx > -1 && methodName.endsWith("]")) {
final String paramName = methodName.substring(paramIdx);
methods = aClass.findMethodsByName(methodName.substring(0, paramIdx), true);
for (PsiMethod method : methods) {
results.add(new PsiMemberParameterizedLocation(project, method, aClass, paramName));
}
}
}
}
}