mirror of https://github.com/catchorg/Catch2.git
Integrated INTERNAL_CATCH_THROWS_STR_MATCHES with new AssertionHandler
This commit is contained in:
parent
ef4fa56b71
commit
27fd8f80bd
|
@ -13,6 +13,7 @@
|
||||||
#include "catch_context.h"
|
#include "catch_context.h"
|
||||||
#include "catch_debugger.h"
|
#include "catch_debugger.h"
|
||||||
#include "catch_interfaces_registry_hub.h"
|
#include "catch_interfaces_registry_hub.h"
|
||||||
|
#include "catch_matchers_string.h"
|
||||||
|
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
|
||||||
|
@ -140,5 +141,14 @@ namespace Catch {
|
||||||
m_inExceptionGuard = false;
|
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
|
} // namespace Catch
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
|
|
||||||
#include "catch_decomposer.h"
|
#include "catch_decomposer.h"
|
||||||
#include "catch_assertioninfo.h"
|
#include "catch_assertioninfo.h"
|
||||||
|
#include "catch_matchers_string.h" // !TBD: for exception matchers
|
||||||
|
|
||||||
namespace Catch {
|
namespace Catch {
|
||||||
|
|
||||||
|
@ -67,6 +68,11 @@ namespace Catch {
|
||||||
void unsetExceptionGuard();
|
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
|
} // namespace Catch
|
||||||
|
|
||||||
#endif // TWOBLUECUBES_CATCH_ASSERTIONHANDLER_H_INCLUDED
|
#endif // TWOBLUECUBES_CATCH_ASSERTIONHANDLER_H_INCLUDED
|
||||||
|
|
|
@ -159,18 +159,18 @@
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
#define INTERNAL_CATCH_THROWS_STR_MATCHES( macroName, resultDisposition, matcher, ... ) \
|
#define INTERNAL_CATCH_THROWS_STR_MATCHES( macroName, resultDisposition, matcher, ... ) \
|
||||||
do { \
|
do { \
|
||||||
Catch::ResultBuilder __catchResult( macroName, CATCH_INTERNAL_LINEINFO, #__VA_ARGS__ ", " #matcher, resultDisposition); \
|
Catch::AssertionHandler catchAssertionHandler( macroName, CATCH_INTERNAL_LINEINFO, #__VA_ARGS__ ", " #matcher, resultDisposition ); \
|
||||||
if( __catchResult.allowThrows() ) \
|
if( catchAssertionHandler.allowThrows() ) \
|
||||||
try { \
|
try { \
|
||||||
static_cast<void>(__VA_ARGS__); \
|
static_cast<void>(__VA_ARGS__); \
|
||||||
__catchResult.captureResult( Catch::ResultWas::DidntThrowException ); \
|
catchAssertionHandler.handle( Catch::ResultWas::DidntThrowException ); \
|
||||||
} \
|
} \
|
||||||
catch( ... ) { \
|
catch( ... ) { \
|
||||||
__catchResult.captureExpectedException( matcher ); \
|
handleExceptionMatchExpr( catchAssertionHandler, matcher, #matcher ); \
|
||||||
} \
|
} \
|
||||||
else \
|
else \
|
||||||
__catchResult.captureResult( Catch::ResultWas::Ok ); \
|
catchAssertionHandler.handle( Catch::ResultWas::Ok ); \
|
||||||
INTERNAL_CATCH_REACT( __catchResult ) \
|
INTERNAL_CATCH_REACT2( catchAssertionHandler ) \
|
||||||
} while( Catch::alwaysFalse() )
|
} while( Catch::alwaysFalse() )
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,6 @@
|
||||||
namespace Catch {
|
namespace Catch {
|
||||||
|
|
||||||
void formatReconstructedExpression( std::ostream &os, std::string const& lhs, std::string const& op, std::string const& rhs ) {
|
void formatReconstructedExpression( std::ostream &os, std::string const& lhs, std::string const& op, std::string const& rhs ) {
|
||||||
|
|
||||||
if( lhs.size() + rhs.size() < 40 &&
|
if( lhs.size() + rhs.size() < 40 &&
|
||||||
lhs.find('\n') == std::string::npos &&
|
lhs.find('\n') == std::string::npos &&
|
||||||
rhs.find('\n') == std::string::npos )
|
rhs.find('\n') == std::string::npos )
|
||||||
|
@ -20,4 +19,4 @@ namespace Catch {
|
||||||
else
|
else
|
||||||
os << lhs << "\n" << op << "\n" << rhs;
|
os << lhs << "\n" << op << "\n" << rhs;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
|
|
||||||
#include "catch_tostring.h"
|
#include "catch_tostring.h"
|
||||||
#include "catch_stringref.h"
|
#include "catch_stringref.h"
|
||||||
|
#include "catch_matchers.hpp" // !TBD: for exception matchers - move this
|
||||||
|
|
||||||
#include <ostream>
|
#include <ostream>
|
||||||
|
|
||||||
|
@ -148,7 +149,7 @@ namespace Catch {
|
||||||
template<typename ArgT, typename MatcherT>
|
template<typename ArgT, typename MatcherT>
|
||||||
class MatchExpr : public ITransientExpression {
|
class MatchExpr : public ITransientExpression {
|
||||||
ArgT const& m_arg;
|
ArgT const& m_arg;
|
||||||
MatcherT const& m_matcher;
|
MatcherT m_matcher;
|
||||||
StringRef m_matcherString;
|
StringRef m_matcherString;
|
||||||
bool m_result;
|
bool m_result;
|
||||||
public:
|
public:
|
||||||
|
@ -171,6 +172,7 @@ namespace Catch {
|
||||||
os << matcherAsString;
|
os << matcherAsString;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename ArgT, typename MatcherT>
|
template<typename ArgT, typename MatcherT>
|
||||||
auto makeMatchExpr( ArgT const& arg, MatcherT const& matcher, StringRef matcherString ) -> MatchExpr<ArgT, MatcherT> {
|
auto makeMatchExpr( ArgT const& arg, MatcherT const& matcher, StringRef matcherString ) -> MatchExpr<ArgT, MatcherT> {
|
||||||
return MatchExpr<ArgT, MatcherT>( arg, matcher, matcherString );
|
return MatchExpr<ArgT, MatcherT>( arg, matcher, matcherString );
|
||||||
|
|
|
@ -485,7 +485,7 @@ ExceptionTests.cpp:<line number>
|
||||||
ExceptionTests.cpp:<line number>: FAILED:
|
ExceptionTests.cpp:<line number>: FAILED:
|
||||||
REQUIRE_THROWS_WITH( thisThrows(), "should fail" )
|
REQUIRE_THROWS_WITH( thisThrows(), "should fail" )
|
||||||
with expansion:
|
with expansion:
|
||||||
expected exception
|
"expected exception" equals: "should fail"
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Nice descriptive name
|
Nice descriptive name
|
||||||
|
|
|
@ -1428,6 +1428,8 @@ ExceptionTests.cpp:<line number>
|
||||||
ExceptionTests.cpp:<line number>:
|
ExceptionTests.cpp:<line number>:
|
||||||
PASSED:
|
PASSED:
|
||||||
REQUIRE_THROWS_WITH( thisThrows(), "expected exception" )
|
REQUIRE_THROWS_WITH( thisThrows(), "expected exception" )
|
||||||
|
with expansion:
|
||||||
|
"expected exception" equals: "expected exception"
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Exception messages can be tested for
|
Exception messages can be tested for
|
||||||
|
@ -1439,6 +1441,8 @@ ExceptionTests.cpp:<line number>
|
||||||
ExceptionTests.cpp:<line number>:
|
ExceptionTests.cpp:<line number>:
|
||||||
PASSED:
|
PASSED:
|
||||||
REQUIRE_THROWS_WITH( thisThrows(), Equals( "expecteD Exception", Catch::CaseSensitive::No ) )
|
REQUIRE_THROWS_WITH( thisThrows(), Equals( "expecteD Exception", Catch::CaseSensitive::No ) )
|
||||||
|
with expansion:
|
||||||
|
"expected exception" equals: "expected exception" (case insensitive)
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Exception messages can be tested for
|
Exception messages can be tested for
|
||||||
|
@ -1450,18 +1454,26 @@ ExceptionTests.cpp:<line number>
|
||||||
ExceptionTests.cpp:<line number>:
|
ExceptionTests.cpp:<line number>:
|
||||||
PASSED:
|
PASSED:
|
||||||
REQUIRE_THROWS_WITH( thisThrows(), StartsWith( "expected" ) )
|
REQUIRE_THROWS_WITH( thisThrows(), StartsWith( "expected" ) )
|
||||||
|
with expansion:
|
||||||
|
"expected exception" starts with: "expected"
|
||||||
|
|
||||||
ExceptionTests.cpp:<line number>:
|
ExceptionTests.cpp:<line number>:
|
||||||
PASSED:
|
PASSED:
|
||||||
REQUIRE_THROWS_WITH( thisThrows(), EndsWith( "exception" ) )
|
REQUIRE_THROWS_WITH( thisThrows(), EndsWith( "exception" ) )
|
||||||
|
with expansion:
|
||||||
|
"expected exception" ends with: "exception"
|
||||||
|
|
||||||
ExceptionTests.cpp:<line number>:
|
ExceptionTests.cpp:<line number>:
|
||||||
PASSED:
|
PASSED:
|
||||||
REQUIRE_THROWS_WITH( thisThrows(), Contains( "except" ) )
|
REQUIRE_THROWS_WITH( thisThrows(), Contains( "except" ) )
|
||||||
|
with expansion:
|
||||||
|
"expected exception" contains: "except"
|
||||||
|
|
||||||
ExceptionTests.cpp:<line number>:
|
ExceptionTests.cpp:<line number>:
|
||||||
PASSED:
|
PASSED:
|
||||||
REQUIRE_THROWS_WITH( thisThrows(), Contains( "exCept", Catch::CaseSensitive::No ) )
|
REQUIRE_THROWS_WITH( thisThrows(), Contains( "exCept", Catch::CaseSensitive::No ) )
|
||||||
|
with expansion:
|
||||||
|
"expected exception" contains: "except" (case insensitive)
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Expected exceptions that don't throw or unexpected exceptions fail the test
|
Expected exceptions that don't throw or unexpected exceptions fail the test
|
||||||
|
@ -1882,11 +1894,13 @@ ExceptionTests.cpp:<line number>
|
||||||
ExceptionTests.cpp:<line number>:
|
ExceptionTests.cpp:<line number>:
|
||||||
PASSED:
|
PASSED:
|
||||||
REQUIRE_THROWS_WITH( thisThrows(), "expected exception" )
|
REQUIRE_THROWS_WITH( thisThrows(), "expected exception" )
|
||||||
|
with expansion:
|
||||||
|
"expected exception" equals: "expected exception"
|
||||||
|
|
||||||
ExceptionTests.cpp:<line number>: FAILED:
|
ExceptionTests.cpp:<line number>: FAILED:
|
||||||
REQUIRE_THROWS_WITH( thisThrows(), "should fail" )
|
REQUIRE_THROWS_WITH( thisThrows(), "should fail" )
|
||||||
with expansion:
|
with expansion:
|
||||||
expected exception
|
"expected exception" equals: "should fail"
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Nice descriptive name
|
Nice descriptive name
|
||||||
|
|
|
@ -311,7 +311,7 @@ MatchersTests.cpp:<line number>
|
||||||
</failure>
|
</failure>
|
||||||
</testcase>
|
</testcase>
|
||||||
<testcase classname="<exe-name>.global" name="Mismatching exception messages failing the test" time="{duration}">
|
<testcase classname="<exe-name>.global" name="Mismatching exception messages failing the test" time="{duration}">
|
||||||
<failure message="expected exception" type="REQUIRE_THROWS_WITH">
|
<failure message=""expected exception" equals: "should fail"" type="REQUIRE_THROWS_WITH">
|
||||||
ExceptionTests.cpp:<line number>
|
ExceptionTests.cpp:<line number>
|
||||||
</failure>
|
</failure>
|
||||||
</testcase>
|
</testcase>
|
||||||
|
|
|
@ -1646,7 +1646,7 @@
|
||||||
thisThrows(), "expected exception"
|
thisThrows(), "expected exception"
|
||||||
</Original>
|
</Original>
|
||||||
<Expanded>
|
<Expanded>
|
||||||
thisThrows(), "expected exception"
|
"expected exception" equals: "expected exception"
|
||||||
</Expanded>
|
</Expanded>
|
||||||
</Expression>
|
</Expression>
|
||||||
<OverallResults successes="1" failures="0" expectedFailures="0"/>
|
<OverallResults successes="1" failures="0" expectedFailures="0"/>
|
||||||
|
@ -1657,7 +1657,7 @@
|
||||||
thisThrows(), Equals( "expecteD Exception", Catch::CaseSensitive::No )
|
thisThrows(), Equals( "expecteD Exception", Catch::CaseSensitive::No )
|
||||||
</Original>
|
</Original>
|
||||||
<Expanded>
|
<Expanded>
|
||||||
thisThrows(), Equals( "expecteD Exception", Catch::CaseSensitive::No )
|
"expected exception" equals: "expected exception" (case insensitive)
|
||||||
</Expanded>
|
</Expanded>
|
||||||
</Expression>
|
</Expression>
|
||||||
<OverallResults successes="1" failures="0" expectedFailures="0"/>
|
<OverallResults successes="1" failures="0" expectedFailures="0"/>
|
||||||
|
@ -1668,7 +1668,7 @@
|
||||||
thisThrows(), StartsWith( "expected" )
|
thisThrows(), StartsWith( "expected" )
|
||||||
</Original>
|
</Original>
|
||||||
<Expanded>
|
<Expanded>
|
||||||
thisThrows(), StartsWith( "expected" )
|
"expected exception" starts with: "expected"
|
||||||
</Expanded>
|
</Expanded>
|
||||||
</Expression>
|
</Expression>
|
||||||
<Expression success="true" type="REQUIRE_THROWS_WITH" filename="projects/<exe-name>/ExceptionTests.cpp" >
|
<Expression success="true" type="REQUIRE_THROWS_WITH" filename="projects/<exe-name>/ExceptionTests.cpp" >
|
||||||
|
@ -1676,7 +1676,7 @@
|
||||||
thisThrows(), EndsWith( "exception" )
|
thisThrows(), EndsWith( "exception" )
|
||||||
</Original>
|
</Original>
|
||||||
<Expanded>
|
<Expanded>
|
||||||
thisThrows(), EndsWith( "exception" )
|
"expected exception" ends with: "exception"
|
||||||
</Expanded>
|
</Expanded>
|
||||||
</Expression>
|
</Expression>
|
||||||
<Expression success="true" type="REQUIRE_THROWS_WITH" filename="projects/<exe-name>/ExceptionTests.cpp" >
|
<Expression success="true" type="REQUIRE_THROWS_WITH" filename="projects/<exe-name>/ExceptionTests.cpp" >
|
||||||
|
@ -1684,7 +1684,7 @@
|
||||||
thisThrows(), Contains( "except" )
|
thisThrows(), Contains( "except" )
|
||||||
</Original>
|
</Original>
|
||||||
<Expanded>
|
<Expanded>
|
||||||
thisThrows(), Contains( "except" )
|
"expected exception" contains: "except"
|
||||||
</Expanded>
|
</Expanded>
|
||||||
</Expression>
|
</Expression>
|
||||||
<Expression success="true" type="REQUIRE_THROWS_WITH" filename="projects/<exe-name>/ExceptionTests.cpp" >
|
<Expression success="true" type="REQUIRE_THROWS_WITH" filename="projects/<exe-name>/ExceptionTests.cpp" >
|
||||||
|
@ -1692,7 +1692,7 @@
|
||||||
thisThrows(), Contains( "exCept", Catch::CaseSensitive::No )
|
thisThrows(), Contains( "exCept", Catch::CaseSensitive::No )
|
||||||
</Original>
|
</Original>
|
||||||
<Expanded>
|
<Expanded>
|
||||||
thisThrows(), Contains( "exCept", Catch::CaseSensitive::No )
|
"expected exception" contains: "except" (case insensitive)
|
||||||
</Expanded>
|
</Expanded>
|
||||||
</Expression>
|
</Expression>
|
||||||
<OverallResults successes="4" failures="0" expectedFailures="0"/>
|
<OverallResults successes="4" failures="0" expectedFailures="0"/>
|
||||||
|
@ -2172,7 +2172,7 @@
|
||||||
thisThrows(), "expected exception"
|
thisThrows(), "expected exception"
|
||||||
</Original>
|
</Original>
|
||||||
<Expanded>
|
<Expanded>
|
||||||
thisThrows(), "expected exception"
|
"expected exception" equals: "expected exception"
|
||||||
</Expanded>
|
</Expanded>
|
||||||
</Expression>
|
</Expression>
|
||||||
<Expression success="false" type="REQUIRE_THROWS_WITH" filename="projects/<exe-name>/ExceptionTests.cpp" >
|
<Expression success="false" type="REQUIRE_THROWS_WITH" filename="projects/<exe-name>/ExceptionTests.cpp" >
|
||||||
|
@ -2180,7 +2180,7 @@
|
||||||
thisThrows(), "should fail"
|
thisThrows(), "should fail"
|
||||||
</Original>
|
</Original>
|
||||||
<Expanded>
|
<Expanded>
|
||||||
expected exception
|
"expected exception" equals: "should fail"
|
||||||
</Expanded>
|
</Expanded>
|
||||||
</Expression>
|
</Expression>
|
||||||
<OverallResult success="false"/>
|
<OverallResult success="false"/>
|
||||||
|
|
Loading…
Reference in New Issue