Read-only mirrors. Development, issues and pull requests are on GitHub.

summaryrefslogtreecommitdiffhomepage
path: root/include/internal
diff options
context:
space:
mode:
authorPhil Nash2013-06-28 17:09:57 +0100
committerPhil Nash2013-06-28 17:09:57 +0100
commitb5fd5a6496ddfbf4e44dea55398630c062a466f8 (patch)
tree00dba2a19a8342098f48a6a2ee3ada892fcc8ef3 /include/internal
parent881c61b67fa6df2289ded0fe5a17dc21aeca7426 (diff)
downloadcatch3-b5fd5a6496ddfbf4e44dea55398630c062a466f8.tar.gz
INFO and CAPTURE are now scoped
- SCOPED_INFO and SCOPED_CAPTURE are now just aliases
Diffstat (limited to 'include/internal')
-rw-r--r--include/internal/catch_capture.hpp11
-rw-r--r--include/internal/catch_interfaces_capture.h7
-rw-r--r--include/internal/catch_interfaces_reporter.h4
-rw-r--r--include/internal/catch_message.h35
-rw-r--r--include/internal/catch_message.hpp30
-rw-r--r--include/internal/catch_runner_impl.hpp12
6 files changed, 37 insertions, 62 deletions
diff --git a/include/internal/catch_capture.hpp b/include/internal/catch_capture.hpp
index cf143244..4aa6bc8c 100644
--- a/include/internal/catch_capture.hpp
+++ b/include/internal/catch_capture.hpp
@@ -145,11 +145,6 @@ struct TestFailureException{};
} \
} while( Catch::isTrue( false ) )
-///////////////////////////////////////////////////////////////////////////////
-#define INTERNAL_CATCH_INFO( log, macroName ) \
- do { \
- Catch::getResultCapture().acceptMessage( Catch::MessageBuilder( macroName, CATCH_INTERNAL_LINEINFO, Catch::ResultWas::Info ) << log ); \
- } while( Catch::isTrue( false ) )
///////////////////////////////////////////////////////////////////////////////
#define INTERNAL_CATCH_MSG( log, messageType, resultDisposition, macroName ) \
@@ -159,10 +154,8 @@ struct TestFailureException{};
} while( Catch::isTrue( false ) )
///////////////////////////////////////////////////////////////////////////////
-#define INTERNAL_CATCH_SCOPED_INFO( log, macroName ) \
- Catch::ScopedMessageBuilder INTERNAL_CATCH_UNIQUE_NAME( scopedMessage )( macroName, CATCH_INTERNAL_LINEINFO, Catch::ResultWas::Info ); \
- INTERNAL_CATCH_UNIQUE_NAME( scopedMessage ) << log; \
- Catch::getResultCapture().pushScopedMessage( INTERNAL_CATCH_UNIQUE_NAME( scopedMessage ) )
+#define INTERNAL_CATCH_INFO( log, macroName ) \
+ Catch::ScopedMessage INTERNAL_CATCH_UNIQUE_NAME( scopedMessage ) = Catch::MessageBuilder( macroName, CATCH_INTERNAL_LINEINFO, Catch::ResultWas::Info ) << log;
///////////////////////////////////////////////////////////////////////////////
diff --git a/include/internal/catch_interfaces_capture.h b/include/internal/catch_interfaces_capture.h
index 8cc68cc7..5b1619ae 100644
--- a/include/internal/catch_interfaces_capture.h
+++ b/include/internal/catch_interfaces_capture.h
@@ -20,7 +20,7 @@ namespace Catch {
class AssertionResult;
struct AssertionInfo;
struct SectionInfo;
- class MessageBuilder;
+ struct MessageInfo;
class ScopedMessageBuilder;
struct IResultCapture {
@@ -31,12 +31,11 @@ namespace Catch {
virtual bool sectionStarted( SectionInfo const& sectionInfo,
Counts& assertions ) = 0;
virtual void sectionEnded( SectionInfo const& name, Counts const& assertions ) = 0;
- virtual void pushScopedMessage( ScopedMessageBuilder const& _builder ) = 0;
- virtual void popScopedMessage( ScopedMessageBuilder const& _builder ) = 0;
+ virtual void pushScopedMessage( MessageInfo const& message ) = 0;
+ virtual void popScopedMessage( MessageInfo const& message ) = 0;
virtual bool shouldDebugBreak() const = 0;
- virtual void acceptMessage( MessageBuilder const& messageBuilder ) = 0;
virtual ResultAction::Value acceptExpression( ExpressionResultBuilder const& assertionResult, AssertionInfo const& assertionInfo ) = 0;
virtual std::string getCurrentTestName() const = 0;
diff --git a/include/internal/catch_interfaces_reporter.h b/include/internal/catch_interfaces_reporter.h
index 654abf32..57db9d7b 100644
--- a/include/internal/catch_interfaces_reporter.h
+++ b/include/internal/catch_interfaces_reporter.h
@@ -102,7 +102,9 @@ namespace Catch
// !TBD This should have been done earlier, somewhere
MessageBuilder builder( assertionResult.getTestMacroName(), assertionResult.getSourceInfo(), assertionResult.getResultType() );
builder << assertionResult.getMessage();
- infoMessages.push_back( builder.build() );
+ builder.m_info.message = builder.m_stream.str();
+
+ infoMessages.push_back( builder.m_info );
}
}
virtual ~AssertionStats();
diff --git a/include/internal/catch_message.h b/include/internal/catch_message.h
index b3d4af1e..f90d64ce 100644
--- a/include/internal/catch_message.h
+++ b/include/internal/catch_message.h
@@ -35,30 +35,29 @@ namespace Catch {
static unsigned int globalCount;
};
-
- class MessageBuilder : public MessageInfo {
- public:
- MessageBuilder( std::string const& _macroName,
- SourceLineInfo const& _lineInfo,
- ResultWas::OfType _type );
-
- MessageInfo build() const;
+ struct MessageBuilder {
+ MessageBuilder( std::string const& macroName,
+ SourceLineInfo const& lineInfo,
+ ResultWas::OfType type )
+ : m_info( macroName, lineInfo, type )
+ {}
template<typename T>
- MessageBuilder& operator << ( T const& _value ) {
- stream << _value;
+ MessageBuilder& operator << ( T const& value ) {
+ m_stream << value;
return *this;
}
- private:
- std::ostringstream stream;
+
+ MessageInfo m_info;
+ std::ostringstream m_stream;
};
-
- class ScopedMessageBuilder : public MessageBuilder {
+
+ class ScopedMessage {
public:
- ScopedMessageBuilder( std::string const& _macroName,
- SourceLineInfo const& _lineInfo,
- ResultWas::OfType _type );
- ~ScopedMessageBuilder();
+ ScopedMessage( MessageBuilder const& builder );
+ ~ScopedMessage();
+
+ MessageInfo m_info;
};
} // end namespace Catch
diff --git a/include/internal/catch_message.hpp b/include/internal/catch_message.hpp
index c6996aa9..949391bf 100644
--- a/include/internal/catch_message.hpp
+++ b/include/internal/catch_message.hpp
@@ -24,31 +24,17 @@ namespace Catch {
// This may need protecting if threading support is added
unsigned int MessageInfo::globalCount = 0;
- ////////////////////////////////////////////////////////////////////////////
-
- MessageBuilder::MessageBuilder( std::string const& _macroName,
- SourceLineInfo const& _lineInfo,
- ResultWas::OfType _type )
- : MessageInfo( _macroName, _lineInfo, _type )
- {}
- MessageInfo MessageBuilder::build() const {
- MessageInfo message = *this;
- message.message = stream.str();
- return message;
- }
-
////////////////////////////////////////////////////////////////////////////
- ScopedMessageBuilder::ScopedMessageBuilder
- ( std::string const& _macroName,
- SourceLineInfo const& _lineInfo,
- ResultWas::OfType _type )
- : MessageBuilder( _macroName, _lineInfo, _type )
- {}
-
- ScopedMessageBuilder::~ScopedMessageBuilder() {
- getResultCapture().popScopedMessage( *this );
+ ScopedMessage::ScopedMessage( MessageBuilder const& builder )
+ : m_info( builder.m_info )
+ {
+ m_info.message = builder.m_stream.str();
+ getResultCapture().pushScopedMessage( m_info );
+ }
+ ScopedMessage::~ScopedMessage() {
+ getResultCapture().popScopedMessage( m_info );
}
diff --git a/include/internal/catch_runner_impl.hpp b/include/internal/catch_runner_impl.hpp
index 5191d7fa..b67f2eb0 100644
--- a/include/internal/catch_runner_impl.hpp
+++ b/include/internal/catch_runner_impl.hpp
@@ -154,10 +154,6 @@ namespace Catch {
private: // IResultCapture
- virtual void acceptMessage( MessageBuilder const& messageBuilder ) {
- m_messages.push_back( messageBuilder.build() );
- }
-
virtual ResultAction::Value acceptExpression( ExpressionResultBuilder const& assertionResult, AssertionInfo const& assertionInfo ) {
m_lastAssertionInfo = assertionInfo;
return actOnCurrentResult( assertionResult.buildResult( assertionInfo ) );
@@ -221,12 +217,12 @@ namespace Catch {
m_messages.clear();
}
- virtual void pushScopedMessage( ScopedMessageBuilder const& _builder ) {
- m_messages.push_back( _builder.build() );
+ virtual void pushScopedMessage( MessageInfo const& message ) {
+ m_messages.push_back( message );
}
- virtual void popScopedMessage( ScopedMessageBuilder const& _builder ) {
- m_messages.erase( std::remove( m_messages.begin(), m_messages.end(), _builder ), m_messages.end() );
+ virtual void popScopedMessage( MessageInfo const& message ) {
+ m_messages.erase( std::remove( m_messages.begin(), m_messages.end(), message ), m_messages.end() );
}
virtual bool shouldDebugBreak() const {