From 36fb8561633cca30a66d47314e5da9c61c6a756b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Ho=C5=99e=C5=88ovsk=C3=BD?= Date: Thu, 11 Apr 2019 13:04:54 +0200 Subject: [PATCH] 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 --- include/reporters/catch_reporter_junit.cpp | 32 +++++++++---------- .../SelfTest/Baselines/junit.sw.approved.txt | 12 +++---- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/include/reporters/catch_reporter_junit.cpp b/include/reporters/catch_reporter_junit.cpp index d43ddbd4..e8375862 100644 --- a/include/reporters/catch_reporter_junit.cpp +++ b/include/reporters/catch_reporter_junit.cpp @@ -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 ); diff --git a/projects/SelfTest/Baselines/junit.sw.approved.txt b/projects/SelfTest/Baselines/junit.sw.approved.txt index ed0ecfc5..43c78d7e 100644 --- a/projects/SelfTest/Baselines/junit.sw.approved.txt +++ b/projects/SelfTest/Baselines/junit.sw.approved.txt @@ -1,11 +1,11 @@ - - - - - -loose text artifact + + + + +