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);
+ }
+
}