From 4b162c134184109b71a2f79f6c058de028f0a254 Mon Sep 17 00:00:00 2001 From: Phil Nash Date: Fri, 14 Jan 2011 08:26:58 +0000 Subject: [PATCH] Keep stack of runners and pass success/ fail count to EndTestCase --- catch_reporter_basic.hpp | 6 ++++-- catch_reporter_junit.hpp | 2 +- catch_reporter_xml.hpp | 2 +- internal/catch_interfaces_reporter.h | 2 ++ internal/catch_runner_impl.hpp | 16 ++++++++++++---- 5 files changed, 20 insertions(+), 8 deletions(-) diff --git a/catch_reporter_basic.hpp b/catch_reporter_basic.hpp index 182cb06d..582549da 100644 --- a/catch_reporter_basic.hpp +++ b/catch_reporter_basic.hpp @@ -155,7 +155,7 @@ namespace Catch } /////////////////////////////////////////////////////////////////////////// - virtual void EndTestCase( const TestCaseInfo& testInfo, const std::string& stdOut, const std::string& stdErr ) + virtual void EndTestCase( const TestCaseInfo& testInfo, std::size_t succeeded, std::size_t failed, const std::string& stdOut, const std::string& stdErr ) { if( !stdOut.empty() ) m_config.stream() << "[stdout: " << trim( stdOut ) << "]\n"; @@ -163,7 +163,9 @@ namespace Catch if( !stdErr.empty() ) m_config.stream() << "[stderr: " << trim( stdErr ) << "]\n"; - m_config.stream() << "[Finished: " << testInfo.getName() << "]" << std::endl; + m_config.stream() << "[Finished: " << testInfo.getName() << " "; + ReportCounts( succeeded, failed ); + m_config.stream() << "]" << std::endl; } private: diff --git a/catch_reporter_junit.hpp b/catch_reporter_junit.hpp index 98c192eb..da795472 100644 --- a/catch_reporter_junit.hpp +++ b/catch_reporter_junit.hpp @@ -166,7 +166,7 @@ namespace Catch } /////////////////////////////////////////////////////////////////////////// - virtual void EndTestCase( const Catch::TestCaseInfo&, const std::string& stdOut, const std::string& stdErr ) + virtual void EndTestCase( const Catch::TestCaseInfo&, std::size_t /* succeeded */, std::size_t /* failed */, const std::string& stdOut, const std::string& stdErr ) { if( !stdOut.empty() ) m_stdOut << stdOut << "\n"; diff --git a/catch_reporter_xml.hpp b/catch_reporter_xml.hpp index 4dc0e791..37b85621 100644 --- a/catch_reporter_xml.hpp +++ b/catch_reporter_xml.hpp @@ -139,7 +139,7 @@ namespace Catch } /////////////////////////////////////////////////////////////////////////// - virtual void EndTestCase( const Catch::TestCaseInfo&, const std::string& /*stdOut*/, const std::string& /*stdErr*/ ) + virtual void EndTestCase( const Catch::TestCaseInfo&, std::size_t /* succeeded */, std::size_t /* failed */, const std::string& /*stdOut*/, const std::string& /*stdErr*/ ) { m_xml.scopedElement( "OverallResult" ).writeAttribute( "success", m_currentTestSuccess ); m_xml.endElement(); diff --git a/internal/catch_interfaces_reporter.h b/internal/catch_interfaces_reporter.h index a4024418..0b5dbe76 100644 --- a/internal/catch_interfaces_reporter.h +++ b/internal/catch_interfaces_reporter.h @@ -75,6 +75,8 @@ namespace Catch virtual void EndTestCase ( const TestCaseInfo& testInfo, + std::size_t succeeded, + std::size_t failed, const std::string& stdOut, const std::string& stdErr ) = 0; diff --git a/internal/catch_runner_impl.hpp b/internal/catch_runner_impl.hpp index 004757d4..258cb83c 100644 --- a/internal/catch_runner_impl.hpp +++ b/internal/catch_runner_impl.hpp @@ -16,6 +16,7 @@ #include "catch_interfaces_reporter.h" #include "catch_config.hpp" #include "catch_test_registry.hpp" +#include "catch_test_case_info.hpp" #include "catch_capture.hpp" namespace Catch @@ -87,7 +88,9 @@ namespace Catch : m_config( config ), m_successes( 0 ), m_failures( 0 ), - m_reporter( m_config.getReporter() ) + m_reporter( m_config.getReporter() ), + m_prevRunner( &Hub::getRunner() ), + m_prevResultCapture( &Hub::getResultCapture() ) { Hub::setRunner( this ); Hub::setResultCapture( this ); @@ -99,8 +102,8 @@ namespace Catch () { m_reporter->EndTesting( m_successes, m_failures ); - Hub::setRunner( NULL ); - Hub::setResultCapture( NULL ); + Hub::setRunner( m_prevRunner ); + Hub::setResultCapture( m_prevResultCapture ); } /////////////////////////////////////////////////////////////////////////// @@ -141,6 +144,9 @@ namespace Catch const TestCaseInfo& testInfo ) { + std::size_t prevSuccessCount = m_successes; + std::size_t prevFailureCount = m_failures; + m_reporter->StartTestCase( testInfo ); std::string redirectedCout; @@ -167,7 +173,7 @@ namespace Catch acceptResult( ResultWas::ThrewException ); } m_info.clear(); - m_reporter->EndTestCase( testInfo, redirectedCout, redirectedCerr ); + m_reporter->EndTestCase( testInfo, m_successes - prevSuccessCount, m_failures - prevFailureCount, redirectedCout, redirectedCerr ); } /////////////////////////////////////////////////////////////////////////// @@ -326,6 +332,8 @@ namespace Catch IReporter* m_reporter; std::vector m_scopedInfos; std::vector m_info; + IRunner* m_prevRunner; + IResultCapture* m_prevResultCapture; }; }