diff --git a/include/catch_runner.hpp b/include/catch_runner.hpp index 76e5e9f0..5d16784d 100644 --- a/include/catch_runner.hpp +++ b/include/catch_runner.hpp @@ -57,7 +57,7 @@ namespace Catch { config.getReporter()->StartGroup( "" ); runner.runAll(); - config.getReporter()->EndGroup( "", runner.getSuccessCount(), runner.getFailureCount() ); + config.getReporter()->EndGroup( "", runner.getTotals().assertions.passed, runner.getTotals().assertions.failed ); } else { @@ -67,19 +67,19 @@ namespace Catch std::vector::const_iterator itEnd = config.getTestSpecs().end(); for(; it != itEnd; ++it ) { - size_t prevSuccess = runner.getSuccessCount(); - size_t prevFail = runner.getFailureCount(); + Totals prevTotals = runner.getTotals(); config.getReporter()->StartGroup( *it ); if( runner.runMatching( *it ) == 0 ) { // Use reporter? // std::cerr << "\n[Unable to match any test cases with: " << *it << "]" << std::endl; } - config.getReporter()->EndGroup( *it, runner.getSuccessCount()-prevSuccess, runner.getFailureCount()-prevFail ); + Totals diffTotals = runner.getTotals() - prevTotals; + config.getReporter()->EndGroup( *it, diffTotals.assertions.passed, diffTotals.assertions.failed ); } } - return static_cast( runner.getFailureCount() ); + return static_cast( runner.getTotals().assertions.failed ); } ////////////////////////////////////////////////////////////////////////// diff --git a/include/internal/catch_interfaces_runner.h b/include/internal/catch_interfaces_runner.h index 05d82913..c23a0394 100644 --- a/include/internal/catch_interfaces_runner.h +++ b/include/internal/catch_interfaces_runner.h @@ -12,6 +12,8 @@ #ifndef TWOBLUECUBES_INTERNAL_CATCH_INTERFACES_RUNNER_H_INCLUDED #define TWOBLUECUBES_INTERNAL_CATCH_INTERFACES_RUNNER_H_INCLUDED +#include "catch_totals.hpp" + #include namespace Catch @@ -32,10 +34,7 @@ namespace Catch ( const std::string& rawTestSpec ) = 0; - virtual std::size_t getSuccessCount - () const = 0; - - virtual std:: size_t getFailureCount + virtual Totals getTotals () const = 0; }; diff --git a/include/internal/catch_runner_impl.hpp b/include/internal/catch_runner_impl.hpp index bc12a1c0..1bd24c14 100644 --- a/include/internal/catch_runner_impl.hpp +++ b/include/internal/catch_runner_impl.hpp @@ -391,21 +391,13 @@ namespace Catch } /////////////////////////////////////////////////////////////////////////// - virtual std::size_t getSuccessCount + virtual Totals getTotals () const { - return m_totals.assertions.passed; + return m_totals; } - /////////////////////////////////////////////////////////////////////////// - virtual std:: size_t getFailureCount - () - const - { - return m_totals.assertions.failed; - } - private: // IResultCapture /////////////////////////////////////////////////////////////////////////// diff --git a/include/internal/catch_totals.hpp b/include/internal/catch_totals.hpp index 0290c8f4..1a0c68b9 100644 --- a/include/internal/catch_totals.hpp +++ b/include/internal/catch_totals.hpp @@ -21,6 +21,14 @@ namespace Catch : passed( 0 ), failed( 0 ) {} + + Counts operator - ( const Counts& other ) const + { + Counts diff; + diff.passed = passed - other.passed; + diff.failed = failed - other.failed; + return diff; + } std::size_t passed; std::size_t failed; @@ -28,6 +36,14 @@ namespace Catch struct Totals { + Totals operator - ( const Totals& other ) const + { + Totals diff; + diff.assertions = assertions - other.assertions; + diff.testCases = testCases - other.testCases; + return diff; + } + Counts assertions; Counts testCases; }; diff --git a/projects/SelfTest/TestMain.cpp b/projects/SelfTest/TestMain.cpp index 3b4c7859..44d56745 100644 --- a/projects/SelfTest/TestMain.cpp +++ b/projects/SelfTest/TestMain.cpp @@ -43,16 +43,16 @@ TEST_CASE( "selftest/main", "Runs all Catch self tests and checks their results" "Number of 'succeeding' tests is fixed" ) { runner.runMatching( "./succeeding/*" ); - CHECK( runner.getSuccessCount() == 267 ); - CHECK( runner.getFailureCount() == 0 ); + CHECK( runner.getTotals().assertions.passed == 267 ); + CHECK( runner.getTotals().assertions.failed == 0 ); } SECTION( "selftest/test counts/failing tests", "Number of 'failing' tests is fixed" ) { runner.runMatching( "./failing/*" ); - CHECK( runner.getSuccessCount() == 0 ); - CHECK( runner.getFailureCount() == 68 ); + CHECK( runner.getTotals().assertions.passed == 0 ); + CHECK( runner.getTotals().assertions.failed == 68 ); } } } @@ -62,7 +62,7 @@ TEST_CASE( "meta/Misc/Sections", "looped tests" ) Catch::EmbeddedRunner runner; runner.runMatching( "./mixed/Misc/Sections/nested2" ); - CHECK( runner.getSuccessCount() == 2 ); - CHECK( runner.getFailureCount() == 1 ); + CHECK( runner.getTotals().assertions.passed == 2 ); + CHECK( runner.getTotals().assertions.failed == 1 ); } diff --git a/projects/SelfTest/catch_self_test.cpp b/projects/SelfTest/catch_self_test.cpp index b7edfd70..73a4da5f 100644 --- a/projects/SelfTest/catch_self_test.cpp +++ b/projects/SelfTest/catch_self_test.cpp @@ -18,8 +18,8 @@ namespace Catch /////////////////////////////////////////////////////////////////////////// std::size_t EmbeddedRunner::runMatching ( - const std::string& rawTestSpec - ) + const std::string& rawTestSpec + ) { std::ostringstream oss; Config config; @@ -32,8 +32,7 @@ namespace Catch { Runner runner( config ); result = runner.runMatching( rawTestSpec ); - m_successes = runner.getSuccessCount(); - m_failures = runner.getFailureCount(); + m_totals = runner.getTotals(); } m_output = oss.str(); return result; diff --git a/projects/SelfTest/catch_self_test.hpp b/projects/SelfTest/catch_self_test.hpp index b8a085c9..9b7fa1fd 100644 --- a/projects/SelfTest/catch_self_test.hpp +++ b/projects/SelfTest/catch_self_test.hpp @@ -36,24 +36,15 @@ namespace Catch } /////////////////////////////////////////////////////////////////////////// - std::size_t getSuccessCount + const Totals& getTotals () const { - return m_successes; + return m_totals; } - /////////////////////////////////////////////////////////////////////////// - std:: size_t getFailureCount - () - const - { - return m_failures; - } - private: - std::size_t m_successes; - std::size_t m_failures; + Totals m_totals; std::string m_output; }; @@ -97,26 +88,27 @@ namespace Catch { EmbeddedRunner runner; runner.runMatching( testCase.getName() ); + Totals totals = runner.getTotals(); switch( m_expectedResult ) { case Expected::ToSucceed: - if( runner.getFailureCount() > 0 ) + if( totals.assertions.failed > 0 ) { INFO( runner.getOutput() ); FAIL( "Expected test case '" << testCase.getName() << "' to succeed but there was/ were " - << runner.getFailureCount() << " failure(s)" ); + << totals.assertions.failed << " failure(s)" ); } break; case Expected::ToFail: - if( runner.getSuccessCount() > 0 ) + if( totals.assertions.passed > 0 ) { INFO( runner.getOutput() ); FAIL( "Expected test case '" << testCase.getName() << "' to fail but there was/ were " - << runner.getSuccessCount() << " success(es)" ); + << totals.assertions.passed << " success(es)" ); } break; }