mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
junit 5: test factory method navigation with dynamic tests navigation to parent methods (IDEA-162200)
This commit is contained in:
@@ -58,34 +58,46 @@ public class JavaTestLocator implements SMTestLocator {
|
||||
results = ContainerUtil.newSmartList();
|
||||
results.add(createClassNavigatable(paramName, aClass));
|
||||
}
|
||||
else {
|
||||
results = collectMethodNavigatables(path, project, scope, paramName);
|
||||
}
|
||||
}
|
||||
else if (TEST_PROTOCOL.equals(protocol)) {
|
||||
String className = StringUtil.getPackageName(path);
|
||||
if (!StringUtil.isEmpty(className)) {
|
||||
String methodName = StringUtil.getShortName(path);
|
||||
PsiClass aClass = ClassUtil.findPsiClass(PsiManager.getInstance(project), className, null, true, scope);
|
||||
if (aClass != null) {
|
||||
results = ContainerUtil.newSmartList();
|
||||
if (methodName.trim().equals(aClass.getName())) {
|
||||
results.add(createClassNavigatable(paramName, aClass));
|
||||
}
|
||||
else {
|
||||
PsiMethod[] methods = aClass.findMethodsByName(methodName.trim(), true);
|
||||
if (methods.length > 0) {
|
||||
for (PsiMethod method : methods) {
|
||||
results.add(paramName != null ? new PsiMemberParameterizedLocation(project, method, aClass, paramName)
|
||||
: MethodLocation.elementInClass(method, aClass));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
results = collectMethodNavigatables(path, project, scope, paramName);
|
||||
}
|
||||
|
||||
return results;
|
||||
}
|
||||
|
||||
private Location createClassNavigatable(String paramName, @NotNull PsiClass aClass) {
|
||||
private static List<Location> collectMethodNavigatables(@NotNull String path,
|
||||
@NotNull Project project,
|
||||
@NotNull GlobalSearchScope scope,
|
||||
String paramName) {
|
||||
List<Location> results = Collections.emptyList();
|
||||
String className = StringUtil.getPackageName(path);
|
||||
if (!StringUtil.isEmpty(className)) {
|
||||
String methodName = StringUtil.getShortName(path);
|
||||
PsiClass aClass = ClassUtil.findPsiClass(PsiManager.getInstance(project), className, null, true, scope);
|
||||
if (aClass != null) {
|
||||
results = ContainerUtil.newSmartList();
|
||||
if (methodName.trim().equals(aClass.getName())) {
|
||||
results.add(createClassNavigatable(paramName, aClass));
|
||||
}
|
||||
else {
|
||||
PsiMethod[] methods = aClass.findMethodsByName(methodName.trim(), true);
|
||||
if (methods.length > 0) {
|
||||
for (PsiMethod method : methods) {
|
||||
results.add(paramName != null ? new PsiMemberParameterizedLocation(project, method, aClass, paramName)
|
||||
: MethodLocation.elementInClass(method, aClass));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
private static Location createClassNavigatable(String paramName, @NotNull PsiClass aClass) {
|
||||
return paramName != null ? PsiMemberParameterizedLocation.getParameterizedLocation(aClass, paramName)
|
||||
: new PsiLocation<>(aClass.getProject(), aClass);
|
||||
}
|
||||
|
||||
@@ -178,7 +178,7 @@ public class JUnit5TestExecutionListener implements TestExecutionListener {
|
||||
}
|
||||
|
||||
private void testStarted(TestIdentifier testIdentifier) {
|
||||
myPrintStream.println("\n##teamcity[testStarted" + idAndName(testIdentifier) + "\']");
|
||||
myPrintStream.println("\n##teamcity[testStarted" + idAndName(testIdentifier) + getLocationHint(testIdentifier) + "\']");
|
||||
}
|
||||
|
||||
private void testFinished(TestIdentifier testIdentifier, long duration) {
|
||||
@@ -258,17 +258,23 @@ public class JUnit5TestExecutionListener implements TestExecutionListener {
|
||||
private void sendTreeUnderRoot(TestPlan testPlan, TestIdentifier root) {
|
||||
final String idAndName = idAndName(root);
|
||||
if (root.isContainer()) {
|
||||
myPrintStream.println("##teamcity[suiteTreeStarted" + idAndName + "\' locationHint=\'java:suite://" + escapeName(getClassName(root)) + "\']");
|
||||
myPrintStream.println("##teamcity[suiteTreeStarted" + idAndName + getLocationHint(root) + "\']");
|
||||
for (TestIdentifier childIdentifier : testPlan.getChildren(root)) {
|
||||
sendTreeUnderRoot(testPlan, childIdentifier);
|
||||
}
|
||||
myPrintStream.println("##teamcity[suiteTreeEnded" + idAndName + "\']");
|
||||
}
|
||||
else if (root.isTest()) {
|
||||
myPrintStream.println("##teamcity[suiteTreeNode " + idAndName + "\' locationHint=\'java:test://" + escapeName(getClassName(root) + "." + getMethodName(root)) + "\']");
|
||||
myPrintStream.println("##teamcity[suiteTreeNode " + idAndName + getLocationHint(root) + "\']");
|
||||
}
|
||||
}
|
||||
|
||||
private String getLocationHint(TestIdentifier root) {
|
||||
final String className = getClassName(root);
|
||||
final String methodName = getMethodName(root);
|
||||
return "\' locationHint=\'java:" + (root.isTest() ? "test" : "suite") + "://" + escapeName(className + (methodName != null ? "." + methodName : ""));
|
||||
}
|
||||
|
||||
|
||||
private static String escapeName(String str) {
|
||||
return MapSerializerUtil.escapeStr(str, MapSerializerUtil.STD_ESCAPER);
|
||||
|
||||
@@ -80,7 +80,7 @@ class JUnit5EventsTest {
|
||||
|
||||
Assertions.assertEquals("##teamcity[enteredTheMatrix]\n" +
|
||||
"\n" +
|
||||
"##teamcity[testStarted id='[engine:engine]' name='test1()']\n" +
|
||||
"##teamcity[testStarted id='[engine:engine]' name='test1()' locationHint='java:test://com.intellij.junit5.JUnit5EventsTest$TestClass.test1']\n" +
|
||||
"\n" +
|
||||
"##teamcity[testFailed actual='actual1' expected='expected1' name='test1()' details='' id='|[engine:engine|]' message='']\n" +
|
||||
"\n" +
|
||||
@@ -106,7 +106,7 @@ class JUnit5EventsTest {
|
||||
"##teamcity[treeEnded]\n" +
|
||||
"##teamcity[testSuiteStarted id='[engine:engine1]' name='brokenStream()']\n" +
|
||||
"\n" +
|
||||
"##teamcity[testStarted id='[engine:engine1]' name='brokenStream()']\n" +
|
||||
"##teamcity[testStarted id='[engine:engine1]' name='brokenStream()' locationHint='java:suite://com.intellij.junit5.JUnit5EventsTest$TestClass.brokenStream']\n" +
|
||||
"\n" +
|
||||
"##teamcity[testFailed name='brokenStream()' details='TRACE' id='|[engine:engine1|]' error='true' message='']\n" +
|
||||
"\n" +
|
||||
|
||||
Reference in New Issue
Block a user