| |
| |
| |
| |
| |
| |
| |
| #ifndef TWOBLUECUBES_CATCH_ASSERTIONHANDLER_H_INCLUDED |
| #define TWOBLUECUBES_CATCH_ASSERTIONHANDLER_H_INCLUDED |
|
|
| #include "catch_assertioninfo.h" |
| #include "catch_decomposer.h" |
| #include "catch_interfaces_capture.h" |
|
|
| namespace Catch { |
|
|
| struct TestFailureException{}; |
| struct AssertionResultData; |
| struct IResultCapture; |
| class RunContext; |
|
|
| class LazyExpression { |
| friend class AssertionHandler; |
| friend struct AssertionStats; |
| friend class RunContext; |
|
|
| ITransientExpression const* m_transientExpression = nullptr; |
| bool m_isNegated; |
| public: |
| LazyExpression( bool isNegated ); |
| LazyExpression( LazyExpression const& other ); |
| LazyExpression& operator = ( LazyExpression const& ) = delete; |
|
|
| explicit operator bool() const; |
|
|
| friend auto operator << ( std::ostream& os, LazyExpression const& lazyExpr ) -> std::ostream&; |
| }; |
|
|
| struct AssertionReaction { |
| bool shouldDebugBreak = false; |
| bool shouldThrow = false; |
| }; |
|
|
| class AssertionHandler { |
| AssertionInfo m_assertionInfo; |
| AssertionReaction m_reaction; |
| bool m_completed = false; |
| IResultCapture& m_resultCapture; |
|
|
| public: |
| AssertionHandler |
| ( StringRef const& macroName, |
| SourceLineInfo const& lineInfo, |
| StringRef capturedExpression, |
| ResultDisposition::Flags resultDisposition ); |
| ~AssertionHandler() { |
| if ( !m_completed ) { |
| m_resultCapture.handleIncomplete( m_assertionInfo ); |
| } |
| } |
|
|
|
|
| template<typename T> |
| void handleExpr( ExprLhs<T> const& expr ) { |
| handleExpr( expr.makeUnaryExpr() ); |
| } |
| void handleExpr( ITransientExpression const& expr ); |
|
|
| void handleMessage(ResultWas::OfType resultType, StringRef const& message); |
|
|
| void handleExceptionThrownAsExpected(); |
| void handleUnexpectedExceptionNotThrown(); |
| void handleExceptionNotThrownAsExpected(); |
| void handleThrowingCallSkipped(); |
| void handleUnexpectedInflightException(); |
|
|
| void complete(); |
| void setCompleted(); |
|
|
| |
| auto allowThrows() const -> bool; |
| }; |
|
|
| void handleExceptionMatchExpr( AssertionHandler& handler, std::string const& str, StringRef const& matcherString ); |
|
|
| } |
|
|
| #endif |
|
|