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

summaryrefslogtreecommitdiffhomepage
path: root/src/catch2
diff options
context:
space:
mode:
authorMartin Hořeňovský2025-09-23 11:01:27 +0200
committerMartin Hořeňovský2025-09-23 11:46:26 +0200
commit434bf55d4727ab1d1aef244ef16823a0ed1e6b4a (patch)
treee891786493ba589f694459bc85f246e5a6d3e862 /src/catch2
parent9048c24fa7c6b568d52f76cbf06bbd62b7f83556 (diff)
downloadcatch3-434bf55d4727ab1d1aef244ef16823a0ed1e6b4a.tar.gz
Make message push/pop static
Since the change to make the message macros thread-safe, and thus thread-local, there is no need to handle messages through instance of `RunContext`.
Diffstat (limited to 'src/catch2')
-rw-r--r--src/catch2/catch_message.cpp11
-rw-r--r--src/catch2/catch_message.hpp3
-rw-r--r--src/catch2/interfaces/catch_interfaces_capture.hpp8
-rw-r--r--src/catch2/internal/catch_run_context.cpp44
-rw-r--r--src/catch2/internal/catch_run_context.hpp5
5 files changed, 32 insertions, 39 deletions
diff --git a/src/catch2/catch_message.cpp b/src/catch2/catch_message.cpp
index 1ea8c299..dc7d5678 100644
--- a/src/catch2/catch_message.cpp
+++ b/src/catch2/catch_message.cpp
@@ -22,7 +22,7 @@ namespace Catch {
m_messageId( builder.m_info.sequence ) {
MessageInfo info( CATCH_MOVE( builder.m_info ) );
info.message = builder.m_stream.str();
- getResultCapture().pushScopedMessage( CATCH_MOVE(info) );
+ IResultCapture::pushScopedMessage( CATCH_MOVE( info ) );
}
ScopedMessage::ScopedMessage( ScopedMessage&& old ) noexcept:
@@ -31,15 +31,14 @@ namespace Catch {
}
ScopedMessage::~ScopedMessage() {
- if ( !m_moved ) { getResultCapture().popScopedMessage( m_messageId ); }
+ if ( !m_moved ) { IResultCapture::popScopedMessage( m_messageId ); }
}
Capturer::Capturer( StringRef macroName,
SourceLineInfo const& lineInfo,
ResultWas::OfType resultType,
- StringRef names ):
- m_resultCapture( getResultCapture() ) {
+ StringRef names ) {
auto trimmed = [&] (size_t start, size_t end) {
while (names[start] == ',' || isspace(static_cast<unsigned char>(names[start]))) {
++start;
@@ -101,14 +100,14 @@ namespace Catch {
Capturer::~Capturer() {
assert( m_captured == m_messages.size() );
for (auto const& message : m_messages) {
- m_resultCapture.popScopedMessage( message.sequence );
+ IResultCapture::popScopedMessage( message.sequence );
}
}
void Capturer::captureValue( size_t index, std::string const& value ) {
assert( index < m_messages.size() );
m_messages[index].message += value;
- m_resultCapture.pushScopedMessage( CATCH_MOVE(m_messages[index]) );
+ IResultCapture::pushScopedMessage( CATCH_MOVE( m_messages[index] ) );
m_captured++;
}
diff --git a/src/catch2/catch_message.hpp b/src/catch2/catch_message.hpp
index db3d682a..44b07476 100644
--- a/src/catch2/catch_message.hpp
+++ b/src/catch2/catch_message.hpp
@@ -63,7 +63,6 @@ namespace Catch {
class Capturer {
std::vector<MessageInfo> m_messages;
- IResultCapture& m_resultCapture;
size_t m_captured = 0;
public:
Capturer( StringRef macroName, SourceLineInfo const& lineInfo, ResultWas::OfType resultType, StringRef names );
@@ -111,7 +110,7 @@ namespace Catch {
///////////////////////////////////////////////////////////////////////////////
#define INTERNAL_CATCH_UNSCOPED_INFO( macroName, log ) \
- Catch::getResultCapture().emplaceUnscopedMessage( Catch::MessageBuilder( macroName##_catch_sr, CATCH_INTERNAL_LINEINFO, Catch::ResultWas::Info ) << log )
+ Catch::IResultCapture::emplaceUnscopedMessage( Catch::MessageBuilder( macroName##_catch_sr, CATCH_INTERNAL_LINEINFO, Catch::ResultWas::Info ) << log )
#if defined(CATCH_CONFIG_PREFIX_MESSAGES) && !defined(CATCH_CONFIG_DISABLE)
diff --git a/src/catch2/interfaces/catch_interfaces_capture.hpp b/src/catch2/interfaces/catch_interfaces_capture.hpp
index b4fee6cd..702ccb4d 100644
--- a/src/catch2/interfaces/catch_interfaces_capture.hpp
+++ b/src/catch2/interfaces/catch_interfaces_capture.hpp
@@ -62,10 +62,9 @@ namespace Catch {
virtual void benchmarkEnded( BenchmarkStats<> const& stats ) = 0;
virtual void benchmarkFailed( StringRef error ) = 0;
- virtual void pushScopedMessage( MessageInfo&& message ) = 0;
- virtual void popScopedMessage( unsigned int messageId ) = 0;
-
- virtual void emplaceUnscopedMessage( MessageBuilder&& builder ) = 0;
+ static void pushScopedMessage( MessageInfo&& message );
+ static void popScopedMessage( unsigned int messageId );
+ static void emplaceUnscopedMessage( MessageBuilder&& builder );
virtual void handleFatalErrorCondition( StringRef message ) = 0;
@@ -102,6 +101,7 @@ namespace Catch {
};
IResultCapture& getResultCapture();
+
}
#endif // CATCH_INTERFACES_CAPTURE_HPP_INCLUDED
diff --git a/src/catch2/internal/catch_run_context.cpp b/src/catch2/internal/catch_run_context.cpp
index 3ca15fd0..fc521f8b 100644
--- a/src/catch2/internal/catch_run_context.cpp
+++ b/src/catch2/internal/catch_run_context.cpp
@@ -483,28 +483,6 @@ namespace Catch {
m_reporter->benchmarkFailed( error );
}
- void RunContext::pushScopedMessage( MessageInfo&& message ) {
- Detail::g_messages.push_back( CATCH_MOVE(message) );
- }
-
- void RunContext::popScopedMessage( unsigned int messageId ) {
- // Note: On average, it would probably be better to look for the message
- // backwards. However, we do not expect to have to deal with more
- // messages than low single digits, so the optimization is tiny,
- // and we would have to hand-write the loop to avoid terrible
- // codegen of reverse iterators in debug mode.
- Detail::g_messages.erase(
- std::find_if( Detail::g_messages.begin(),
- Detail::g_messages.end(),
- [=]( MessageInfo const& msg ) {
- return msg.sequence == messageId;
- } ) );
- }
-
- void RunContext::emplaceUnscopedMessage( MessageBuilder&& builder ) {
- Detail::g_messageScopes.emplace_back( CATCH_MOVE(builder) );
- }
-
std::string RunContext::getCurrentTestName() const {
return m_activeTestCase
? m_activeTestCase->getTestCaseInfo().name
@@ -838,6 +816,28 @@ namespace Catch {
CATCH_INTERNAL_ERROR("No result capture instance");
}
+ void IResultCapture::pushScopedMessage( MessageInfo&& message ) {
+ Detail::g_messages.push_back( CATCH_MOVE( message ) );
+ }
+
+ void IResultCapture::popScopedMessage( unsigned int messageId ) {
+ // Note: On average, it would probably be better to look for the message
+ // backwards. However, we do not expect to have to deal with more
+ // messages than low single digits, so the optimization is tiny,
+ // and we would have to hand-write the loop to avoid terrible
+ // codegen of reverse iterators in debug mode.
+ Detail::g_messages.erase( std::find_if( Detail::g_messages.begin(),
+ Detail::g_messages.end(),
+ [=]( MessageInfo const& msg ) {
+ return msg.sequence ==
+ messageId;
+ } ) );
+ }
+
+ void IResultCapture::emplaceUnscopedMessage( MessageBuilder&& builder ) {
+ Detail::g_messageScopes.emplace_back( CATCH_MOVE( builder ) );
+ }
+
void seedRng(IConfig const& config) {
sharedRng().seed(config.rngSeed());
}
diff --git a/src/catch2/internal/catch_run_context.hpp b/src/catch2/internal/catch_run_context.hpp
index 1ff9caf6..dee851e0 100644
--- a/src/catch2/internal/catch_run_context.hpp
+++ b/src/catch2/internal/catch_run_context.hpp
@@ -94,11 +94,6 @@ namespace Catch {
void benchmarkEnded( BenchmarkStats<> const& stats ) override;
void benchmarkFailed( StringRef error ) override;
- void pushScopedMessage( MessageInfo&& message ) override;
- void popScopedMessage( unsigned int messageId ) override;
-
- void emplaceUnscopedMessage( MessageBuilder&& builder ) override;
-
std::string getCurrentTestName() const override;
const AssertionResult* getLastResult() const override;