java locator: provide navigation for java test framework console

This commit is contained in:
Anna Kozlova
2015-04-10 20:03:48 +02:00
parent 01c4172efb
commit a2ca8fdd9d
5 changed files with 15 additions and 13 deletions
@@ -96,7 +96,7 @@ public abstract class JavaTestFrameworkRunnableState<T extends ModuleBasedConfig
testConsoleProperties.setIfUndefined(TestConsoleProperties.HIDE_PASSED_TESTS, false);
final BaseTestsOutputConsoleView consoleView =
SMTestRunnerConnectionUtil.createConsoleWithCustomLocator(getFrameworkName(), testConsoleProperties, getEnvironment(), null);
SMTestRunnerConnectionUtil.createConsoleWithCustomLocator(getFrameworkName(), testConsoleProperties, getEnvironment(), new JavaTestLocationProvider(testConsoleProperties.getScope()));
final SMTestRunnerResultsForm viewer = ((SMTRunnerConsoleView)consoleView).getResultsViewer();
Disposer.register(getConfiguration().getProject(), consoleView);
@@ -18,6 +18,7 @@ package com.intellij.execution.testframework;
import com.intellij.execution.Location;
import com.intellij.execution.PsiLocation;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.JavaPsiFacade;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiMethod;
@@ -54,13 +55,12 @@ public class JavaTestLocationProvider implements TestLocationProvider {
}
}
else if (TEST_PROTOCOL.equals(protocolId)) {
int p = locationData.lastIndexOf('.');
if (p > 0 && p < locationData.length() - 1) {
String className = locationData.substring(0, p);
final String className = StringUtil.getPackageName(locationData);
if (!StringUtil.isEmpty(className)) {
final String methodName = StringUtil.getShortName(locationData);
PsiClass[] classes = JavaPsiFacade.getInstance(project).findClasses(className, myScope);
if (classes.length > 0) {
results = ContainerUtil.newSmartList();
String methodName = locationData.substring(p + 1);
for (PsiClass aClass : classes) {
PsiMethod[] methods = aClass.findMethodsByName(methodName, true);
for (PsiMethod method : methods) {
@@ -173,8 +173,9 @@ class SMTestSender extends RunListener {
private static void sendTree(JUnit4IdeaTestRunner runner, Object description, List tests) {
if (tests.isEmpty()) {
System.out.println("##teamcity[suiteTreeNode name=\'" + JUnit4ReflectionUtil.getMethodName((Description)description)
+ "\' locationHint=\'" + JUnit4ReflectionUtil.getClassName((Description)description) + "\']");
final String methodName = JUnit4ReflectionUtil.getMethodName((Description)description);
System.out.println("##teamcity[suiteTreeNode name=\'" + methodName +
"\' locationHint=\'java:test://" + JUnit4ReflectionUtil.getClassName((Description)description) + "." + methodName + "\']");
}
boolean pass = false;
for (Iterator iterator = tests.iterator(); iterator.hasNext(); ) {
@@ -182,7 +183,8 @@ class SMTestSender extends RunListener {
final List childTests = runner.getChildTests(next);
if (childTests.isEmpty() && !pass) {
pass = true;
System.out.println("##teamcity[suiteTreeStarted name=\'" + JUnit4ReflectionUtil.getClassName((Description)description) + "\']");
System.out.println("##teamcity[suiteTreeStarted name=\'" + JUnit4ReflectionUtil.getClassName((Description)description) +
"\' locationHint=\'java:suite://" + JUnit4ReflectionUtil.getClassName((Description)description) + "\']");
}
sendTree(runner, next, childTests);
}
@@ -18,8 +18,6 @@ package org.testng;
import jetbrains.buildServer.messages.serviceMessages.ServiceMessage;
import org.testng.collections.Lists;
import org.testng.remote.strprotocol.GenericMessage;
import org.testng.remote.strprotocol.MessageHelper;
import org.testng.xml.XmlClass;
import org.testng.xml.XmlInclude;
import org.testng.xml.XmlSuite;
@@ -48,11 +46,11 @@ public class IDEARemoteTestNG extends TestNG {
int testCount= 0;
for (XmlSuite suite : suites) {
System.out.println("##teamcity[suiteTreeStarted name=\'" + suite.getName() + "\']");
System.out.println("##teamcity[suiteTreeStarted name=\'" + suite.getName() + "\' locationHint=\'java:suite://" + suite.getName() + "\']");
final List<XmlTest> tests = suite.getTests();
for (XmlTest test : tests) {
for (XmlClass aClass : test.getXmlClasses()) {
System.out.println("##teamcity[suiteTreeStarted name=\'" + aClass.getName() + "\']");
System.out.println("##teamcity[suiteTreeStarted name=\'" + aClass.getName() + "\' locationHint=\'java:suite://" + aClass.getName() + "\']");
for (XmlInclude include : aClass.getIncludedMethods()) {
System.out.println("##teamcity[suiteTreeNode name=\'" + include.getName() + "\']");
}
@@ -46,7 +46,9 @@ public class IDEATestNGRemoteListener implements ISuiteListener, IResultListener
System.out.println("##teamcity[testSuiteStarted name =\'" + className + "\']");
myCurrentClassName = className;
}
System.out.println("##teamcity[testStarted name=\'" + result.getMethod().getMethodName() + "\']");
final String methodName = result.getMethod().getMethodName();
System.out.println("##teamcity[testStarted name=\'" +
methodName + "\' locationHint=\'java:test://" + className + "." + methodName + "\']");
}
public void onTestSuccess(ITestResult result) {