diff --git a/src/test_parser.ts b/src/test_parser.ts index bc79e42..2829208 100644 --- a/src/test_parser.ts +++ b/src/test_parser.ts @@ -199,8 +199,21 @@ export async function parseTap(data: string): Promise { } async function parseJunitXml(xml: any): Promise { + const counts = { + passed: 0, + failed: 0, + skipped: 0 + } + const suites: TestSuite[] = [ ] + + if (xml.testsuites === "" || xml.testsuite === "") { + return { + counts: counts, + suites: suites + } + } + let testsuites - if (xml.testsuites) { testsuites = xml.testsuites.testsuite } else if (xml.testsuite) { @@ -213,13 +226,6 @@ async function parseJunitXml(xml: any): Promise { throw new Error("expected array of testsuites") } - const suites: TestSuite[] = [ ] - const counts = { - passed: 0, - failed: 0, - skipped: 0 - } - for (const testsuite of testsuites) { const cases = [ ] @@ -304,7 +310,7 @@ export async function parseFile(filename: string): Promise { const xml: any = await parser(data) - if (xml.testsuites || xml.testsuite) { + if (xml.testsuites || xml.testsuites === "" || xml.testsuite || xml.testsuite === "") { return await parseJunitXml(xml) } diff --git a/test/junit.ts b/test/junit.ts index 8680f54..ea3c7e7 100644 --- a/test/junit.ts +++ b/test/junit.ts @@ -87,4 +87,14 @@ describe("junit", async () => { expect(result.suites[0].cases[8].name).to.eql("skipsTestNine") expect(result.suites[0].cases[9].name).to.eql("skipsTestTen") }) + + it("parses empty", async () => { + const result = await parseJunitFile(`${resourcePath}/04-empty.xml`) + + expect(result.counts.passed).to.eql(0) + expect(result.counts.failed).to.eql(0) + expect(result.counts.skipped).to.eql(0) + + expect(result.suites.length).to.eql(0) + }) }) diff --git a/test/resources/junit/04-empty.xml b/test/resources/junit/04-empty.xml new file mode 100644 index 0000000..97178b0 --- /dev/null +++ b/test/resources/junit/04-empty.xml @@ -0,0 +1 @@ + \ No newline at end of file