Revirtualised IResultCapture methods

Didn't really impact runtime anyway, but will need to use interface for threading support.
This commit is contained in:
Phil Nash 2017-12-05 16:18:53 +00:00
parent 51e281a684
commit 533cdc6bc1
4 changed files with 57 additions and 29 deletions

View File

@ -56,7 +56,7 @@ namespace Catch {
StringRef capturedExpression, StringRef capturedExpression,
ResultDisposition::Flags resultDisposition ) ResultDisposition::Flags resultDisposition )
: m_assertionInfo{ macroName, lineInfo, capturedExpression, resultDisposition }, : m_assertionInfo{ macroName, lineInfo, capturedExpression, resultDisposition },
m_resultCapture( static_cast<RunContext&>( getResultCapture() ) ) m_resultCapture( getResultCapture() )
{} {}
AssertionHandler::~AssertionHandler() { AssertionHandler::~AssertionHandler() {

View File

@ -44,7 +44,7 @@ namespace Catch {
AssertionInfo m_assertionInfo; AssertionInfo m_assertionInfo;
AssertionReaction m_reaction; AssertionReaction m_reaction;
bool m_completed = false; bool m_completed = false;
RunContext& m_resultCapture; IResultCapture& m_resultCapture;
public: public:
AssertionHandler AssertionHandler

View File

@ -11,6 +11,7 @@
#include <string> #include <string>
#include "catch_stringref.h" #include "catch_stringref.h"
#include "catch_result_type.h"
namespace Catch { namespace Catch {
@ -22,6 +23,9 @@ namespace Catch {
struct Counts; struct Counts;
struct BenchmarkInfo; struct BenchmarkInfo;
struct BenchmarkStats; struct BenchmarkStats;
struct AssertionReaction;
struct ITransientExpression;
struct IResultCapture { struct IResultCapture {
@ -40,6 +44,31 @@ namespace Catch {
virtual void handleFatalErrorCondition( StringRef message ) = 0; virtual void handleFatalErrorCondition( StringRef message ) = 0;
virtual void handleExpr
( AssertionInfo const& info,
ITransientExpression const& expr,
AssertionReaction& reaction ) = 0;
virtual void handleMessage
( AssertionInfo const& info,
ResultWas::OfType resultType,
StringRef const& message,
AssertionReaction& reaction ) = 0;
virtual void handleUnexpectedExceptionNotThrown
( AssertionInfo const& info,
AssertionReaction& reaction ) = 0;
virtual void handleUnexpectedInflightException
( AssertionInfo const& info,
std::string const& message,
AssertionReaction& reaction ) = 0;
virtual void handleIncomplete
( AssertionInfo const& info ) = 0;
virtual void handleNonExpr
( AssertionInfo const &info,
ResultWas::OfType resultType,
AssertionReaction &reaction ) = 0;
virtual bool lastAssertionPassed() = 0; virtual bool lastAssertionPassed() = 0;
virtual void assertionPassed() = 0; virtual void assertionPassed() = 0;

View File

@ -63,65 +63,54 @@ namespace Catch {
RunContext( RunContext const& ) = delete; RunContext( RunContext const& ) = delete;
RunContext& operator =( RunContext const& ) = delete; RunContext& operator =( RunContext const& ) = delete;
explicit RunContext(IConfigPtr const& _config, IStreamingReporterPtr&& reporter); explicit RunContext( IConfigPtr const& _config, IStreamingReporterPtr&& reporter );
~RunContext() override; ~RunContext() override;
void testGroupStarting(std::string const& testSpec, std::size_t groupIndex, std::size_t groupsCount); void testGroupStarting( std::string const& testSpec, std::size_t groupIndex, std::size_t groupsCount );
void testGroupEnded(std::string const& testSpec, Totals const& totals, std::size_t groupIndex, std::size_t groupsCount); void testGroupEnded( std::string const& testSpec, Totals const& totals, std::size_t groupIndex, std::size_t groupsCount );
Totals runTest(TestCase const& testCase); Totals runTest(TestCase const& testCase);
IConfigPtr config() const; IConfigPtr config() const;
IStreamingReporter& reporter() const; IStreamingReporter& reporter() const;
public: // IResultCapture
// Assertion handlers // Assertion handlers
void handleExpr void handleExpr
( AssertionInfo const& info, ( AssertionInfo const& info,
ITransientExpression const& expr, ITransientExpression const& expr,
AssertionReaction& reaction ); AssertionReaction& reaction ) override;
void handleMessage void handleMessage
( AssertionInfo const& info, ( AssertionInfo const& info,
ResultWas::OfType resultType, ResultWas::OfType resultType,
StringRef const& message, StringRef const& message,
AssertionReaction& reaction ); AssertionReaction& reaction ) override;
void handleUnexpectedExceptionNotThrown void handleUnexpectedExceptionNotThrown
( AssertionInfo const& info, ( AssertionInfo const& info,
AssertionReaction& reaction ); AssertionReaction& reaction ) override;
void handleUnexpectedInflightException void handleUnexpectedInflightException
( AssertionInfo const& info, ( AssertionInfo const& info,
std::string const& message, std::string const& message,
AssertionReaction& reaction ); AssertionReaction& reaction ) override;
void handleIncomplete void handleIncomplete
( AssertionInfo const& info ); ( AssertionInfo const& info ) override;
void handleNonExpr void handleNonExpr
( AssertionInfo const &info, ( AssertionInfo const &info,
ResultWas::OfType resultType, ResultWas::OfType resultType,
AssertionReaction &reaction ); AssertionReaction &reaction ) override;
void reportExpr
(AssertionInfo const &info,
ResultWas::OfType resultType,
ITransientExpression const *expr,
bool negated );
void populateReaction( AssertionReaction& reaction );
public: // IResultCapture
void assertionEnded(AssertionResult const& result);
bool sectionStarted( SectionInfo const& sectionInfo, Counts& assertions ) override; bool sectionStarted( SectionInfo const& sectionInfo, Counts& assertions ) override;
bool testForMissingAssertions(Counts& assertions);
void sectionEnded(SectionEndInfo const& endInfo) override; void sectionEnded( SectionEndInfo const& endInfo ) override;
void sectionEndedEarly(SectionEndInfo const& endInfo) override; void sectionEndedEarly( SectionEndInfo const& endInfo ) override;
void benchmarkStarting( BenchmarkInfo const& info ) override; void benchmarkStarting( BenchmarkInfo const& info ) override;
void benchmarkEnded( BenchmarkStats const& stats ) override; void benchmarkEnded( BenchmarkStats const& stats ) override;
void pushScopedMessage(MessageInfo const& message) override; void pushScopedMessage( MessageInfo const& message ) override;
void popScopedMessage(MessageInfo const& message) override; void popScopedMessage( MessageInfo const& message ) override;
std::string getCurrentTestName() const override; std::string getCurrentTestName() const override;
@ -141,10 +130,20 @@ namespace Catch {
private: private:
void runCurrentTest(std::string& redirectedCout, std::string& redirectedCerr); void runCurrentTest( std::string& redirectedCout, std::string& redirectedCerr );
void invokeActiveTestCase(); void invokeActiveTestCase();
void resetAssertionInfo(); void resetAssertionInfo();
bool testForMissingAssertions( Counts& assertions );
void assertionEnded( AssertionResult const& result );
void reportExpr
( AssertionInfo const &info,
ResultWas::OfType resultType,
ITransientExpression const *expr,
bool negated );
void populateReaction( AssertionReaction& reaction );
private: private: