diff --git a/include/internal/catch_run_context.cpp b/include/internal/catch_run_context.cpp index 6748d3e0..98cc655a 100644 --- a/include/internal/catch_run_context.cpp +++ b/include/internal/catch_run_context.cpp @@ -8,8 +8,6 @@ #include #include -static auto const& defaultExpression = "{Unknown expression after the reported line}"; - namespace Catch { StreamRedirect::StreamRedirect(std::ostream& stream, std::string& targetString) @@ -129,9 +127,13 @@ namespace Catch { static_cast(m_reporter->assertionEnded(AssertionStats(result, m_messages, m_totals))); // Reset working state - m_lastAssertionInfo = { "", m_lastAssertionInfo.lineInfo, "{Unknown expression after the reported line}", m_lastAssertionInfo.resultDisposition }; + resetAssertionInfo(); m_lastResult = result; } + void RunContext::resetAssertionInfo() { + m_lastAssertionInfo.macroName = StringRef(); + m_lastAssertionInfo.capturedExpression = "{Unknown expression after the reported line}"; + } bool RunContext::sectionStarted(SectionInfo const & sectionInfo, Counts & assertions) { ITracker& sectionTracker = SectionTracker::acquire(m_trackerContext, TestCaseTracking::NameAndLocation(sectionInfo.name, sectionInfo.lineInfo)); @@ -255,8 +257,7 @@ namespace Catch { void RunContext::assertionPassed() { ++m_totals.assertions.passed; - m_lastAssertionInfo.capturedExpression = StringRef(defaultExpression, sizeof(defaultExpression) - 1); - m_lastAssertionInfo.macroName = StringRef("", 0); + resetAssertionInfo(); } void RunContext::assertionRun() { @@ -274,18 +275,19 @@ namespace Catch { Counts prevAssertions = m_totals.assertions; double duration = 0; m_shouldReportUnexpected = true; + m_lastAssertionInfo = { "TEST_CASE", testCaseInfo.lineInfo, "", ResultDisposition::Normal }; + + seedRng(*m_config); + + Timer timer; try { - m_lastAssertionInfo = { "TEST_CASE", testCaseInfo.lineInfo, "", ResultDisposition::Normal }; - - seedRng(*m_config); - - Timer timer; - timer.start(); if (m_reporter->getPreferences().shouldRedirectStdOut) { StreamRedirect coutRedir(cout(), redirectedCout); StdErrRedirect errRedir(redirectedCerr); + timer.start(); invokeActiveTestCase(); } else { + timer.start(); invokeActiveTestCase(); } duration = timer.getElapsedSeconds(); diff --git a/include/internal/catch_run_context.h b/include/internal/catch_run_context.h index 0d10a19b..22c4d76a 100644 --- a/include/internal/catch_run_context.h +++ b/include/internal/catch_run_context.h @@ -116,6 +116,8 @@ namespace Catch { void runCurrentTest(std::string& redirectedCout, std::string& redirectedCerr); void invokeActiveTestCase(); + void resetAssertionInfo(); + private: void handleUnfinishedSections();