junit/testng sm: escape names e.g. for groovy tests with special names

This commit is contained in:
Anna Kozlova
2015-04-24 15:28:17 +02:00
parent 6f7c522bbb
commit 60efc704ae
2 changed files with 42 additions and 37 deletions
@@ -21,6 +21,7 @@
package com.intellij.junit4;
import com.intellij.rt.execution.junit.ComparisonFailureData;
import jetbrains.buildServer.messages.serviceMessages.MapSerializerUtil;
import jetbrains.buildServer.messages.serviceMessages.ServiceMessage;
import jetbrains.buildServer.messages.serviceMessages.ServiceMessageTypes;
import junit.framework.ComparisonFailure;
@@ -44,6 +45,10 @@ class SMTestSender extends RunListener {
private String myParamName;
private boolean myIgnoreTopSuite;
private static String escapeName(String str) {
return MapSerializerUtil.escapeStr(str, MapSerializerUtil.STD_ESCAPER);
}
public void testRunStarted(Description description) throws Exception {
myCurrentClassName = myIgnoreTopSuite ? description.toString() : null;
System.out.println("##teamcity[enteredTheMatrix]\n");
@@ -51,10 +56,10 @@ class SMTestSender extends RunListener {
public void testRunFinished(Result result) throws Exception {
if (myParamName != null) {
System.out.println("##teamcity[testSuiteFinished name=\'" + myParamName + "\']\n");
System.out.println("##teamcity[testSuiteFinished name=\'" + escapeName(myParamName) + "\']\n");
}
if (myCurrentClassName != null) {
System.out.println("##teamcity[testSuiteFinished name=\'" + myCurrentClassName + "\']\n");
System.out.println("##teamcity[testSuiteFinished name=\'" + escapeName(myCurrentClassName) + "\']\n");
}
}
@@ -62,32 +67,32 @@ class SMTestSender extends RunListener {
final String methodName = JUnit4ReflectionUtil.getMethodName(description);
final int paramStart = methodName.indexOf('[');
if (paramStart < 0 && myParamName != null){
System.out.println("##teamcity[testSuiteFinished name=\'" + myParamName + "\']");
System.out.println("##teamcity[testSuiteFinished name=\'" + escapeName(myParamName) + "\']");
myParamName = null;
}
final String className = JUnit4ReflectionUtil.getClassName(description);
if (!className.equals(myCurrentClassName)) {
if (myCurrentClassName != null) {
System.out.println("##teamcity[testSuiteFinished name=\'" + myCurrentClassName + "\']");
System.out.println("##teamcity[testSuiteFinished name=\'" + escapeName(myCurrentClassName) + "\']");
}
myCurrentClassName = className;
System.out.println("##teamcity[testSuiteStarted name =\'" + myCurrentClassName + "\']");
System.out.println("##teamcity[testSuiteStarted name =\'" + escapeName(myCurrentClassName) + "\']");
}
if (paramStart > -1) {
final String paramName = methodName.substring(paramStart, methodName.length());
if (!paramName.equals(myParamName)) {
if (myParamName != null) {
System.out.println("##teamcity[testSuiteFinished name=\'" + myParamName + "\']");
System.out.println("##teamcity[testSuiteFinished name=\'" + escapeName(myParamName) + "\']");
}
myParamName = paramName;
System.out.println("##teamcity[testSuiteStarted name =\'" + myParamName + "\']");
System.out.println("##teamcity[testSuiteStarted name =\'" + escapeName(myParamName) + "\']");
}
}
System.out.println("##teamcity[testStarted name=\'" + methodName + "\']");
System.out.println("##teamcity[testStarted name=\'" + escapeName(methodName) + "\']");
}
public void testFinished(Description description) throws Exception {
System.out.println("\n##teamcity[testFinished name=\'" + JUnit4ReflectionUtil.getMethodName(description) + "\']");
System.out.println("\n##teamcity[testFinished name=\'" + escapeName(JUnit4ReflectionUtil.getMethodName(description)) + "\']");
}
public void testFailure(Failure failure) throws Exception {
@@ -197,8 +202,8 @@ class SMTestSender extends RunListener {
private static void sendTree(JUnit4IdeaTestRunner runner, Object description, List tests) {
if (tests.isEmpty()) {
final String methodName = JUnit4ReflectionUtil.getMethodName((Description)description);
System.out.println("##teamcity[suiteTreeNode name=\'" + methodName +
"\' locationHint=\'java:test://" + JUnit4ReflectionUtil.getClassName((Description)description) + "." + methodName + "\']");
System.out.println("##teamcity[suiteTreeNode name=\'" + escapeName(methodName) +
"\' locationHint=\'java:test://" + escapeName(JUnit4ReflectionUtil.getClassName((Description)description) + "." + methodName) + "\']");
}
boolean pass = false;
for (Iterator iterator = tests.iterator(); iterator.hasNext(); ) {
@@ -219,13 +224,13 @@ class SMTestSender extends RunListener {
}
}
}
System.out.println("##teamcity[suiteTreeStarted name=\'" + className +
"\' locationHint=\'java:suite://" + locationHint + "\']");
System.out.println("##teamcity[suiteTreeStarted name=\'" + escapeName(className) +
"\' locationHint=\'java:suite://" + escapeName(locationHint) + "\']");
}
sendTree(runner, next, childTests);
}
if (pass) {
System.out.println("##teamcity[suiteTreeEnded name=\'" + JUnit4ReflectionUtil.getClassName((Description)description) + "\']");
System.out.println("##teamcity[suiteTreeEnded name=\'" + escapeName(JUnit4ReflectionUtil.getClassName((Description)description)) + "\']");
}
}
@@ -1,5 +1,6 @@
package org.testng;
import jetbrains.buildServer.messages.serviceMessages.MapSerializerUtil;
import jetbrains.buildServer.messages.serviceMessages.ServiceMessage;
import jetbrains.buildServer.messages.serviceMessages.ServiceMessageTypes;
import org.testng.internal.IResultListener;
@@ -21,22 +22,26 @@ public class IDEATestNGRemoteListener implements ISuiteListener, IResultListener
private String myMethodName;
private int myInvocationCount = 0;
private static String escapeName(String str) {
return MapSerializerUtil.escapeStr(str, MapSerializerUtil.STD_ESCAPER);
}
public void onConfigurationSuccess(ITestResult result) {
final String className = result.getTestClass().getName();
System.out.println("##teamcity[testSuiteStarted name=\'" + className + "\']");
System.out.println("##teamcity[testSuiteStarted name=\'" + escapeName(className) + "\']");
final String methodName = result.getMethod().getMethodName();
System.out.println("##teamcity[testStarted name=\'" + methodName + "\']");
System.out.println("##teamcity[testStarted name=\'" + escapeName(methodName) + "\']");
onTestSuccess(result);
System.out.println("\n##teamcity[testSuiteFinished name=\'" + className + "\']");
System.out.println("\n##teamcity[testSuiteFinished name=\'" + escapeName(className) + "\']");
}
public void onConfigurationFailure(ITestResult result) {
final String className = result.getTestClass().getName();
System.out.println("##teamcity[testSuiteStarted name=\'" + className + "\']");
System.out.println("##teamcity[testSuiteStarted name=\'" + escapeName(className) + "\']");
final String methodName = result.getMethod().getMethodName();
System.out.println("##teamcity[testStarted name=\'" + methodName + "\']");
System.out.println("##teamcity[testStarted name=\'" + escapeName(methodName) + "\']");
onTestFailure(result);
System.out.println("\n##teamcity[testSuiteFinished name=\'" + className + "\']");
System.out.println("\n##teamcity[testSuiteFinished name=\'" + escapeName(className) + "\']");
}
public void onConfigurationSkip(ITestResult itr) {
@@ -44,26 +49,26 @@ public class IDEATestNGRemoteListener implements ISuiteListener, IResultListener
public void onStart(ISuite suite) {
System.out.println("##teamcity[enteredTheMatrix]");
System.out.println("##teamcity[testSuiteStarted name =\'" + suite.getName() + "\']");
System.out.println("##teamcity[testSuiteStarted name =\'" + escapeName(suite.getName()) + "\']");
}
public void onFinish(ISuite suite) {
System.out.println("##teamcity[testSuiteFinished name=\'" + suite.getName() + "\']");
System.out.println("##teamcity[testSuiteFinished name=\'" + escapeName(suite.getName()) + "\']");
}
public void onTestStart(ITestResult result) {
final String className = result.getTestClass().getName();
if (myCurrentClassName == null || !myCurrentClassName.equals(className)) {
if (myCurrentClassName != null) {
System.out.println("##teamcity[testSuiteFinished name=\'" + myCurrentClassName + "\']");
System.out.println("##teamcity[testSuiteFinished name=\'" + escapeName(myCurrentClassName) + "\']");
}
System.out.println("##teamcity[testSuiteStarted name =\'" + className + "\']");
System.out.println("##teamcity[testSuiteStarted name =\'" + escapeName(className) + "\']");
myCurrentClassName = className;
myInvocationCount = 0;
}
String methodName = getMethodName(result, false);
System.out.println("##teamcity[testStarted name=\'" +
methodName + "\' locationHint=\'java:test://" + className + "." + methodName + "\']");
System.out.println("##teamcity[testStarted name=\'" + escapeName(methodName) +
"\' locationHint=\'java:test://" + escapeName(className + "." + methodName) + "\']");
}
private String getMethodName(ITestResult result) {
@@ -89,7 +94,7 @@ public class IDEATestNGRemoteListener implements ISuiteListener, IResultListener
}
public void onTestSuccess(ITestResult result) {
System.out.println("\n##teamcity[testFinished name=\'" + getMethodName(result) + "\']");
System.out.println("\n##teamcity[testFinished name=\'" + escapeName(getMethodName(result)) + "\']");
}
public String getTrace(Throwable tr) {
@@ -111,25 +116,20 @@ public class IDEATestNGRemoteListener implements ISuiteListener, IResultListener
attrs.put("details", trace);
attrs.put("error", "true");
System.out.println(ServiceMessage.asString(ServiceMessageTypes.TEST_FAILED, attrs));
System.out.println("\n##teamcity[testFinished name=\'" + methodName + "\']");
System.out.println("\n##teamcity[testFinished name=\'" + escapeName(methodName) + "\']");
}
public void onTestSkipped(ITestResult result) {
System.out.println("\n##teamcity[testFinished name=\'" + getMethodName(result) + "\']");
System.out.println("\n##teamcity[testFinished name=\'" + escapeName(getMethodName(result)) + "\']");
}
public void onTestFailedButWithinSuccessPercentage(ITestResult result) {
public void onTestFailedButWithinSuccessPercentage(ITestResult result) {}
}
public void onStart(ITestContext context) {
//System.out.println("##teamcity[testSuiteStarted name =\'" + context.getName() + "\']");
}
public void onStart(ITestContext context) {}
public void onFinish(ITestContext context) {
if (myCurrentClassName != null) {
System.out.println("##teamcity[testSuiteFinished name=\'" + myCurrentClassName + "\']");
System.out.println("##teamcity[testSuiteFinished name=\'" + escapeName(myCurrentClassName) + "\']");
}
//System.out.println("##teamcity[testSuiteFinished name=\'" + context.getName() + "\']");
}
}