mirror of
https://github.com/catchorg/Catch2.git
synced 2024-11-17 11:12:25 +01:00
Reduce number of places getCurrentRunContext() is called
This commit is contained in:
parent
6789dfa2ba
commit
c70170e904
@ -30,10 +30,12 @@ namespace Catch {
|
||||
virtual ~IRunContext();
|
||||
|
||||
virtual void assertionEnded( AssertionResult const& result ) = 0;
|
||||
|
||||
virtual bool sectionStarted( SectionInfo const& sectionInfo,
|
||||
Counts& assertions ) = 0;
|
||||
virtual void sectionEnded( SectionEndInfo const& endInfo ) = 0;
|
||||
virtual void sectionEndedEarly( SectionEndInfo const& endInfo ) = 0;
|
||||
|
||||
virtual void pushScopedMessage( MessageInfo const& message ) = 0;
|
||||
virtual void popScopedMessage( MessageInfo const& message ) = 0;
|
||||
|
||||
@ -42,11 +44,13 @@ namespace Catch {
|
||||
virtual std::string getCurrentTestName() const = 0;
|
||||
virtual AssertionResult const* getLastResult() const = 0;
|
||||
virtual bool isAborting() const = 0;
|
||||
|
||||
virtual IConfig const& config() const = 0;
|
||||
};
|
||||
|
||||
IRunContext* tryGetCurrentRunContext();
|
||||
IRunContext& getCurrentRunContext();
|
||||
|
||||
IConfig const* getCurrentConfig();
|
||||
}
|
||||
|
||||
|
@ -14,6 +14,8 @@
|
||||
|
||||
namespace Catch {
|
||||
|
||||
struct IRunContext;
|
||||
|
||||
struct MessageInfo {
|
||||
MessageInfo( std::string const& _macroName,
|
||||
SourceLineInfo const& _lineInfo,
|
||||
@ -58,6 +60,7 @@ namespace Catch {
|
||||
ScopedMessage( ScopedMessage const& other );
|
||||
~ScopedMessage();
|
||||
|
||||
IRunContext& m_runContext;
|
||||
MessageInfo m_info;
|
||||
};
|
||||
|
||||
|
@ -28,17 +28,19 @@ namespace Catch {
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
ScopedMessage::ScopedMessage( MessageBuilder const& builder )
|
||||
: m_info( builder.m_info )
|
||||
: m_info( builder.m_info ),
|
||||
m_runContext( getCurrentRunContext() )
|
||||
{
|
||||
m_info.message = builder.m_stream.str();
|
||||
getCurrentRunContext().pushScopedMessage( m_info );
|
||||
m_runContext.pushScopedMessage( m_info );
|
||||
}
|
||||
ScopedMessage::ScopedMessage( ScopedMessage const& other )
|
||||
: m_info( other.m_info )
|
||||
: m_info( other.m_info ),
|
||||
m_runContext( other.m_runContext )
|
||||
{}
|
||||
|
||||
ScopedMessage::~ScopedMessage() {
|
||||
getCurrentRunContext().popScopedMessage( m_info );
|
||||
m_runContext.popScopedMessage( m_info );
|
||||
}
|
||||
|
||||
|
||||
|
@ -15,6 +15,7 @@
|
||||
|
||||
namespace Catch {
|
||||
|
||||
struct IRunContext;
|
||||
struct TestFailureException{};
|
||||
|
||||
template<typename T> class ExpressionLhs;
|
||||
@ -77,6 +78,7 @@ namespace Catch {
|
||||
bool allowThrows() const;
|
||||
|
||||
private:
|
||||
IRunContext& m_runContext;
|
||||
AssertionInfo m_assertionInfo;
|
||||
AssertionResultData m_data;
|
||||
struct ExprComponents {
|
||||
|
@ -26,7 +26,8 @@ namespace Catch {
|
||||
char const* capturedExpression,
|
||||
ResultDisposition::Flags resultDisposition,
|
||||
char const* secondArg )
|
||||
: m_assertionInfo( macroName, lineInfo, capturedExpressionWithSecondArgument( capturedExpression, secondArg ), resultDisposition ),
|
||||
: m_runContext( getCurrentRunContext() ),
|
||||
m_assertionInfo( macroName, lineInfo, capturedExpressionWithSecondArgument( capturedExpression, secondArg ), resultDisposition ),
|
||||
m_shouldDebugBreak( false ),
|
||||
m_shouldThrow( false )
|
||||
{}
|
||||
@ -96,13 +97,12 @@ namespace Catch {
|
||||
}
|
||||
void ResultBuilder::handleResult( AssertionResult const& result )
|
||||
{
|
||||
IRunContext& context = getCurrentRunContext();
|
||||
context.assertionEnded( result );
|
||||
m_runContext.assertionEnded( result );
|
||||
|
||||
if( !result.isOk() ) {
|
||||
if( context.config().shouldDebugBreak() )
|
||||
if( m_runContext.config().shouldDebugBreak() )
|
||||
m_shouldDebugBreak = true;
|
||||
if( context.isAborting() || (m_assertionInfo.resultDisposition & ResultDisposition::Normal) )
|
||||
if( m_runContext.isAborting() || (m_assertionInfo.resultDisposition & ResultDisposition::Normal) )
|
||||
m_shouldThrow = true;
|
||||
}
|
||||
}
|
||||
@ -112,7 +112,7 @@ namespace Catch {
|
||||
}
|
||||
|
||||
bool ResultBuilder::shouldDebugBreak() const { return m_shouldDebugBreak; }
|
||||
bool ResultBuilder::allowThrows() const { return getCurrentConfig()->allowThrows(); }
|
||||
bool ResultBuilder::allowThrows() const { return m_runContext.config().allowThrows(); }
|
||||
|
||||
AssertionResult ResultBuilder::build() const
|
||||
{
|
||||
|
@ -63,7 +63,6 @@ namespace Catch {
|
||||
IRunContext* tryGetCurrentRunContext() {
|
||||
return s_currentRunContext;
|
||||
}
|
||||
|
||||
IRunContext& getCurrentRunContext() {
|
||||
if( IRunContext* capture = tryGetCurrentRunContext() )
|
||||
return *capture;
|
||||
|
@ -16,6 +16,8 @@
|
||||
|
||||
namespace Catch {
|
||||
|
||||
struct IRunContext;
|
||||
|
||||
class Section : NonCopyable {
|
||||
public:
|
||||
Section( SectionInfo const& info );
|
||||
@ -29,6 +31,7 @@ namespace Catch {
|
||||
|
||||
std::string m_name;
|
||||
Counts m_assertions;
|
||||
IRunContext& m_runContext;
|
||||
bool m_sectionIncluded;
|
||||
Timer m_timer;
|
||||
};
|
||||
|
@ -26,7 +26,8 @@ namespace Catch {
|
||||
|
||||
Section::Section( SectionInfo const& info )
|
||||
: m_info( info ),
|
||||
m_sectionIncluded( getCurrentRunContext().sectionStarted( m_info, m_assertions ) )
|
||||
m_runContext( getCurrentRunContext() ),
|
||||
m_sectionIncluded( m_runContext.sectionStarted( m_info, m_assertions ) )
|
||||
{
|
||||
m_timer.start();
|
||||
}
|
||||
@ -35,9 +36,9 @@ namespace Catch {
|
||||
if( m_sectionIncluded ) {
|
||||
SectionEndInfo endInfo( m_info, m_assertions, m_timer.getElapsedSeconds() );
|
||||
if( std::uncaught_exception() )
|
||||
getCurrentRunContext().sectionEndedEarly( endInfo );
|
||||
m_runContext.sectionEndedEarly( endInfo );
|
||||
else
|
||||
getCurrentRunContext().sectionEnded( endInfo );
|
||||
m_runContext.sectionEnded( endInfo );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -55,10 +55,13 @@ namespace Detail {
|
||||
|
||||
std::string toString( std::string const& value ) {
|
||||
std::string s = value;
|
||||
if( getCurrentConfig() && getCurrentConfig()->showInvisibles() ) {
|
||||
IConfig const* config = getCurrentConfig();
|
||||
if( config && config->showInvisibles() ) {
|
||||
for(size_t i = 0; i < s.size(); ++i ) {
|
||||
std::string subs;
|
||||
switch( s[i] ) {
|
||||
case '\r': subs = "\\r"; break;
|
||||
case '\l': subs = "\\l"; break;
|
||||
case '\n': subs = "\\n"; break;
|
||||
case '\t': subs = "\\t"; break;
|
||||
default: break;
|
||||
|
Loading…
Reference in New Issue
Block a user