Skip to content
Permalink
Browse files

Fix JUnit reporter output so that it conforms to JUnit schema

The `properties` can only go under the `testsuite` tag, not under
the `testsuites` tag.

Fixes #1598
  • Loading branch information...
horenmar committed Apr 11, 2019
1 parent 4e32e0a commit 36fb8561633cca30a66d47314e5da9c61c6a756b
Showing with 22 additions and 22 deletions.
  1. +16 −16 include/reporters/catch_reporter_junit.cpp
  2. +6 −6 projects/SelfTest/Baselines/junit.sw.approved.txt
@@ -76,22 +76,6 @@ namespace Catch {
void JunitReporter::testRunStarting( TestRunInfo const& runInfo ) {
CumulativeReporterBase::testRunStarting( runInfo );
xml.startElement( "testsuites" );

if ( m_config->hasTestFilters() || m_config->rngSeed() != 0 )
xml.startElement("properties");

if ( m_config->hasTestFilters() ) {
xml.scopedElement( "property" )
.writeAttribute( "name" , "filters" )
.writeAttribute( "value" , serializeFilters( m_config->getTestsOrTags() ) );
}

if( m_config->rngSeed() != 0 ) {
xml.scopedElement( "property" )
.writeAttribute( "name", "random-seed" )
.writeAttribute( "value", m_config->rngSeed() );
xml.endElement();
}
}

void JunitReporter::testGroupStarting( GroupInfo const& groupInfo ) {
@@ -130,6 +114,7 @@ namespace Catch {

void JunitReporter::writeGroup( TestGroupNode const& groupNode, double suiteTime ) {
XmlWriter::ScopedElement e = xml.scopedElement( "testsuite" );

TestGroupStats const& stats = groupNode.value;
xml.writeAttribute( "name", stats.groupInfo.name );
xml.writeAttribute( "errors", unexpectedExceptions );
@@ -142,6 +127,21 @@ namespace Catch {
xml.writeAttribute( "time", suiteTime );
xml.writeAttribute( "timestamp", getCurrentTimestamp() );

// Write properties if there are any
if (m_config->hasTestFilters() || m_config->rngSeed() != 0) {
auto properties = xml.scopedElement("properties");
if (m_config->hasTestFilters()) {
xml.scopedElement("property")
.writeAttribute("name", "filters")
.writeAttribute("value", serializeFilters(m_config->getTestsOrTags()));
}
if (m_config->rngSeed() != 0) {
xml.scopedElement("property")
.writeAttribute("name", "random-seed")
.writeAttribute("value", m_config->rngSeed());
}
}

// Write test cases
for( auto const& child : groupNode.children )
writeTestCase( *child );
@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<testsuites>
<properties>
<property name="filters" value="~[!nonportable]~[!benchmark]~[approvals]"/>
<property name="random-seed" value="1"/>
</properties>
loose text artifact
<testsuitesloose text artifact
>
<testsuite name="<exe-name>" errors="17" failures="123" tests="1437" hostname="tbd" time="{duration}" timestamp="{iso8601-timestamp}">
<properties>
<property name="filters" value="~[!nonportable]~[!benchmark]~[approvals]"/>
<property name="random-seed" value="1"/>
</properties>
<testcase classname="<exe-name>.global" name="# A test name that starts with a #" time="{duration}"/>
<testcase classname="<exe-name>.global" name="#1005: Comparing pointer to int and long (NULL can be either on various systems)" time="{duration}"/>
<testcase classname="<exe-name>.global" name="#1027" time="{duration}"/>

0 comments on commit 36fb856

Please sign in to comment.
You can’t perform that action at this time.