diff --git a/Test/MessageTests.cpp b/Test/MessageTests.cpp index a75fc5bb..372a5489 100644 --- a/Test/MessageTests.cpp +++ b/Test/MessageTests.cpp @@ -14,11 +14,30 @@ TEST_CASE( "succeeding/message", "INFO and WARN do not abort tests" ) { - INFO( "this is a " << "message" ); // This should output the message but continue - WARN( "this is a " << "warning" ); // This should output the message but continue + INFO( "this is a " << "message" ); // This should output the message if a failure occurs + WARN( "this is a " << "warning" ); // This should always output the message but then continue } -TEST_CASE( "failing/message", "FAIL aborts the test" ) +TEST_CASE( "failing/message/info/1", "INFO gets logged on failure" ) +{ + INFO( "this message should be logged" ); + int a = 2; + REQUIRE( a == 1 ); +} + +TEST_CASE( "failing/message/info/2", "INFO gets logged on failure" ) +{ + INFO( "this message should not be logged" ); + int a = 2; + REQUIRE( a == 2 ); + + INFO( "this message should be logged" ); + INFO( "so should this" ); + + REQUIRE( a == 1 ); +} + +TEST_CASE( "failing/message/fail", "FAIL aborts the test" ) { FAIL( "This is a " << "failure" ); // This should output the message and abort } \ No newline at end of file diff --git a/catch_reporter_basic.hpp b/catch_reporter_basic.hpp index 0d209e0a..5331e6b7 100644 --- a/catch_reporter_basic.hpp +++ b/catch_reporter_basic.hpp @@ -110,7 +110,7 @@ namespace Catch /////////////////////////////////////////////////////////////////////////// virtual void Result( const ResultInfo& resultInfo ) { - if( !m_config.includeSuccessfulResults() && resultInfo.ok() ) + if( !m_config.includeSuccessfulResults() && resultInfo.getResultType() == ResultWas::Ok ) return; if( !resultInfo.getFilename().empty() ) diff --git a/catch_reporter_junit.hpp b/catch_reporter_junit.hpp index 68c08e8a..09fb47c9 100644 --- a/catch_reporter_junit.hpp +++ b/catch_reporter_junit.hpp @@ -114,7 +114,7 @@ namespace Catch /////////////////////////////////////////////////////////////////////////// virtual void Result( const Catch::ResultInfo& resultInfo ) { - if( !resultInfo.ok() || m_config.includeSuccessfulResults() ) + if( resultInfo.getResultType() != ResultWas::Ok || m_config.includeSuccessfulResults() ) { TestCaseStats& testCaseStats = m_currentStats->testCaseStats.back(); TestStats stats; diff --git a/catch_reporter_xml.hpp b/catch_reporter_xml.hpp index 67907a0b..e641c21f 100644 --- a/catch_reporter_xml.hpp +++ b/catch_reporter_xml.hpp @@ -93,7 +93,7 @@ namespace Catch /////////////////////////////////////////////////////////////////////////// virtual void Result( const Catch::ResultInfo& resultInfo ) { - if( !m_config.includeSuccessfulResults() && resultInfo.ok() ) + if( !m_config.includeSuccessfulResults() && resultInfo.getResultType() == ResultWas::Ok ) return; if( resultInfo.hasExpression() ) diff --git a/internal/catch_runner_impl.hpp b/internal/catch_runner_impl.hpp index 747299ab..e3675367 100644 --- a/internal/catch_runner_impl.hpp +++ b/internal/catch_runner_impl.hpp @@ -164,7 +164,22 @@ namespace Catch else if( !result.ok() ) m_failures++; - m_reporter->Result( result ); + if( !result.ok() ) + { + std::vector::const_iterator it = m_info.begin(); + std::vector::const_iterator itEnd = m_info.end(); + for(; it != itEnd; ++it ) + m_reporter->Result( *it ); + } + if( result.getResultType() == ResultWas::Info ) + { + m_info.push_back( result ); + } + else + { + m_info.clear(); + m_reporter->Result( result ); + } } virtual bool sectionStarted( const std::string& name, const std::string& description, std::size_t& successes, std::size_t& failures ) @@ -202,6 +217,7 @@ namespace Catch std::size_t m_failures; ITestReporter* m_reporter; std::vector m_scopedInfos; + std::vector m_info; }; }