mirror of
https://github.com/catchorg/Catch2.git
synced 2024-11-26 07:16:10 +01:00
integrated INTERNAL_CHECK_THAT with new AssertionHandler
This commit is contained in:
parent
2832e23aa9
commit
9668410b8e
@ -149,11 +149,11 @@
|
|||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
#define INTERNAL_CHECK_THAT( macroName, matcher, resultDisposition, arg ) \
|
#define INTERNAL_CHECK_THAT( macroName, matcher, resultDisposition, arg ) \
|
||||||
do { \
|
do { \
|
||||||
Catch::ResultBuilder __catchResult( macroName, CATCH_INTERNAL_LINEINFO, #arg ", " #matcher, resultDisposition ); \
|
Catch::AssertionHandler catchAssertionHandler( macroName, CATCH_INTERNAL_LINEINFO, #arg ", " #matcher, resultDisposition ); \
|
||||||
INTERNAL_CATCH_TRY( __catchResult ) { \
|
INTERNAL_CATCH_TRY( catchAssertionHandler ) { \
|
||||||
__catchResult.captureMatch( arg, matcher, #matcher ); \
|
catchAssertionHandler.handle( Catch::makeMatchExpr( arg, matcher, #matcher ) ); \
|
||||||
} INTERNAL_CATCH_CATCH( __catchResult, resultDisposition ) \
|
} INTERNAL_CATCH_CATCH2( catchAssertionHandler ) \
|
||||||
INTERNAL_CATCH_REACT( __catchResult ) \
|
INTERNAL_CATCH_REACT2( catchAssertionHandler ) \
|
||||||
} while( Catch::alwaysFalse() )
|
} 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
|
} // end namespace Catch
|
||||||
|
|
||||||
#endif // TWOBLUECUBES_CATCH_DECOMPOSER_H_INCLUDED
|
#endif // TWOBLUECUBES_CATCH_DECOMPOSER_H_INCLUDED
|
||||||
|
Loading…
Reference in New Issue
Block a user