diff --git a/src/catch2/reporters/catch_reporter_cumulative_base.cpp b/src/catch2/reporters/catch_reporter_cumulative_base.cpp index e0007030..dd76d1eb 100644 --- a/src/catch2/reporters/catch_reporter_cumulative_base.cpp +++ b/src/catch2/reporters/catch_reporter_cumulative_base.cpp @@ -100,8 +100,9 @@ namespace Catch { void CumulativeReporterBase::testRunEnded( TestRunStats const& testRunStats ) { - m_testRuns.emplace_back( testRunStats ); - m_testRuns.back().children.swap( m_testCases ); + assert(!m_testRun && "CumulativeReporterBase assumes there can only be one test run"); + m_testRun = Detail::make_unique( testRunStats ); + m_testRun->children.swap( m_testCases ); testRunEndedCumulative(); } diff --git a/src/catch2/reporters/catch_reporter_cumulative_base.hpp b/src/catch2/reporters/catch_reporter_cumulative_base.hpp index 34e5e794..7c2ad9ac 100644 --- a/src/catch2/reporters/catch_reporter_cumulative_base.hpp +++ b/src/catch2/reporters/catch_reporter_cumulative_base.hpp @@ -73,10 +73,11 @@ namespace Catch { std::ostream& stream; // Note: We rely on pointer identity being stable, which is why - // which is why we store around pointers rather than values. + // we store pointers to the nodes rather than the values. std::vector> m_testCases; - - std::vector m_testRuns; + // We need lazy construction here. We should probably refactor it + // later, after the events are redone. + Detail::unique_ptr m_testRun; Detail::unique_ptr m_rootSection; SectionNode* m_deepestSection = nullptr; diff --git a/src/catch2/reporters/catch_reporter_junit.cpp b/src/catch2/reporters/catch_reporter_junit.cpp index ba11c55a..e13d374d 100644 --- a/src/catch2/reporters/catch_reporter_junit.cpp +++ b/src/catch2/reporters/catch_reporter_junit.cpp @@ -99,10 +99,7 @@ namespace Catch { void JunitReporter::testRunEndedCumulative() { const auto suiteTime = suiteTimer.getElapsedSeconds(); - // HACK: There can only be one testRunNode? This needs to be - // refactored after the group nodes are excised. - assert(m_testRuns.size() == 1); - writeRun( m_testRuns.back(), suiteTime ); + writeRun( *m_testRun, suiteTime ); xml.endElement(); } diff --git a/src/catch2/reporters/catch_reporter_sonarqube.hpp b/src/catch2/reporters/catch_reporter_sonarqube.hpp index f48d6406..81544388 100644 --- a/src/catch2/reporters/catch_reporter_sonarqube.hpp +++ b/src/catch2/reporters/catch_reporter_sonarqube.hpp @@ -35,10 +35,7 @@ namespace Catch { void testRunStarting( TestRunInfo const& testRunInfo ) override; void testRunEndedCumulative() override { - // HACK: There can only be one testRunNode? This needs to be - // refactored after the group nodes are excised. - assert( m_testRuns.size() == 1 ); - writeRun( m_testRuns.back() ); + writeRun( *m_testRun ); xml.endElement(); }