diff --git a/plugins/testng/testSources/com/theoryinpractice/testng/configuration/TestNGTreeHierarchyTest.java b/plugins/testng/testSources/com/theoryinpractice/testng/configuration/TestNGTreeHierarchyTest.java index 0b5ecb310f4b..323dbdbbbcef 100644 --- a/plugins/testng/testSources/com/theoryinpractice/testng/configuration/TestNGTreeHierarchyTest.java +++ b/plugins/testng/testSources/com/theoryinpractice/testng/configuration/TestNGTreeHierarchyTest.java @@ -293,6 +293,37 @@ public class TestNGTreeHierarchyTest { "##teamcity[testFinished name='ATest.testMe|[null, null|]']\n", StringUtil.convertLineSeparators(buf.toString())); } + @Test + public void testIncludedMethods() throws Exception { + final StringBuffer buf = new StringBuffer(); + final IDEATestNGRemoteListener listener = createListener(buf); + final MockTestNGResult result = new MockTestNGResult("ATest", "testMe", null, new Object[]{null, null}) { + @Override + public List getIncludeMethods() { + return Arrays.asList(1, 3, 5); + } + }; + for (int i = 0; i < 3; i++) { + listener.onTestStart(result); + listener.onTestFinished(result); + } + Assert.assertEquals("output: " + buf, "##teamcity[enteredTheMatrix]\n" + + "\n" + + "##teamcity[testSuiteStarted name ='ATest' locationHint = 'java:suite://ATest']\n" + + "\n" + + "##teamcity[testStarted name='ATest.testMe|[null, null|] (1)' locationHint='java:test://ATest.testMe|[1|]']\n" + + "\n" + + "##teamcity[testFinished name='ATest.testMe|[null, null|] (1)']\n" + + "\n" + + "##teamcity[testStarted name='ATest.testMe|[null, null|] (3)' locationHint='java:test://ATest.testMe|[3|]']\n" + + "\n" + + "##teamcity[testFinished name='ATest.testMe|[null, null|] (3)']\n" + + "\n" + + "##teamcity[testStarted name='ATest.testMe|[null, null|] (5)' locationHint='java:test://ATest.testMe|[5|]']\n" + + "\n" + + "##teamcity[testFinished name='ATest.testMe|[null, null|] (5)']\n", StringUtil.convertLineSeparators(buf.toString())); + } + private static void doTest(XmlSuite suite, String expected) { final StringBuffer buf = new StringBuffer(); final IDEATestNGRemoteListener listener = createListener(buf); @@ -401,6 +432,11 @@ public class TestNGTreeHierarchyTest { return myThrowable; } + @Override + public List getIncludeMethods() { + return null; + } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/plugins/testng_rt/src/org/testng/IDEATestNGRemoteListener.java b/plugins/testng_rt/src/org/testng/IDEATestNGRemoteListener.java index 8430846a8f42..677ebb2b0eee 100644 --- a/plugins/testng_rt/src/org/testng/IDEATestNGRemoteListener.java +++ b/plugins/testng_rt/src/org/testng/IDEATestNGRemoteListener.java @@ -1,6 +1,8 @@ package org.testng; import com.intellij.rt.execution.junit.ComparisonFailureData; +import org.testng.xml.XmlClass; +import org.testng.xml.XmlInclude; import org.testng.xml.XmlTest; import java.io.PrintStream; @@ -130,12 +132,20 @@ public class IDEATestNGRemoteListener { if (invocationCount == null) { invocationCount = 0; } - - final String paramString = getParamsString(parameters, invocationCount); - onTestStart(result, paramString, invocationCount, false); + Integer normalizedIndex = normalizeInvocationCountInsideIncludedMethods(invocationCount, result); + final String paramString = getParamsString(parameters, normalizedIndex); + onTestStart(result, paramString, normalizedIndex, false); myInvocationCounts.put(qualifiedName, invocationCount + 1); } + private static Integer normalizeInvocationCountInsideIncludedMethods(Integer invocationCount, ExposedTestResult result) { + List includeMethods = result.getIncludeMethods(); + if (includeMethods == null || invocationCount >= includeMethods.size()) { + return invocationCount; + } + return includeMethods.get(invocationCount); + } + public void onConfigurationStart(ExposedTestResult result) { onTestStart(result, null, -1, true); } @@ -296,6 +306,7 @@ public class IDEATestNGRemoteListener { String getFileName(); String getXmlTestName(); Throwable getThrowable(); + List getIncludeMethods(); } protected DelegatedResult createDelegated(ITestResult result) { @@ -363,6 +374,16 @@ public class IDEATestNGRemoteListener { return myResult.getThrowable(); } + public List getIncludeMethods() { + IClass testClass = myResult.getTestClass(); + if (testClass == null) return null; + XmlClass xmlClass = testClass.getXmlClass(); + if (xmlClass == null) return null; + List includedMethods = xmlClass.getIncludedMethods(); + if (includedMethods.isEmpty()) return null; + return includedMethods.get(0).getInvocationNumbers(); + } + @Override public boolean equals(Object o) { if (this == o) return true;