diff --git a/src/etc/testcases/taskdefs/optional/junitreport.xml b/src/etc/testcases/taskdefs/optional/junitreport.xml index 2b5ab3898..c92410be7 100644 --- a/src/etc/testcases/taskdefs/optional/junitreport.xml +++ b/src/etc/testcases/taskdefs/optional/junitreport.xml @@ -18,6 +18,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/etc/testcases/taskdefs/optional/junitreport/INCOMPLETE-sampleproject.incomplete.xml b/src/etc/testcases/taskdefs/optional/junitreport/INCOMPLETE-sampleproject.incomplete.xml new file mode 100644 index 000000000..fd91cb08b --- /dev/null +++ b/src/etc/testcases/taskdefs/optional/junitreport/INCOMPLETE-sampleproject.incomplete.xml @@ -0,0 +1,15 @@ + + + + + + + + + + diff --git a/src/etc/testcases/taskdefs/optional/junitreport/NAMESPACE-sampleproject.namespace.xml b/src/etc/testcases/taskdefs/optional/junitreport/NAMESPACE-sampleproject.namespace.xml new file mode 100644 index 000000000..19c2f00b4 --- /dev/null +++ b/src/etc/testcases/taskdefs/optional/junitreport/NAMESPACE-sampleproject.namespace.xml @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + junit.framework.AssertionFailedError: DOEG + at sampleproject.coins.CoinTest.testFail(CoinTest.java:229) + + + + java.lang.RuntimeException: RTE + at sampleproject.coins.CoinTest.testException(CoinTest.java:234) + + + + + +testGetImageURL +testGetCountry +testGetDenomination +testGetYear +testGetSubType +testFail +testException +testSuccess +]]> + + diff --git a/src/etc/testcases/taskdefs/optional/junitreport/WRONGELEMENT-sampleproject.wrongelement.xml b/src/etc/testcases/taskdefs/optional/junitreport/WRONGELEMENT-sampleproject.wrongelement.xml new file mode 100644 index 000000000..b84492c96 --- /dev/null +++ b/src/etc/testcases/taskdefs/optional/junitreport/WRONGELEMENT-sampleproject.wrongelement.xml @@ -0,0 +1,2 @@ + + diff --git a/src/etc/testcases/taskdefs/optional/junitreport/ZEROBYTES-sampleproject.package.xml b/src/etc/testcases/taskdefs/optional/junitreport/ZEROBYTES-sampleproject.package.xml new file mode 100644 index 000000000..e69de29bb diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/XMLResultAggregator.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/XMLResultAggregator.java index e0ee130bf..302628cb3 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/XMLResultAggregator.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/junit/XMLResultAggregator.java @@ -76,6 +76,19 @@ public class XMLResultAggregator extends Task implements XMLConstants { /** the current generated id */ protected int generatedId = 0; + /** + * text checked for in tests, {@value} + */ + static final String WARNING_IS_POSSIBLY_CORRUPTED = " is not a valid XML document. It is possibly corrupted."; + /** + * text checked for in tests, {@value} + */ + static final String WARNING_INVALID_ROOT_ELEMENT = " is not a valid testsuite XML document"; + /** + * text checked for in tests, {@value} + */ + static final String WARNING_EMPTY_FILE = " is empty.\nThis can be caused by the test JVM exiting unexpectedly"; + /** * Generate a report based on the document created by the merge. * @return the report @@ -228,32 +241,36 @@ public class XMLResultAggregator extends Task implements XMLConstants { // get all files and add them to the document File[] files = getFiles(); for (int i = 0; i < files.length; i++) { + File file = files[i]; try { - log("Parsing file: '" + files[i] + "'", Project.MSG_VERBOSE); - //XXX there seems to be a bug in xerces 1.3.0 that doesn't like file object - // will investigate later. It does not use the given directory but - // the vm dir instead ? Works fine with crimson. - Document testsuiteDoc - = builder.parse("file:///" + files[i].getAbsolutePath()); - Element elem = testsuiteDoc.getDocumentElement(); - // make sure that this is REALLY a testsuite. - if (TESTSUITE.equals(elem.getNodeName())) { - addTestSuite(rootElement, elem); - generatedId++; + log("Parsing file: '" + file + "'", Project.MSG_VERBOSE); + if(file.length()>0) { + Document testsuiteDoc + = builder.parse("file:///" + file.getAbsolutePath()); + Element elem = testsuiteDoc.getDocumentElement(); + // make sure that this is REALLY a testsuite. + if (TESTSUITE.equals(elem.getNodeName())) { + addTestSuite(rootElement, elem); + generatedId++; + } else { + //wrong root element name + // issue a warning. + log("the file " + file + + WARNING_INVALID_ROOT_ELEMENT, + Project.MSG_WARN); + } } else { - // issue a warning. - log("the file " + files[i] - + " is not a valid testsuite XML document", - Project.MSG_WARN); + log("the file " + file + + WARNING_EMPTY_FILE, + Project.MSG_WARN); } } catch (SAXException e) { // a testcase might have failed and write a zero-length document, // It has already failed, but hey.... mm. just put a warning - log("The file " + files[i] + " is not a valid XML document. " - + "It is possibly corrupted.", Project.MSG_WARN); + log("The file " + file + WARNING_IS_POSSIBLY_CORRUPTED, Project.MSG_WARN); log(StringUtils.getStackTrace(e), Project.MSG_DEBUG); } catch (IOException e) { - log("Error while accessing file " + files[i] + ": " + log("Error while accessing file " + file + ": " + e.getMessage(), Project.MSG_ERR); } } diff --git a/src/testcases/org/apache/tools/ant/taskdefs/optional/junit/JUnitReportTest.java b/src/testcases/org/apache/tools/ant/taskdefs/optional/junit/JUnitReportTest.java index effa8e2e0..8cf0d5024 100644 --- a/src/testcases/org/apache/tools/ant/taskdefs/optional/junit/JUnitReportTest.java +++ b/src/testcases/org/apache/tools/ant/taskdefs/optional/junit/JUnitReportTest.java @@ -52,5 +52,41 @@ public class JUnitReportTest extends BuildFileTest { } } + public void assertIndexCreated() { + if (!new File(System.getProperty("root"), + "src/etc/testcases/taskdefs/optional/junitreport/test/html/index.html").exists()) { + fail("No file index file found"); + } + + } + + /** + * run a target, assert the index file is there, look for text in the log + * @param targetName target + * @param text optional text to look for + */ + private void expectReportWithText(String targetName, String text) { + executeTarget(targetName); + assertIndexCreated(); + if(text!=null) { + assertLogContaining(text); + } + } + + + public void testEmptyFile() throws Exception { + expectReportWithText("testEmptyFile", + XMLResultAggregator.WARNING_EMPTY_FILE); + } + + public void testIncompleteFile() throws Exception { + expectReportWithText("testIncompleteFile", + XMLResultAggregator.WARNING_IS_POSSIBLY_CORRUPTED); + } + public void testWrongElement() throws Exception { + expectReportWithText("testWrongElement", + XMLResultAggregator.WARNING_INVALID_ROOT_ELEMENT); + } + }