diff --git a/pom.xml b/pom.xml
index db3b295..302c511 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
4.0.0
io.codeclou
java-junit-xml-merger
- 1.1.0
+ 1.2.0
codeclou.io
http://codeclou.io/
diff --git a/src/main/java/io/codeclou/java/junit/xml/merger/JunitXmlParser.java b/src/main/java/io/codeclou/java/junit/xml/merger/JunitXmlParser.java
index 2eaba78..daaa866 100644
--- a/src/main/java/io/codeclou/java/junit/xml/merger/JunitXmlParser.java
+++ b/src/main/java/io/codeclou/java/junit/xml/merger/JunitXmlParser.java
@@ -43,6 +43,7 @@
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
+import java.util.Collection;
public class JunitXmlParser {
@@ -51,7 +52,7 @@ public class JunitXmlParser {
private Boolean hasCmdLineParameterErrors = false;
private Boolean hasFileNotFoundErrors = false;
- protected TestSuite parseTestSuite(File filename) throws ParserConfigurationException, SAXException, IOException {
+ protected Collection parseTestSuites(File filename) throws ParserConfigurationException, SAXException, IOException {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
DocumentBuilder builder = dbf.newDocumentBuilder();
@@ -59,15 +60,40 @@ protected TestSuite parseTestSuite(File filename) throws ParserConfigurationExce
return transform(document.getFirstChild());
}
- public TestSuite transform(Node testSuite) {
+ public Collection transform(Node testSuite) {
+ System.out.println();
+ Collection testSuites = new java.util.ArrayList<>();
+ if (testSuite.getNodeName().equals("testsuites")) {
+ // Already a collection
+ for (int i = 0; i < testSuite.getChildNodes().getLength(); i++) {
+ Node child = testSuite.getChildNodes().item(i);
+ if (child.getNodeName().equals("testsuite")) {
+ testSuites.add(transformTestSuite(child));
+ }
+ }
+ } else {
+ TestSuite t = transformTestSuite(testSuite);
+ testSuites.add(t);
+ }
+ return testSuites;
+ }
+
+ protected TestSuite parseTestSuite(File filename) throws ParserConfigurationException, SAXException, IOException {
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ DocumentBuilder builder = factory.newDocumentBuilder();
+ Document document = builder.parse(filename);
+ return transformTestSuite(document.getFirstChild());
+ }
+
+ public TestSuite transformTestSuite(Node testSuite) {
TestSuite t = new TestSuite();
NamedNodeMap attrs = testSuite.getAttributes();
t.setTests(attrs.getNamedItem("tests") != null ? Long.valueOf(attrs.getNamedItem("tests").getNodeValue()) : 0L);
- t.setErrors(attrs.getNamedItem("errors") != null ? Long.valueOf(testSuite.getAttributes().getNamedItem("errors").getNodeValue()) : 0L);
- t.setFailures(attrs.getNamedItem("failures") != null ? Long.valueOf(testSuite.getAttributes().getNamedItem("failures").getNodeValue()) : 0L);
- t.setSkipped(attrs.getNamedItem("skipped") != null ? Long.valueOf(testSuite.getAttributes().getNamedItem("skipped").getNodeValue()) : 0L);
- t.setName(testSuite.getAttributes().getNamedItem("name").getNodeValue());
- t.setTime(attrs.getNamedItem("time") != null ? Double.valueOf(testSuite.getAttributes().getNamedItem("time").getNodeValue()) : 0.0);
+ t.setErrors(attrs.getNamedItem("errors") != null ? Long.valueOf(attrs.getNamedItem("errors").getNodeValue()) : 0L);
+ t.setFailures(attrs.getNamedItem("failures") != null ? Long.valueOf(attrs.getNamedItem("failures").getNodeValue()) : 0L);
+ t.setSkipped(attrs.getNamedItem("skipped") != null ? Long.valueOf(attrs.getNamedItem("skipped").getNodeValue()) : 0L);
+ t.setName(attrs.getNamedItem("name").getNodeValue());
+ t.setTime(attrs.getNamedItem("time") != null ? Double.valueOf(attrs.getNamedItem("time").getNodeValue()) : 0.0);
t.setXml(testSuite);
return t;
}
@@ -119,7 +145,7 @@ protected void run(String[] args) throws Exception {
if (f.getAbsoluteFile().toString().endsWith(".xml")) {
System.out.println("\033[32;1;2mInfo >> adding " + f.getName() + " to TestSuites\033[0m");
try {
- suites.getTestSuites().add(parseTestSuite(f));
+ suites.getTestSuites().addAll(parseTestSuites(f));
} catch (Exception e) {
System.out.println("\033[31;1mError >> the file " + f.getName() + " cannot be read: ignored\033[0m");
e.printStackTrace();
diff --git a/src/test/java/io/codeclou/java/junit/xml/merger/JunitXmlParserTest.java b/src/test/java/io/codeclou/java/junit/xml/merger/JunitXmlParserTest.java
index 51127ab..5ed077a 100644
--- a/src/test/java/io/codeclou/java/junit/xml/merger/JunitXmlParserTest.java
+++ b/src/test/java/io/codeclou/java/junit/xml/merger/JunitXmlParserTest.java
@@ -28,6 +28,9 @@
import org.mockito.internal.util.reflection.Whitebox;
import java.io.File;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
import static junit.framework.TestCase.assertFalse;
import static org.junit.Assert.*;
@@ -39,6 +42,20 @@ private File getTestFile(String filename) {
return new File(classLoader.getResource(filename).getFile());
}
+ @Test
+ public void testParseSuites() throws Exception {
+ // GIVEN
+ JunitXmlParser parser = new JunitXmlParser();
+ // WHEN
+ Collection c = parser.parseTestSuites(getTestFile("testsuites.xml"));
+ List l = new ArrayList<>(c);
+ // THEN
+ assertFalse(c.isEmpty());
+ assertEquals(2, c.size());
+ assertEquals(l.get(0).getName(), "ut.io.codeclou.customfield.editor.model.rest.SortModelTestOne");
+ assertEquals(l.get(1). getName(), "ut.io.codeclou.customfield.editor.model.rest.SortModelTestTwo");
+ }
+
@Test
public void testParse() throws Exception {
JunitXmlParser parser = new JunitXmlParser();
diff --git a/src/test/java/io/codeclou/java/junit/xml/merger/model/TestSuitesTest.java b/src/test/java/io/codeclou/java/junit/xml/merger/model/TestSuitesTest.java
index 0535000..b2362ad 100644
--- a/src/test/java/io/codeclou/java/junit/xml/merger/model/TestSuitesTest.java
+++ b/src/test/java/io/codeclou/java/junit/xml/merger/model/TestSuitesTest.java
@@ -39,8 +39,8 @@ public void testPojoGetterSetter() {
@Test
public void testToXml() throws Exception {
JunitXmlParser jxml = new JunitXmlParser();
- TestSuite suite1 = jxml.transform(XmlHelper.xmlFromString("".replaceAll("'", "\"")));
- TestSuite suite2 = jxml.transform(XmlHelper.xmlFromString("".replaceAll("'", "\"")));
+ TestSuite suite1 = jxml.transformTestSuite(XmlHelper.xmlFromString("".replaceAll("'", "\"")));
+ TestSuite suite2 = jxml.transformTestSuite(XmlHelper.xmlFromString("".replaceAll("'", "\"")));
TestSuites suites = new TestSuites();
suites.setName("foobar23");
suites.getTestSuites().add(suite1);
diff --git a/src/test/resources/testsuites.xml b/src/test/resources/testsuites.xml
new file mode 100644
index 0000000..8afac44
--- /dev/null
+++ b/src/test/resources/testsuites.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+