diff --git a/plugins/testng/testSources/com/theoryinpractice/testng/configuration/TestNGTreeHierarchyTest.java b/plugins/testng/testSources/com/theoryinpractice/testng/configuration/TestNGTreeHierarchyTest.java index 5c1157f31b57..29301273771f 100644 --- a/plugins/testng/testSources/com/theoryinpractice/testng/configuration/TestNGTreeHierarchyTest.java +++ b/plugins/testng/testSources/com/theoryinpractice/testng/configuration/TestNGTreeHierarchyTest.java @@ -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"; + } + } } diff --git a/plugins/testng_rt/src/org/testng/IDEATestNGRemoteListener.java b/plugins/testng_rt/src/org/testng/IDEATestNGRemoteListener.java index 032f02af6a3c..7ba74d496d2d 100644 --- a/plugins/testng_rt/src/org/testng/IDEATestNGRemoteListener.java +++ b/plugins/testng_rt/src/org/testng/IDEATestNGRemoteListener.java @@ -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 + ")";