Use only the ID of a message when removing it from context

This commit is contained in:
Martin Hořeňovský
2025-08-26 12:07:41 +02:00
parent 25319fd304
commit 33adb4c779
5 changed files with 9 additions and 8 deletions

View File

@@ -31,7 +31,7 @@ namespace Catch {
ScopedMessage::~ScopedMessage() { ScopedMessage::~ScopedMessage() {
if ( !m_moved ){ if ( !m_moved ){
getResultCapture().popScopedMessage(m_info); getResultCapture().popScopedMessage(m_info.sequence);
} }
} }
@@ -101,8 +101,8 @@ namespace Catch {
} }
Capturer::~Capturer() { Capturer::~Capturer() {
assert( m_captured == m_messages.size() ); assert( m_captured == m_messages.size() );
for ( size_t i = 0; i < m_captured; ++i ) { for (auto const& message : m_messages) {
m_resultCapture.popScopedMessage( m_messages[i] ); m_resultCapture.popScopedMessage( message.sequence );
} }
} }

View File

@@ -63,7 +63,7 @@ namespace Catch {
virtual void benchmarkFailed( StringRef error ) = 0; virtual void benchmarkFailed( StringRef error ) = 0;
virtual void pushScopedMessage( MessageInfo const& message ) = 0; virtual void pushScopedMessage( MessageInfo const& message ) = 0;
virtual void popScopedMessage( MessageInfo const& message ) = 0; virtual void popScopedMessage( unsigned int messageId ) = 0;
virtual void emplaceUnscopedMessage( MessageBuilder&& builder ) = 0; virtual void emplaceUnscopedMessage( MessageBuilder&& builder ) = 0;

View File

@@ -26,6 +26,7 @@ namespace Catch {
std::string message; std::string message;
SourceLineInfo lineInfo; SourceLineInfo lineInfo;
ResultWas::OfType type; ResultWas::OfType type;
// The "ID" of the message, used to know when to remove it from reporter context.
unsigned int sequence; unsigned int sequence;
DEPRECATED( "Explicitly use the 'sequence' member instead" ) DEPRECATED( "Explicitly use the 'sequence' member instead" )

View File

@@ -487,7 +487,7 @@ namespace Catch {
Detail::g_messages.push_back( message ); Detail::g_messages.push_back( message );
} }
void RunContext::popScopedMessage( MessageInfo const& message ) { void RunContext::popScopedMessage( unsigned int messageId ) {
// Note: On average, it would probably be better to look for the message // 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 // backwards. However, we do not expect to have to deal with more
// messages than low single digits, so the optimization is tiny, // messages than low single digits, so the optimization is tiny,
@@ -496,8 +496,8 @@ namespace Catch {
Detail::g_messages.erase( Detail::g_messages.erase(
std::find_if( Detail::g_messages.begin(), std::find_if( Detail::g_messages.begin(),
Detail::g_messages.end(), Detail::g_messages.end(),
[id = message.sequence]( MessageInfo const& msg ) { [=]( MessageInfo const& msg ) {
return msg.sequence == id; return msg.sequence == messageId;
} ) ); } ) );
} }

View File

@@ -95,7 +95,7 @@ namespace Catch {
void benchmarkFailed( StringRef error ) override; void benchmarkFailed( StringRef error ) override;
void pushScopedMessage( MessageInfo const& message ) override; void pushScopedMessage( MessageInfo const& message ) override;
void popScopedMessage( MessageInfo const& message ) override; void popScopedMessage( unsigned int messageId ) override;
void emplaceUnscopedMessage( MessageBuilder&& builder ) override; void emplaceUnscopedMessage( MessageBuilder&& builder ) override;