diff options
| author | Phil Nash | 2017-08-09 00:44:30 +0100 |
|---|---|---|
| committer | Phil Nash | 2017-08-09 00:44:30 +0100 |
| commit | 27fd8f80bd883df36c243bc355429977fd665c50 (patch) | |
| tree | 4f3cb43a3f40c0c6837a77985fb1508e141db67a /include | |
| parent | ef4fa56b71e7013fe39609abfb25819b618c1177 (diff) | |
| download | catch3-27fd8f80bd883df36c243bc355429977fd665c50.tar.gz | |
Integrated INTERNAL_CATCH_THROWS_STR_MATCHES with new AssertionHandler
Diffstat (limited to 'include')
| -rw-r--r-- | include/internal/catch_assertionhandler.cpp | 10 | ||||
| -rw-r--r-- | include/internal/catch_assertionhandler.h | 6 | ||||
| -rw-r--r-- | include/internal/catch_capture.hpp | 12 | ||||
| -rw-r--r-- | include/internal/catch_decomposer.cpp | 3 | ||||
| -rw-r--r-- | include/internal/catch_decomposer.h | 4 |
5 files changed, 26 insertions, 9 deletions
diff --git a/include/internal/catch_assertionhandler.cpp b/include/internal/catch_assertionhandler.cpp index 8d99e3d0..26f727a9 100644 --- a/include/internal/catch_assertionhandler.cpp +++ b/include/internal/catch_assertionhandler.cpp @@ -13,6 +13,7 @@ #include "catch_context.h" #include "catch_debugger.h" #include "catch_interfaces_registry_hub.h" +#include "catch_matchers_string.h" #include <cassert> @@ -140,5 +141,14 @@ namespace Catch { m_inExceptionGuard = false; } + using StringMatcher = Matchers::Impl::MatcherBase<std::string>; + + void handleExceptionMatchExpr( AssertionHandler& handler, StringMatcher const& matcher, StringRef matcherString ) { + MatchExpr<std::string, StringMatcher const&> expr( Catch::translateActiveException(), matcher, matcherString ); + handler.handle( expr ); + } + void handleExceptionMatchExpr( AssertionHandler& handler, std::string const& str, StringRef matcherString ) { + handleExceptionMatchExpr( handler, Matchers::Equals( str ), matcherString ); + } } // namespace Catch diff --git a/include/internal/catch_assertionhandler.h b/include/internal/catch_assertionhandler.h index dbbd5157..21a09875 100644 --- a/include/internal/catch_assertionhandler.h +++ b/include/internal/catch_assertionhandler.h @@ -10,6 +10,7 @@ #include "catch_decomposer.h" #include "catch_assertioninfo.h" +#include "catch_matchers_string.h" // !TBD: for exception matchers namespace Catch { @@ -67,6 +68,11 @@ namespace Catch { void unsetExceptionGuard(); }; + using StringMatcher = Matchers::Impl::MatcherBase<std::string>; + + void handleExceptionMatchExpr( AssertionHandler& handler, StringMatcher const& matcher, StringRef matcherString ); + void handleExceptionMatchExpr( AssertionHandler& handler, std::string const& str, StringRef matcherString ); + } // namespace Catch #endif // TWOBLUECUBES_CATCH_ASSERTIONHANDLER_H_INCLUDED diff --git a/include/internal/catch_capture.hpp b/include/internal/catch_capture.hpp index ee63e044..6615edf1 100644 --- a/include/internal/catch_capture.hpp +++ b/include/internal/catch_capture.hpp @@ -159,18 +159,18 @@ /////////////////////////////////////////////////////////////////////////////// #define INTERNAL_CATCH_THROWS_STR_MATCHES( macroName, resultDisposition, matcher, ... ) \ do { \ - Catch::ResultBuilder __catchResult( macroName, CATCH_INTERNAL_LINEINFO, #__VA_ARGS__ ", " #matcher, resultDisposition); \ - if( __catchResult.allowThrows() ) \ + Catch::AssertionHandler catchAssertionHandler( macroName, CATCH_INTERNAL_LINEINFO, #__VA_ARGS__ ", " #matcher, resultDisposition ); \ + if( catchAssertionHandler.allowThrows() ) \ try { \ static_cast<void>(__VA_ARGS__); \ - __catchResult.captureResult( Catch::ResultWas::DidntThrowException ); \ + catchAssertionHandler.handle( Catch::ResultWas::DidntThrowException ); \ } \ catch( ... ) { \ - __catchResult.captureExpectedException( matcher ); \ + handleExceptionMatchExpr( catchAssertionHandler, matcher, #matcher ); \ } \ else \ - __catchResult.captureResult( Catch::ResultWas::Ok ); \ - INTERNAL_CATCH_REACT( __catchResult ) \ + catchAssertionHandler.handle( Catch::ResultWas::Ok ); \ + INTERNAL_CATCH_REACT2( catchAssertionHandler ) \ } while( Catch::alwaysFalse() ) diff --git a/include/internal/catch_decomposer.cpp b/include/internal/catch_decomposer.cpp index 6e69bc43..f7da22b5 100644 --- a/include/internal/catch_decomposer.cpp +++ b/include/internal/catch_decomposer.cpp @@ -12,7 +12,6 @@ namespace Catch { void formatReconstructedExpression( std::ostream &os, std::string const& lhs, std::string const& op, std::string const& rhs ) { - if( lhs.size() + rhs.size() < 40 && lhs.find('\n') == std::string::npos && rhs.find('\n') == std::string::npos ) @@ -20,4 +19,4 @@ namespace Catch { else os << lhs << "\n" << op << "\n" << rhs; } -}
\ No newline at end of file +} diff --git a/include/internal/catch_decomposer.h b/include/internal/catch_decomposer.h index f289387a..3182b84a 100644 --- a/include/internal/catch_decomposer.h +++ b/include/internal/catch_decomposer.h @@ -10,6 +10,7 @@ #include "catch_tostring.h" #include "catch_stringref.h" +#include "catch_matchers.hpp" // !TBD: for exception matchers - move this #include <ostream> @@ -148,7 +149,7 @@ namespace Catch { template<typename ArgT, typename MatcherT> class MatchExpr : public ITransientExpression { ArgT const& m_arg; - MatcherT const& m_matcher; + MatcherT m_matcher; StringRef m_matcherString; bool m_result; public: @@ -171,6 +172,7 @@ namespace Catch { 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 ); |