"##teamcity[testSuiteFinished name='TestB']\n");
}
+ @Test
+ public void testClassWithMethodsWithoutSendTreeBefore() throws Exception {
+ Description root = Description.createSuiteDescription("ATest");
+ List<Description> tests = new ArrayList<Description>();
+ tests.add(Description.createTestDescription("ATest", "test1"));
+ tests.add(Description.createTestDescription("ATest", "test2"));
+
+ for (Description test : tests) {
+ root.addChild(test);
+ }
+
+ final StringBuffer buf = new StringBuffer();
+ JUnit4TestListener sender = createListener(buf);
+
+ sender.testRunStarted(root);
+ for (Description test : tests) {
+ sender.testStarted(test);
+ sender.testFinished(test);
+ }
+ sender.testRunFinished(new Result());
+ Assert.assertEquals("output: " + buf, "##teamcity[enteredTheMatrix]\n" +
+ "##teamcity[testSuiteStarted name='ATest' locationHint='java:suite://ATest']\n" +
+ "##teamcity[testStarted name='ATest.test1' locationHint='java:test://ATest.test1']\n" +
+ "\n" +
+ "##teamcity[testFinished name='ATest.test1']\n" +
+ "##teamcity[testStarted name='ATest.test2' locationHint='java:test://ATest.test2']\n" +
+ "\n" +
+ "##teamcity[testFinished name='ATest.test2']\n" +
+ "##teamcity[testSuiteFinished name='ATest']\n", StringUtil.convertLineSeparators(buf.toString()));
+ }
+
@Test
public void testSameShortNames() throws Exception {
final Description rootDescription = Description.createSuiteDescription("root");
import java.io.PrintStream;
import java.io.PrintWriter;
import java.io.StringWriter;
+import java.lang.annotation.Annotation;
import java.util.*;
public class JUnit4TestListener extends RunListener {
final String classFQN = JUnit4ReflectionUtil.getClassName(description);
final List parents = (List)myParents.get(description);
- List parentsHierarchy = parents != null && !parents.isEmpty() ? (List)parents.remove(0) : Collections.singletonList(description);
+ List parentsHierarchy = parents != null && !parents.isEmpty() ? (List)parents.remove(0)
+ : Collections.singletonList(Description.createSuiteDescription(classFQN, new Annotation[0]));
final String methodName = getFullMethodName(description, parentsHierarchy.isEmpty() ? null
: (Description)parentsHierarchy.get(parentsHierarchy.size() - 1));
while (idx < myStartedSuites.size() && idx < parentsHierarchy.size()) {
currentClass = (Description)myStartedSuites.get(idx);
currentParent = (Description)parentsHierarchy.get(parentsHierarchy.size() - 1 - idx);
- if (System.identityHashCode(currentClass) != System.identityHashCode(currentParent)) break;
+ if (isHierarchyDifferent(parents, currentClass, currentParent)) {
+ break;
+ }
idx++;
}
myCurrentTestStart = currentTime();
}
+ private static boolean isHierarchyDifferent(List parents,
+ Description currentClass,
+ Description currentParent) {
+ if (parents == null) {
+ return !currentClass.equals(currentParent);
+ }
+ else {
+ return System.identityHashCode(currentClass) != System.identityHashCode(currentParent);
+ }
+ }
+
protected long currentTime() {
return System.currentTimeMillis();
}