From ef990f1f5918a26520c9e868b8f3d4b09bcf03cb Mon Sep 17 00:00:00 2001 From: dvirtz Date: Fri, 31 Mar 2017 01:06:35 +0300 Subject: [PATCH] print messages when unexpected exceptions are thrown --- include/internal/catch_message.hpp | 5 ++++- include/reporters/catch_reporter_console.hpp | 6 +++++- projects/SelfTest/ExceptionTests.cpp | 15 +++++++++++++++ 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/include/internal/catch_message.hpp b/include/internal/catch_message.hpp index 42866be8ab..1b72afec7e 100644 --- a/include/internal/catch_message.hpp +++ b/include/internal/catch_message.hpp @@ -38,7 +38,10 @@ namespace Catch { {} ScopedMessage::~ScopedMessage() { - getResultCapture().popScopedMessage( m_info ); + if (!std::uncaught_exception()) + { + getResultCapture().popScopedMessage(m_info); + } } diff --git a/include/reporters/catch_reporter_console.hpp b/include/reporters/catch_reporter_console.hpp index fed97072a8..5f181241c4 100644 --- a/include/reporters/catch_reporter_console.hpp +++ b/include/reporters/catch_reporter_console.hpp @@ -138,7 +138,11 @@ namespace Catch { case ResultWas::ThrewException: colour = Colour::Error; passOrFail = "FAILED"; - messageLabel = "due to unexpected exception with message"; + messageLabel = "due to unexpected exception with "; + if (_stats.infoMessages.size() == 1) + messageLabel += "message"; + if (_stats.infoMessages.size() > 1) + messageLabel += "messages"; break; case ResultWas::FatalErrorCondition: colour = Colour::Error; diff --git a/projects/SelfTest/ExceptionTests.cpp b/projects/SelfTest/ExceptionTests.cpp index 69eba2a0ad..0f363da4ea 100644 --- a/projects/SelfTest/ExceptionTests.cpp +++ b/projects/SelfTest/ExceptionTests.cpp @@ -209,3 +209,18 @@ TEST_CASE( "Mismatching exception messages failing the test", "[.][failing][!thr REQUIRE_THROWS_WITH( thisThrows(), "should fail" ); REQUIRE_THROWS_WITH( thisThrows(), "expected exception" ); } + +TEST_CASE( "#748 - captures with unexpected exceptions", "[!shouldfail]" ) { + int answer = 42; + CAPTURE(answer); + // the message should be printed on the first two sections but not on the third + SECTION( "outside assertions" ) { + thisThrows(); + } + SECTION( "inside REQUIRE_NOTHROW" ) { + REQUIRE_NOTHROW(thisThrows()); + } + SECTION( "inside REQUIRE_THROWS" ) { + REQUIRE_THROWS(thisThrows()); + } +} \ No newline at end of file