Read-only mirrors. Development, issues and pull requests are on GitHub.

summaryrefslogtreecommitdiffhomepage
path: root/include
diff options
context:
space:
mode:
authorPhil Nash2017-08-09 00:44:30 +0100
committerPhil Nash2017-08-09 00:44:30 +0100
commit27fd8f80bd883df36c243bc355429977fd665c50 (patch)
tree4f3cb43a3f40c0c6837a77985fb1508e141db67a /include
parentef4fa56b71e7013fe39609abfb25819b618c1177 (diff)
downloadcatch3-27fd8f80bd883df36c243bc355429977fd665c50.tar.gz
Integrated INTERNAL_CATCH_THROWS_STR_MATCHES with new AssertionHandler
Diffstat (limited to 'include')
-rw-r--r--include/internal/catch_assertionhandler.cpp10
-rw-r--r--include/internal/catch_assertionhandler.h6
-rw-r--r--include/internal/catch_capture.hpp12
-rw-r--r--include/internal/catch_decomposer.cpp3
-rw-r--r--include/internal/catch_decomposer.h4
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 );