testng: override default toString for native injections (IDEA-172974)

This commit is contained in:
Anna Kozlova
2017-05-17 12:50:18 +03:00
parent bd1a8660f5
commit 320cb35e6c
2 changed files with 58 additions and 3 deletions
@@ -22,6 +22,7 @@ import org.jetbrains.annotations.NotNull;
import org.junit.Test;
import org.testng.IDEATestNGRemoteListener;
import org.testng.ISuite;
import org.testng.internal.TestResult;
import org.testng.xml.XmlClass;
import org.testng.xml.XmlInclude;
import org.testng.xml.XmlSuite;
@@ -276,6 +277,36 @@ public class TestNGTreeHierarchyTest {
"##teamcity[testFinished name='ATest.setUp']\n" +
"##teamcity[testSuiteFinished name='a.ATest']\n", StringUtil.convertLineSeparators(buf.toString()));
}
@Test
public void testAfterMethodWithInjectedTestResult() throws Exception {
final StringBuffer buf = new StringBuffer();
final IDEATestNGRemoteListener listener = createListener(buf);
final String className = "a.ATest";
listener.onSuiteStart(className, true);
final MockTestNGResult result = new MockTestNGResult("ATest", "testMe", null, new Object[]{null, null});
listener.onTestStart(result);
listener.onTestFinished(result);
final MockTestNGResult tearDown = new MockTestNGResult(className, "tearDown", null, new Object[] {new MyTestTestResult()});
listener.onConfigurationStart(tearDown);
listener.onConfigurationSuccess(tearDown);
listener.onSuiteFinish(className);
Assert.assertEquals("output: " + buf, "##teamcity[enteredTheMatrix]\n" +
"\n" +
"##teamcity[testSuiteStarted name ='ATest' locationHint = 'java:suite://a.ATest']\n" +
"\n" +
"##teamcity[testStarted name='ATest.testMe|[null, null|]' locationHint='java:test://ATest.testMe|[0|]']\n" +
"\n" +
"##teamcity[testFinished name='ATest.testMe|[null, null|]']\n" +
"\n" +
"##teamcity[testStarted name='ATest.tearDown|[testName|]' locationHint='java:test://a.ATest.tearDown|[0|]' config='true']\n" +
"\n" +
"##teamcity[testFinished name='ATest.tearDown|[testName|]']\n" +
"##teamcity[testSuiteFinished name='a.ATest']\n", StringUtil.convertLineSeparators(buf.toString()));
}
@Test
public void testNullParameters() throws Exception {
@@ -462,4 +493,11 @@ public class TestNGTreeHierarchyTest {
return result;
}
}
public static class MyTestTestResult extends TestResult {
@Override
public String getName() {
return "testName";
}
}
}
@@ -133,7 +133,7 @@ public class IDEATestNGRemoteListener {
invocationCount = 0;
}
Integer normalizedIndex = normalizeInvocationCountInsideIncludedMethods(invocationCount, result);
final String paramString = getParamsString(parameters, normalizedIndex);
final String paramString = getParamsString(parameters, config, normalizedIndex);
onTestStart(result, paramString, normalizedIndex, config);
myInvocationCounts.put(qualifiedName, invocationCount + 1);
}
@@ -265,10 +265,27 @@ public class IDEATestNGRemoteListener {
return methodName;
}
private static String getParamsString(Object[] parameters, int invocationCount) {
private static String getParamsString(Object[] parameters, boolean config, int invocationCount) {
String paramString = "";
if (parameters.length > 0) {
paramString = Arrays.deepToString(parameters);
if (config) {
Object parameter = parameters[0];
Class<?> parameterClass = parameter.getClass();
if (ITestResult.class.isAssignableFrom(parameterClass) || ITestContext.class.isAssignableFrom(parameterClass)) {
try {
paramString = "[" + parameterClass.getMethod("getName").invoke(parameter) + "]";
}
catch (Throwable e) {
paramString = "";
}
}
else {
paramString = parameter.toString();
}
}
else {
paramString = Arrays.deepToString(parameters);
}
}
if (invocationCount > 0) {
paramString += " (" + invocationCount + ")";