Separated getting test cases to run from running them

This commit is contained in:
Phil Nash
2012-08-15 19:12:51 +01:00
parent d0a5461add
commit c1dbc9c22b
9 changed files with 92 additions and 80 deletions

View File

@@ -34,16 +34,16 @@ TEST_CASE( "selftest/main", "Runs all Catch self tests and checks their results"
SECTION( "selftest/test counts/succeeding tests",
"Number of 'succeeding' tests is fixed" ) {
runner.runMatching( "./succeeding/*" );
CHECK( runner.getTotals().assertions.passed == 285 );
CHECK( runner.getTotals().assertions.failed == 0 );
Totals totals = runner.runMatching( "./succeeding/*" );
CHECK( totals.assertions.passed == 285 );
CHECK( totals.assertions.failed == 0 );
}
SECTION( "selftest/test counts/failing tests",
"Number of 'failing' tests is fixed" ) {
runner.runMatching( "./failing/*" );
CHECK( runner.getTotals().assertions.passed == 0 );
CHECK( runner.getTotals().assertions.failed == 72 );
Totals totals = runner.runMatching( "./failing/*" );
CHECK( totals.assertions.passed == 0 );
CHECK( totals.assertions.failed == 72 );
}
}
}
@@ -51,9 +51,9 @@ TEST_CASE( "selftest/main", "Runs all Catch self tests and checks their results"
TEST_CASE( "meta/Misc/Sections", "looped tests" ) {
Catch::EmbeddedRunner runner;
runner.runMatching( "./mixed/Misc/Sections/nested2" );
CHECK( runner.getTotals().assertions.passed == 2 );
CHECK( runner.getTotals().assertions.failed == 1 );
Catch::Totals totals = runner.runMatching( "./mixed/Misc/Sections/nested2" );
CHECK( totals.assertions.passed == 2 );
CHECK( totals.assertions.failed == 1 );
}
#pragma clang diagnostic ignored "-Wweak-vtables"

View File

@@ -13,21 +13,20 @@
namespace Catch{
std::size_t EmbeddedRunner::runMatching( const std::string& rawTestSpec, const std::string& ) {
Totals EmbeddedRunner::runMatching( const std::string& rawTestSpec, const std::string& ) {
std::ostringstream oss;
Config config;
config.setStreamBuf( oss.rdbuf() );
std::size_t result;
Totals totals;
// Scoped because Runner doesn't report EndTesting until its destructor
{
Runner runner( config, m_reporter.get() );
result = runner.runMatching( rawTestSpec );
m_totals = runner.getTotals();
totals = runner.runMatching( rawTestSpec );
}
m_output = oss.str();
return result;
return totals;
}
void MockReporter::Result( const ResultInfo& resultInfo ) {

View File

@@ -114,17 +114,13 @@ namespace Catch {
public:
EmbeddedRunner() : m_reporter( new MockReporter() ) {}
std::size_t runMatching( const std::string& rawTestSpec,
const std::string& reporter = "basic" );
Totals runMatching( const std::string& rawTestSpec,
const std::string& reporter = "basic" );
std::string getOutput() {
return m_output;
}
const Totals& getTotals() const {
return m_totals;
}
void addRecorder( const std::string& recorder ) {
m_reporter->addRecorder( recorder );
}
@@ -134,7 +130,6 @@ namespace Catch {
}
private:
Totals m_totals;
std::string m_output;
Ptr<MockReporter> m_reporter;
};
@@ -157,8 +152,7 @@ namespace Catch {
void operator()( const TestCaseInfo& testCase ) {
EmbeddedRunner runner;
runner.runMatching( testCase.getName() );
Totals totals = runner.getTotals();
Totals totals = runner.runMatching( testCase.getName() );
switch( m_expectedResult ) {
case Expected::ToSucceed:
if( totals.assertions.failed > 0 ) {