Refactored internal interfaces to use Totals instead of success/ fail

This commit is contained in:
Phil Nash 2012-02-23 18:51:21 +00:00
parent 8d93949b19
commit 9bbaeba3ae
7 changed files with 43 additions and 45 deletions

View File

@ -57,7 +57,7 @@ namespace Catch
{ {
config.getReporter()->StartGroup( "" ); config.getReporter()->StartGroup( "" );
runner.runAll(); runner.runAll();
config.getReporter()->EndGroup( "", runner.getSuccessCount(), runner.getFailureCount() ); config.getReporter()->EndGroup( "", runner.getTotals().assertions.passed, runner.getTotals().assertions.failed );
} }
else else
{ {
@ -67,19 +67,19 @@ namespace Catch
std::vector<std::string>::const_iterator itEnd = config.getTestSpecs().end(); std::vector<std::string>::const_iterator itEnd = config.getTestSpecs().end();
for(; it != itEnd; ++it ) for(; it != itEnd; ++it )
{ {
size_t prevSuccess = runner.getSuccessCount(); Totals prevTotals = runner.getTotals();
size_t prevFail = runner.getFailureCount();
config.getReporter()->StartGroup( *it ); config.getReporter()->StartGroup( *it );
if( runner.runMatching( *it ) == 0 ) if( runner.runMatching( *it ) == 0 )
{ {
// Use reporter? // Use reporter?
// std::cerr << "\n[Unable to match any test cases with: " << *it << "]" << std::endl; // 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<int>( runner.getFailureCount() ); return static_cast<int>( runner.getTotals().assertions.failed );
} }
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////

View File

@ -12,6 +12,8 @@
#ifndef TWOBLUECUBES_INTERNAL_CATCH_INTERFACES_RUNNER_H_INCLUDED #ifndef TWOBLUECUBES_INTERNAL_CATCH_INTERFACES_RUNNER_H_INCLUDED
#define TWOBLUECUBES_INTERNAL_CATCH_INTERFACES_RUNNER_H_INCLUDED #define TWOBLUECUBES_INTERNAL_CATCH_INTERFACES_RUNNER_H_INCLUDED
#include "catch_totals.hpp"
#include <string> #include <string>
namespace Catch namespace Catch
@ -32,10 +34,7 @@ namespace Catch
( const std::string& rawTestSpec ( const std::string& rawTestSpec
) = 0; ) = 0;
virtual std::size_t getSuccessCount virtual Totals getTotals
() const = 0;
virtual std:: size_t getFailureCount
() const = 0; () const = 0;
}; };

View File

@ -391,21 +391,13 @@ namespace Catch
} }
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
virtual std::size_t getSuccessCount virtual Totals getTotals
() ()
const const
{ {
return m_totals.assertions.passed; return m_totals;
} }
///////////////////////////////////////////////////////////////////////////
virtual std:: size_t getFailureCount
()
const
{
return m_totals.assertions.failed;
}
private: // IResultCapture private: // IResultCapture
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////

View File

@ -21,6 +21,14 @@ namespace Catch
: passed( 0 ), : passed( 0 ),
failed( 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 passed;
std::size_t failed; std::size_t failed;
@ -28,6 +36,14 @@ namespace Catch
struct Totals 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 assertions;
Counts testCases; Counts testCases;
}; };

View File

@ -43,16 +43,16 @@ TEST_CASE( "selftest/main", "Runs all Catch self tests and checks their results"
"Number of 'succeeding' tests is fixed" ) "Number of 'succeeding' tests is fixed" )
{ {
runner.runMatching( "./succeeding/*" ); runner.runMatching( "./succeeding/*" );
CHECK( runner.getSuccessCount() == 267 ); CHECK( runner.getTotals().assertions.passed == 267 );
CHECK( runner.getFailureCount() == 0 ); CHECK( runner.getTotals().assertions.failed == 0 );
} }
SECTION( "selftest/test counts/failing tests", SECTION( "selftest/test counts/failing tests",
"Number of 'failing' tests is fixed" ) "Number of 'failing' tests is fixed" )
{ {
runner.runMatching( "./failing/*" ); runner.runMatching( "./failing/*" );
CHECK( runner.getSuccessCount() == 0 ); CHECK( runner.getTotals().assertions.passed == 0 );
CHECK( runner.getFailureCount() == 68 ); CHECK( runner.getTotals().assertions.failed == 68 );
} }
} }
} }
@ -62,7 +62,7 @@ TEST_CASE( "meta/Misc/Sections", "looped tests" )
Catch::EmbeddedRunner runner; Catch::EmbeddedRunner runner;
runner.runMatching( "./mixed/Misc/Sections/nested2" ); runner.runMatching( "./mixed/Misc/Sections/nested2" );
CHECK( runner.getSuccessCount() == 2 ); CHECK( runner.getTotals().assertions.passed == 2 );
CHECK( runner.getFailureCount() == 1 ); CHECK( runner.getTotals().assertions.failed == 1 );
} }

View File

@ -18,8 +18,8 @@ namespace Catch
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
std::size_t EmbeddedRunner::runMatching std::size_t EmbeddedRunner::runMatching
( (
const std::string& rawTestSpec const std::string& rawTestSpec
) )
{ {
std::ostringstream oss; std::ostringstream oss;
Config config; Config config;
@ -32,8 +32,7 @@ namespace Catch
{ {
Runner runner( config ); Runner runner( config );
result = runner.runMatching( rawTestSpec ); result = runner.runMatching( rawTestSpec );
m_successes = runner.getSuccessCount(); m_totals = runner.getTotals();
m_failures = runner.getFailureCount();
} }
m_output = oss.str(); m_output = oss.str();
return result; return result;

View File

@ -36,24 +36,15 @@ namespace Catch
} }
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
std::size_t getSuccessCount const Totals& getTotals
() ()
const const
{ {
return m_successes; return m_totals;
} }
///////////////////////////////////////////////////////////////////////////
std:: size_t getFailureCount
()
const
{
return m_failures;
}
private: private:
std::size_t m_successes; Totals m_totals;
std::size_t m_failures;
std::string m_output; std::string m_output;
}; };
@ -97,26 +88,27 @@ namespace Catch
{ {
EmbeddedRunner runner; EmbeddedRunner runner;
runner.runMatching( testCase.getName() ); runner.runMatching( testCase.getName() );
Totals totals = runner.getTotals();
switch( m_expectedResult ) switch( m_expectedResult )
{ {
case Expected::ToSucceed: case Expected::ToSucceed:
if( runner.getFailureCount() > 0 ) if( totals.assertions.failed > 0 )
{ {
INFO( runner.getOutput() ); INFO( runner.getOutput() );
FAIL( "Expected test case '" FAIL( "Expected test case '"
<< testCase.getName() << testCase.getName()
<< "' to succeed but there was/ were " << "' to succeed but there was/ were "
<< runner.getFailureCount() << " failure(s)" ); << totals.assertions.failed << " failure(s)" );
} }
break; break;
case Expected::ToFail: case Expected::ToFail:
if( runner.getSuccessCount() > 0 ) if( totals.assertions.passed > 0 )
{ {
INFO( runner.getOutput() ); INFO( runner.getOutput() );
FAIL( "Expected test case '" FAIL( "Expected test case '"
<< testCase.getName() << testCase.getName()
<< "' to fail but there was/ were " << "' to fail but there was/ were "
<< runner.getSuccessCount() << " success(es)" ); << totals.assertions.passed << " success(es)" );
} }
break; break;
} }