mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-10-31 12:17:11 +01:00 
			
		
		
		
	Fixed up CATCH_CONFIG_FAST_COMPILE for REQUIREs
Unexpected exceptions no longer cause abort and there should be no more potential for false negatives. The trade-off now is that exceptions are no longer translated.
This commit is contained in:
		| @@ -38,6 +38,8 @@ namespace Catch { | ||||
|         virtual std::string getCurrentTestName() const = 0; | ||||
|         virtual const AssertionResult* getLastResult() const = 0; | ||||
|  | ||||
|         virtual void exceptionEarlyReported() = 0; | ||||
|  | ||||
|         virtual void handleFatalErrorCondition( std::string const& message ) = 0; | ||||
|     }; | ||||
|  | ||||
|   | ||||
| @@ -37,7 +37,9 @@ namespace Catch { | ||||
|     ResultBuilder::~ResultBuilder() { | ||||
| #if defined(CATCH_CONFIG_FAST_COMPILE) | ||||
|         if ( m_guardException ) { | ||||
|             useActiveException( m_assertionInfo.resultDisposition ); | ||||
|             m_stream.oss << "Exception translation was disabled by CATCH_CONFIG_FAST_COMPILE"; | ||||
|             captureResult( ResultWas::ThrewException ); | ||||
|             getCurrentContext().getResultCapture()->exceptionEarlyReported(); | ||||
|         } | ||||
| #endif | ||||
|     } | ||||
|   | ||||
| @@ -64,7 +64,8 @@ namespace Catch { | ||||
|             m_context( getCurrentMutableContext() ), | ||||
|             m_activeTestCase( CATCH_NULL ), | ||||
|             m_config( _config ), | ||||
|             m_reporter( reporter ) | ||||
|             m_reporter( reporter ), | ||||
|             m_shouldReportUnexpected ( true ) | ||||
|         { | ||||
|             m_context.setRunner( this ); | ||||
|             m_context.setConfig( m_config ); | ||||
| @@ -223,6 +224,10 @@ namespace Catch { | ||||
|             return &m_lastResult; | ||||
|         } | ||||
|  | ||||
|         virtual void exceptionEarlyReported() { | ||||
|             m_shouldReportUnexpected = false; | ||||
|         } | ||||
|  | ||||
|         virtual void handleFatalErrorCondition( std::string const& message ) { | ||||
|             // Don't rebuild the result -- the stringification itself can cause more fatal errors | ||||
|             // Instead, fake a result data. | ||||
| @@ -293,7 +298,13 @@ namespace Catch { | ||||
|                 // This just means the test was aborted due to failure | ||||
|             } | ||||
|             catch(...) { | ||||
|                 makeUnexpectedResultBuilder().useActiveException(); | ||||
|                 // Under CATCH_CONFIG_FAST_COMPILE, unexpected exceptions under REQUIRE assertions  | ||||
|                 // are reported without translation at the point of origin. | ||||
| #ifdef CATCH_CONFIG_FAST_COMPILE | ||||
|                 if (m_shouldReportUnexpected) { | ||||
|                     makeUnexpectedResultBuilder().useActiveException(); | ||||
|                 } | ||||
| #endif | ||||
|             } | ||||
|             m_testCaseTracker->close(); | ||||
|             handleUnfinishedSections(); | ||||
| @@ -353,6 +364,7 @@ namespace Catch { | ||||
|         std::vector<SectionEndInfo> m_unfinishedSections; | ||||
|         std::vector<ITracker*> m_activeSections; | ||||
|         TrackerContext m_trackerContext; | ||||
|         bool m_shouldReportUnexpected; | ||||
|     }; | ||||
|  | ||||
|     IResultCapture& getResultCapture() { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Martin Hořeňovský
					Martin Hořeňovský