diff --git a/pmd/bin/build.xml b/pmd/bin/build.xml index 016b460908..dd568a6ab3 100644 --- a/pmd/bin/build.xml +++ b/pmd/bin/build.xml @@ -162,63 +162,31 @@ - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + - + - + @@ -227,12 +195,46 @@ - - + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pmd/etc/xslt/junit-txt-output.xsl b/pmd/etc/xslt/junit-txt-output.xsl new file mode 100644 index 0000000000..84f7a0c9b5 --- /dev/null +++ b/pmd/etc/xslt/junit-txt-output.xsl @@ -0,0 +1,22 @@ + + + + +Junit test results + +Test suite failed (failures: , errors: ) + + Test case failed (failures: , errors: ) + + failure: . + + + error: . + + + +Summary + failures: , errors: . + + + diff --git a/pmd/regress/test/net/sourceforge/pmd/rules/basic/xml/UselessOverridingMethod.xml b/pmd/regress/test/net/sourceforge/pmd/rules/basic/xml/UselessOverridingMethod.xml index f607a90732..9a0fa09b67 100644 --- a/pmd/regress/test/net/sourceforge/pmd/rules/basic/xml/UselessOverridingMethod.xml +++ b/pmd/regress/test/net/sourceforge/pmd/rules/basic/xml/UselessOverridingMethod.xml @@ -235,8 +235,7 @@ public Object clone() throws CloneNotSupportedException { 0 diff --git a/pmd/regress/test/net/sourceforge/pmd/testframework/RuleTst.java b/pmd/regress/test/net/sourceforge/pmd/testframework/RuleTst.java index c199150e27..203b60b42b 100644 --- a/pmd/regress/test/net/sourceforge/pmd/testframework/RuleTst.java +++ b/pmd/regress/test/net/sourceforge/pmd/testframework/RuleTst.java @@ -82,9 +82,9 @@ public abstract class RuleTst { res = processUsingStringReader(test.getCode(), rule, test.getSourceType()).size(); } catch (Throwable t) { t.printStackTrace(); - throw new RuntimeException("Test \"" + test.getDescription() + "\" on Rule \"" + test.getRule().getName() + "\"failed"); + throw new RuntimeException('"' + test.getDescription() + "\" failed"); } - assertEquals("Test \"" + test.getDescription() + "\" on Rule \"" + test.getRule().getName() + "\" resulted in wrong number of failures,", + assertEquals('"' + test.getDescription() + "\" resulted in wrong number of failures,", test.getNumberOfProblemsExpected(), res); } finally { //Restore old properties diff --git a/pmd/regress/test/net/sourceforge/pmd/testframework/SimpleAggregatorTst.java b/pmd/regress/test/net/sourceforge/pmd/testframework/SimpleAggregatorTst.java index f3b3fb9917..a08d683a26 100644 --- a/pmd/regress/test/net/sourceforge/pmd/testframework/SimpleAggregatorTst.java +++ b/pmd/regress/test/net/sourceforge/pmd/testframework/SimpleAggregatorTst.java @@ -6,13 +6,19 @@ package test.net.sourceforge.pmd.testframework; import java.util.ArrayList; import java.util.List; -import org.junit.Test; - import net.sourceforge.pmd.Rule; +import org.junit.Test; +import org.junit.internal.runners.TestClassMethodsRunner; +import org.junit.runner.Description; +import org.junit.runner.RunWith; +import org.junit.runner.notification.Failure; +import org.junit.runner.notification.RunNotifier; + /** * Standard methods for (simple) testcases. */ +@RunWith(SimpleAggregatorTst.CustomXmlTestClassMethodsRunner.class) public abstract class SimpleAggregatorTst extends RuleTst { /** * Run a set of tests defined in an XML test-data file for a rule. The file @@ -56,9 +62,45 @@ public abstract class SimpleAggregatorTst extends RuleTst { */ @Test public void testAll() { + ArrayList l = new ArrayList(); for (Rule r : rules) { - runTests(r); + TestDescriptor[] tests = extractTestsFromXml(r); + for (int i = 0; i < tests.length; i++) { + try { + runTest(tests[i]); + } catch (Throwable t) { + Failure f = CustomXmlTestClassMethodsRunner.createFailure(r, t); + l.add(f); + } + } + } + for(Failure f: l) { + CustomXmlTestClassMethodsRunner.addFailure(f); } } + public static class CustomXmlTestClassMethodsRunner extends TestClassMethodsRunner { + public CustomXmlTestClassMethodsRunner(Class klass) { + super(klass); + } + + public static Failure createFailure(Rule rule, Throwable targetException) { + return new Failure(Description.createTestDescription( + SimpleAggregatorTst.class, "xml." + rule.getRuleSetName() + '.' + rule.getName()), + targetException); + } + + public static void addFailure(Failure failure) { + NOTIFIER.fireTestFailure(failure); + } + + @Override + public synchronized void run(RunNotifier n) { + // synchronized so that access to NOTIFIER is safe + NOTIFIER = n; + super.run(n); + } + + private static RunNotifier NOTIFIER; + } }