From 6cd3b1f7a01bf0fef7aa1a24f7e600faa58133f9 Mon Sep 17 00:00:00 2001 From: "Jesse N. Glick" Date: Fri, 2 Jun 2006 05:27:26 +0000 Subject: [PATCH] Stefan pointed out that the XML formatter was mistakenly using "JUnit4TestFacade" as the "class name" for simple TestCase's run under JUnit 4. git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@411044 13f79535-47bb-0310-9956-ffa450edef68 --- .../optional/junit/JUnitVersionHelper.java | 18 ++++++++++++++++++ .../junit/XMLJUnitResultFormatter.java | 2 +- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitVersionHelper.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitVersionHelper.java index 0f63bd271..2262a7134 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitVersionHelper.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitVersionHelper.java @@ -93,4 +93,22 @@ public class JUnitVersionHelper { return "unknown"; } + /** + * Tries to find the name of the class which a test represents + * across JUnit 3 and 4. + */ + static String getTestCaseClassName(Test test) { + String className = test.getClass().getName(); + if (className.equals("junit.framework.JUnit4TestCaseFacade")) { + // JUnit 4 wraps solo tests this way. We can extract + // the original test name with a little hack. + String name = test.toString(); + int paren = name.lastIndexOf('('); + if (paren != -1 && name.endsWith(")")) { + className = name.substring(paren + 1, name.length() - 1); + } + } + return className; + } + } diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/XMLJUnitResultFormatter.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/XMLJUnitResultFormatter.java index 50a678915..b1411cd9c 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/XMLJUnitResultFormatter.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/junit/XMLJUnitResultFormatter.java @@ -200,7 +200,7 @@ public class XMLJUnitResultFormatter implements JUnitResultFormatter, XMLConstan // a TestSuite can contain Tests from multiple classes, // even tests with the same name - disambiguate them. currentTest.setAttribute(ATTR_CLASSNAME, - test.getClass().getName()); + JUnitVersionHelper.getTestCaseClassName(test)); rootElement.appendChild(currentTest); testElements.put(test, currentTest); } else {