mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-10-31 20:27:11 +01:00 
			
		
		
		
	integrated INTERNAL_CHECK_THAT with new AssertionHandler
This commit is contained in:
		| @@ -149,11 +149,11 @@ | ||||
| /////////////////////////////////////////////////////////////////////////////// | ||||
| #define INTERNAL_CHECK_THAT( macroName, matcher, resultDisposition, arg ) \ | ||||
|     do { \ | ||||
|         Catch::ResultBuilder __catchResult( macroName, CATCH_INTERNAL_LINEINFO, #arg ", " #matcher, resultDisposition ); \ | ||||
|         INTERNAL_CATCH_TRY( __catchResult ) { \ | ||||
|             __catchResult.captureMatch( arg, matcher, #matcher ); \ | ||||
|         } INTERNAL_CATCH_CATCH( __catchResult, resultDisposition ) \ | ||||
|         INTERNAL_CATCH_REACT( __catchResult ) \ | ||||
|         Catch::AssertionHandler catchAssertionHandler( macroName, CATCH_INTERNAL_LINEINFO, #arg ", " #matcher, resultDisposition ); \ | ||||
|         INTERNAL_CATCH_TRY( catchAssertionHandler ) { \ | ||||
|             catchAssertionHandler.handle( Catch::makeMatchExpr( arg, matcher, #matcher ) ); \ | ||||
|         } INTERNAL_CATCH_CATCH2( catchAssertionHandler ) \ | ||||
|         INTERNAL_CATCH_REACT2( catchAssertionHandler ) \ | ||||
|     } while( Catch::alwaysFalse() ) | ||||
|  | ||||
| /////////////////////////////////////////////////////////////////////////////// | ||||
|   | ||||
| @@ -144,6 +144,38 @@ namespace Catch { | ||||
|         } | ||||
|     }; | ||||
|  | ||||
|     // !TBD: this is just here temporarily | ||||
|     template<typename ArgT, typename MatcherT> | ||||
|     class MatchExpr : public ITransientExpression { | ||||
|         ArgT const& m_arg; | ||||
|         MatcherT const& m_matcher; | ||||
|         StringRef m_matcherString; | ||||
|         bool m_result; | ||||
|     public: | ||||
|         MatchExpr( ArgT const& arg, MatcherT const& matcher, StringRef matcherString ) | ||||
|         :   m_arg( arg ), | ||||
|             m_matcher( matcher ), | ||||
|             m_matcherString( matcherString ), | ||||
|             m_result( matcher.match( arg ) ) | ||||
|         {} | ||||
|  | ||||
|         auto isBinaryExpression() const -> bool  override { return true; } | ||||
|         auto getResult() const -> bool override { return m_result; } | ||||
|  | ||||
|         void streamReconstructedExpression( std::ostream &os ) const override { | ||||
|             auto matcherAsString = m_matcher.toString(); | ||||
|             os << Catch::Detail::stringify( m_arg ) << ' '; | ||||
|             if( matcherAsString == Detail::unprintableString ) | ||||
|                 os << m_matcherString.c_str(); | ||||
|             else | ||||
|                 os << matcherAsString; | ||||
|         } | ||||
|     }; | ||||
|     template<typename ArgT, typename MatcherT> | ||||
|     auto makeMatchExpr( ArgT const& arg, MatcherT const& matcher, StringRef matcherString  ) -> MatchExpr<ArgT, MatcherT> { | ||||
|         return MatchExpr<ArgT, MatcherT>( arg, matcher, matcherString ); | ||||
|     } | ||||
|  | ||||
| } // end namespace Catch | ||||
|  | ||||
| #endif // TWOBLUECUBES_CATCH_DECOMPOSER_H_INCLUDED | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Phil Nash
					Phil Nash