diff --git a/include/reporters/catch_reporter_junit.cpp b/include/reporters/catch_reporter_junit.cpp
index 55129b76..81f5bda4 100644
--- a/include/reporters/catch_reporter_junit.cpp
+++ b/include/reporters/catch_reporter_junit.cpp
@@ -152,19 +152,20 @@ namespace Catch {
if ( !m_config->name().empty() )
className = m_config->name() + "." + className;
- writeSection( className, "", rootSection );
+ writeSection( className, "", rootSection, true);
}
void JunitReporter::writeSection( std::string const& className,
std::string const& rootName,
- SectionNode const& sectionNode ) {
+ SectionNode const& sectionNode,
+ bool topLevel) {
std::string name = trim( sectionNode.stats.sectionInfo.name );
if( !rootName.empty() )
name = rootName + '/' + name;
- if( !sectionNode.assertions.empty() ||
- !sectionNode.stdOut.empty() ||
- !sectionNode.stdErr.empty() ) {
+ if (topLevel || (!sectionNode.assertions.empty() ||
+ !sectionNode.stdOut.empty() ||
+ !sectionNode.stdErr.empty())) {
XmlWriter::ScopedElement e = xml.scopedElement( "testcase" );
if( className.empty() ) {
xml.writeAttribute( "classname", name );
@@ -176,18 +177,20 @@ namespace Catch {
}
xml.writeAttribute( "time", ::Catch::Detail::stringify( sectionNode.stats.durationInSeconds ) );
- writeAssertions( sectionNode );
+ if( !sectionNode.assertions.empty() )
+ writeAssertions( sectionNode );
if( !sectionNode.stdOut.empty() )
xml.scopedElement( "system-out" ).writeText( trim( sectionNode.stdOut ), false );
if( !sectionNode.stdErr.empty() )
xml.scopedElement( "system-err" ).writeText( trim( sectionNode.stdErr ), false );
}
+
for( auto const& childNode : sectionNode.childSections )
if( className.empty() )
- writeSection( name, "", *childNode );
+ writeSection( name, "", *childNode, false );
else
- writeSection( className, name, *childNode );
+ writeSection( className, name, *childNode, false );
}
void JunitReporter::writeAssertions( SectionNode const& sectionNode ) {
diff --git a/include/reporters/catch_reporter_junit.h b/include/reporters/catch_reporter_junit.h
index 5ee3a570..88767de3 100644
--- a/include/reporters/catch_reporter_junit.h
+++ b/include/reporters/catch_reporter_junit.h
@@ -43,7 +43,8 @@ namespace Catch {
void writeSection(std::string const& className,
std::string const& rootName,
- SectionNode const& sectionNode);
+ SectionNode const& sectionNode,
+ bool topLevel);
void writeAssertions(SectionNode const& sectionNode);
void writeAssertion(AssertionStats const& stats);
diff --git a/projects/SelfTest/Baselines/junit.sw.approved.txt b/projects/SelfTest/Baselines/junit.sw.approved.txt
index 62ca9094..50c54060 100644
--- a/projects/SelfTest/Baselines/junit.sw.approved.txt
+++ b/projects/SelfTest/Baselines/junit.sw.approved.txt
@@ -9,6 +9,7 @@
+
expected exception
@@ -32,6 +33,7 @@ Misc.tests.cpp:
+
@@ -64,6 +66,7 @@ Condition.tests.cpp:
+
@@ -97,6 +100,7 @@ Tricky.tests.cpp:
+
@@ -112,6 +116,7 @@ Exception.tests.cpp:
+
@@ -120,8 +125,10 @@ Exception.tests.cpp:
+
+
@@ -219,6 +226,7 @@ Matchers.tests.cpp:
+
Matchers.tests.cpp:
@@ -246,6 +254,7 @@ Matchers.tests.cpp:
+
@@ -280,10 +289,12 @@ Message.tests.cpp:
+
+
@@ -424,6 +435,7 @@ Condition.tests.cpp:
+
Message from section one
@@ -436,6 +448,7 @@ Message from section two
Message.tests.cpp:
+
@@ -469,6 +482,7 @@ Message.tests.cpp:
+
@@ -511,11 +525,15 @@ Matchers.tests.cpp:
+
+
+
+
@@ -530,6 +548,7 @@ A string sent to stderr via clog
+
Message from section one
@@ -544,10 +563,12 @@ Matchers.tests.cpp:
Matchers.tests.cpp:
+
+
@@ -580,6 +601,7 @@ Matchers.tests.cpp:
Misc.tests.cpp:
+
@@ -616,12 +638,15 @@ Exception.tests.cpp:
+
+
+
Matchers.tests.cpp:
@@ -691,18 +716,21 @@ expected exception
Exception.tests.cpp:
+
unexpected exception
Exception.tests.cpp:
+
+
@@ -711,6 +739,7 @@ Exception.tests.cpp:
+
@@ -740,16 +769,21 @@ Misc.tests.cpp:
+
+
+
Previous info should not be seen
Message.tests.cpp:
+
+
Misc.tests.cpp:
@@ -781,6 +815,7 @@ Testing if fib[7] (21) is even
Misc.tests.cpp:
+
Misc.tests.cpp:
@@ -788,6 +823,7 @@ Misc.tests.cpp:
+
@@ -797,8 +833,10 @@ Misc.tests.cpp:
+
+
@@ -806,6 +844,7 @@ Misc.tests.cpp:
+
3
@@ -819,11 +858,13 @@ i := 7
Message.tests.cpp:
+
+
@@ -873,6 +914,7 @@ Exception.tests.cpp:
+