mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
junit sm runner: parameterized test tree construction, navigation, rerun of single test
This commit is contained in:
+32
-5
@@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user