mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-11-04 14:09:33 +01:00 
			
		
		
		
	Moved matcher-based capture macros into their own file
- this file excluded from the CATCH_CONFIG_DISABLE_MATCHERS path. - matchers are always compiled in to the impl file - _THROWS_WITH macros are still available with matchers disabled - but only the ones that take a string - tests that use matchers have #ifdefs, so the whole SelfTest project can compile with matchers disable.
This commit is contained in:
		@@ -126,6 +126,7 @@ set(INTERNAL_HEADERS
 | 
				
			|||||||
        ${HEADER_DIR}/internal/catch_assertioninfo.h
 | 
					        ${HEADER_DIR}/internal/catch_assertioninfo.h
 | 
				
			||||||
        ${HEADER_DIR}/internal/catch_assertionresult.h
 | 
					        ${HEADER_DIR}/internal/catch_assertionresult.h
 | 
				
			||||||
        ${HEADER_DIR}/internal/catch_capture.hpp
 | 
					        ${HEADER_DIR}/internal/catch_capture.hpp
 | 
				
			||||||
 | 
					        ${HEADER_DIR}/internal/catch_capture_matchers.h
 | 
				
			||||||
        ${HEADER_DIR}/internal/catch_clara.h
 | 
					        ${HEADER_DIR}/internal/catch_clara.h
 | 
				
			||||||
        ${HEADER_DIR}/internal/catch_commandline.hpp
 | 
					        ${HEADER_DIR}/internal/catch_commandline.hpp
 | 
				
			||||||
        ${HEADER_DIR}/internal/catch_common.h
 | 
					        ${HEADER_DIR}/internal/catch_common.h
 | 
				
			||||||
@@ -201,6 +202,7 @@ set(IMPL_SOURCES
 | 
				
			|||||||
        ${HEADER_DIR}/internal/catch_assertionhandler.cpp
 | 
					        ${HEADER_DIR}/internal/catch_assertionhandler.cpp
 | 
				
			||||||
        ${HEADER_DIR}/internal/catch_assertionresult.cpp
 | 
					        ${HEADER_DIR}/internal/catch_assertionresult.cpp
 | 
				
			||||||
        ${HEADER_DIR}/internal/catch_benchmark.cpp
 | 
					        ${HEADER_DIR}/internal/catch_benchmark.cpp
 | 
				
			||||||
 | 
					        ${HEADER_DIR}/internal/catch_capture_matchers.cpp
 | 
				
			||||||
        ${HEADER_DIR}/internal/catch_commandline.cpp
 | 
					        ${HEADER_DIR}/internal/catch_commandline.cpp
 | 
				
			||||||
        ${HEADER_DIR}/internal/catch_common.cpp
 | 
					        ${HEADER_DIR}/internal/catch_common.cpp
 | 
				
			||||||
        ${HEADER_DIR}/internal/catch_config.cpp
 | 
					        ${HEADER_DIR}/internal/catch_config.cpp
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -41,6 +41,10 @@
 | 
				
			|||||||
#include "internal/catch_compiler_capabilities.h"
 | 
					#include "internal/catch_compiler_capabilities.h"
 | 
				
			||||||
#include "internal/catch_interfaces_tag_alias_registry.h"
 | 
					#include "internal/catch_interfaces_tag_alias_registry.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef CATCH_CONFIG_DISABLE_MATCHERS
 | 
				
			||||||
 | 
					#include "internal/catch_capture_matchers.h"
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// These files are included here so the single_include script doesn't put them
 | 
					// These files are included here so the single_include script doesn't put them
 | 
				
			||||||
// in the conditionally compiled sections
 | 
					// in the conditionally compiled sections
 | 
				
			||||||
#include "internal/catch_test_case_info.h"
 | 
					#include "internal/catch_test_case_info.h"
 | 
				
			||||||
@@ -72,8 +76,8 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#define CATCH_REQUIRE_THROWS( ... ) INTERNAL_CATCH_THROWS( "CATCH_REQUIRE_THROWS", Catch::ResultDisposition::Normal, "", __VA_ARGS__ )
 | 
					#define CATCH_REQUIRE_THROWS( ... ) INTERNAL_CATCH_THROWS( "CATCH_REQUIRE_THROWS", Catch::ResultDisposition::Normal, "", __VA_ARGS__ )
 | 
				
			||||||
#define CATCH_REQUIRE_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( "CATCH_REQUIRE_THROWS_AS", exceptionType, Catch::ResultDisposition::Normal, expr )
 | 
					#define CATCH_REQUIRE_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( "CATCH_REQUIRE_THROWS_AS", exceptionType, Catch::ResultDisposition::Normal, expr )
 | 
				
			||||||
#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
 | 
					 | 
				
			||||||
#define CATCH_REQUIRE_THROWS_WITH( expr, matcher ) INTERNAL_CATCH_THROWS_STR_MATCHES( "CATCH_REQUIRE_THROWS_WITH", Catch::ResultDisposition::Normal, matcher, expr )
 | 
					#define CATCH_REQUIRE_THROWS_WITH( expr, matcher ) INTERNAL_CATCH_THROWS_STR_MATCHES( "CATCH_REQUIRE_THROWS_WITH", Catch::ResultDisposition::Normal, matcher, expr )
 | 
				
			||||||
 | 
					#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
 | 
				
			||||||
#define CATCH_REQUIRE_THROWS_MATCHES( expr, exceptionType, matcher ) INTERNAL_CATCH_THROWS_MATCHES( "CATCH_REQUIRE_THROWS_MATCHES", exceptionType, Catch::ResultDisposition::Normal, matcher, expr )
 | 
					#define CATCH_REQUIRE_THROWS_MATCHES( expr, exceptionType, matcher ) INTERNAL_CATCH_THROWS_MATCHES( "CATCH_REQUIRE_THROWS_MATCHES", exceptionType, Catch::ResultDisposition::Normal, matcher, expr )
 | 
				
			||||||
#endif// CATCH_CONFIG_DISABLE_MATCHERS
 | 
					#endif// CATCH_CONFIG_DISABLE_MATCHERS
 | 
				
			||||||
#define CATCH_REQUIRE_NOTHROW( ... ) INTERNAL_CATCH_NO_THROW( "CATCH_REQUIRE_NOTHROW", Catch::ResultDisposition::Normal, __VA_ARGS__ )
 | 
					#define CATCH_REQUIRE_NOTHROW( ... ) INTERNAL_CATCH_NO_THROW( "CATCH_REQUIRE_NOTHROW", Catch::ResultDisposition::Normal, __VA_ARGS__ )
 | 
				
			||||||
@@ -86,8 +90,8 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#define CATCH_CHECK_THROWS( ... )  INTERNAL_CATCH_THROWS( "CATCH_CHECK_THROWS", Catch::ResultDisposition::ContinueOnFailure, "", __VA_ARGS__ )
 | 
					#define CATCH_CHECK_THROWS( ... )  INTERNAL_CATCH_THROWS( "CATCH_CHECK_THROWS", Catch::ResultDisposition::ContinueOnFailure, "", __VA_ARGS__ )
 | 
				
			||||||
#define CATCH_CHECK_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( "CATCH_CHECK_THROWS_AS", exceptionType, Catch::ResultDisposition::ContinueOnFailure, expr )
 | 
					#define CATCH_CHECK_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( "CATCH_CHECK_THROWS_AS", exceptionType, Catch::ResultDisposition::ContinueOnFailure, expr )
 | 
				
			||||||
#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
 | 
					 | 
				
			||||||
#define CATCH_CHECK_THROWS_WITH( expr, matcher ) INTERNAL_CATCH_THROWS_STR_MATCHES( "CATCH_CHECK_THROWS_WITH", Catch::ResultDisposition::ContinueOnFailure, matcher, expr )
 | 
					#define CATCH_CHECK_THROWS_WITH( expr, matcher ) INTERNAL_CATCH_THROWS_STR_MATCHES( "CATCH_CHECK_THROWS_WITH", Catch::ResultDisposition::ContinueOnFailure, matcher, expr )
 | 
				
			||||||
 | 
					#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
 | 
				
			||||||
#define CATCH_CHECK_THROWS_MATCHES( expr, exceptionType, matcher ) INTERNAL_CATCH_THROWS_MATCHES( "CATCH_CHECK_THROWS_MATCHES", exceptionType, Catch::ResultDisposition::ContinueOnFailure, matcher, expr )
 | 
					#define CATCH_CHECK_THROWS_MATCHES( expr, exceptionType, matcher ) INTERNAL_CATCH_THROWS_MATCHES( "CATCH_CHECK_THROWS_MATCHES", exceptionType, Catch::ResultDisposition::ContinueOnFailure, matcher, expr )
 | 
				
			||||||
#endif // CATCH_CONFIG_DISABLE_MATCHERS
 | 
					#endif // CATCH_CONFIG_DISABLE_MATCHERS
 | 
				
			||||||
#define CATCH_CHECK_NOTHROW( ... ) INTERNAL_CATCH_NO_THROW( "CATCH_CHECK_NOTHROW", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
 | 
					#define CATCH_CHECK_NOTHROW( ... ) INTERNAL_CATCH_NO_THROW( "CATCH_CHECK_NOTHROW", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
 | 
				
			||||||
@@ -134,8 +138,8 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#define REQUIRE_THROWS( ... ) INTERNAL_CATCH_THROWS( "REQUIRE_THROWS", Catch::ResultDisposition::Normal, __VA_ARGS__ )
 | 
					#define REQUIRE_THROWS( ... ) INTERNAL_CATCH_THROWS( "REQUIRE_THROWS", Catch::ResultDisposition::Normal, __VA_ARGS__ )
 | 
				
			||||||
#define REQUIRE_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( "REQUIRE_THROWS_AS", exceptionType, Catch::ResultDisposition::Normal, expr )
 | 
					#define REQUIRE_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( "REQUIRE_THROWS_AS", exceptionType, Catch::ResultDisposition::Normal, expr )
 | 
				
			||||||
#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
 | 
					 | 
				
			||||||
#define REQUIRE_THROWS_WITH( expr, matcher ) INTERNAL_CATCH_THROWS_STR_MATCHES( "REQUIRE_THROWS_WITH", Catch::ResultDisposition::Normal, matcher, expr )
 | 
					#define REQUIRE_THROWS_WITH( expr, matcher ) INTERNAL_CATCH_THROWS_STR_MATCHES( "REQUIRE_THROWS_WITH", Catch::ResultDisposition::Normal, matcher, expr )
 | 
				
			||||||
 | 
					#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
 | 
				
			||||||
#define REQUIRE_THROWS_MATCHES( expr, exceptionType, matcher ) INTERNAL_CATCH_THROWS_MATCHES( "REQUIRE_THROWS_MATCHES", exceptionType, Catch::ResultDisposition::Normal, matcher, expr )
 | 
					#define REQUIRE_THROWS_MATCHES( expr, exceptionType, matcher ) INTERNAL_CATCH_THROWS_MATCHES( "REQUIRE_THROWS_MATCHES", exceptionType, Catch::ResultDisposition::Normal, matcher, expr )
 | 
				
			||||||
#endif // CATCH_CONFIG_DISABLE_MATCHERS
 | 
					#endif // CATCH_CONFIG_DISABLE_MATCHERS
 | 
				
			||||||
#define REQUIRE_NOTHROW( ... ) INTERNAL_CATCH_NO_THROW( "REQUIRE_NOTHROW", Catch::ResultDisposition::Normal, __VA_ARGS__ )
 | 
					#define REQUIRE_NOTHROW( ... ) INTERNAL_CATCH_NO_THROW( "REQUIRE_NOTHROW", Catch::ResultDisposition::Normal, __VA_ARGS__ )
 | 
				
			||||||
@@ -148,8 +152,8 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#define CHECK_THROWS( ... )  INTERNAL_CATCH_THROWS( "CHECK_THROWS", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
 | 
					#define CHECK_THROWS( ... )  INTERNAL_CATCH_THROWS( "CHECK_THROWS", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
 | 
				
			||||||
#define CHECK_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( "CHECK_THROWS_AS", exceptionType, Catch::ResultDisposition::ContinueOnFailure, expr )
 | 
					#define CHECK_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( "CHECK_THROWS_AS", exceptionType, Catch::ResultDisposition::ContinueOnFailure, expr )
 | 
				
			||||||
#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
 | 
					 | 
				
			||||||
#define CHECK_THROWS_WITH( expr, matcher ) INTERNAL_CATCH_THROWS_STR_MATCHES( "CHECK_THROWS_WITH", Catch::ResultDisposition::ContinueOnFailure, matcher, expr )
 | 
					#define CHECK_THROWS_WITH( expr, matcher ) INTERNAL_CATCH_THROWS_STR_MATCHES( "CHECK_THROWS_WITH", Catch::ResultDisposition::ContinueOnFailure, matcher, expr )
 | 
				
			||||||
 | 
					#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
 | 
				
			||||||
#define CHECK_THROWS_MATCHES( expr, exceptionType, matcher ) INTERNAL_CATCH_THROWS_MATCHES( "CHECK_THROWS_MATCHES", exceptionType, Catch::ResultDisposition::ContinueOnFailure, matcher, expr )
 | 
					#define CHECK_THROWS_MATCHES( expr, exceptionType, matcher ) INTERNAL_CATCH_THROWS_MATCHES( "CHECK_THROWS_MATCHES", exceptionType, Catch::ResultDisposition::ContinueOnFailure, matcher, expr )
 | 
				
			||||||
#endif // CATCH_CONFIG_DISABLE_MATCHERS
 | 
					#endif // CATCH_CONFIG_DISABLE_MATCHERS
 | 
				
			||||||
#define CHECK_NOTHROW( ... ) INTERNAL_CATCH_NO_THROW( "CHECK_NOTHROW", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
 | 
					#define CHECK_NOTHROW( ... ) INTERNAL_CATCH_NO_THROW( "CHECK_NOTHROW", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,7 +14,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 "catch_capture_matchers.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <cassert>
 | 
					#include <cassert>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -138,12 +138,8 @@ namespace Catch {
 | 
				
			|||||||
        m_inExceptionGuard = false;
 | 
					        m_inExceptionGuard = false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    using StringMatcher = Matchers::Impl::MatcherBase<std::string>;
 | 
					    // This is the overload that takes a string and infers the Equals matcher from it
 | 
				
			||||||
 | 
					    // The more general overload, that takes any string matcher, is in catch_capture_matchers.cpp
 | 
				
			||||||
    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  ) {
 | 
					    void handleExceptionMatchExpr( AssertionHandler& handler, std::string const& str, StringRef matcherString  ) {
 | 
				
			||||||
        handleExceptionMatchExpr( handler, Matchers::Equals( str ), matcherString );
 | 
					        handleExceptionMatchExpr( handler, Matchers::Equals( str ), matcherString );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,7 +10,6 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#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,9 +66,6 @@ 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 );
 | 
					    void handleExceptionMatchExpr( AssertionHandler& handler, std::string const& str, StringRef matcherString );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
} // namespace Catch
 | 
					} // namespace Catch
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -134,18 +134,8 @@
 | 
				
			|||||||
#define INTERNAL_CATCH_INFO( macroName, log ) \
 | 
					#define INTERNAL_CATCH_INFO( macroName, log ) \
 | 
				
			||||||
    Catch::ScopedMessage INTERNAL_CATCH_UNIQUE_NAME( scopedMessage ) = Catch::MessageBuilder( macroName, CATCH_INTERNAL_LINEINFO, Catch::ResultWas::Info ) << log;
 | 
					    Catch::ScopedMessage INTERNAL_CATCH_UNIQUE_NAME( scopedMessage ) = Catch::MessageBuilder( macroName, CATCH_INTERNAL_LINEINFO, Catch::ResultWas::Info ) << log;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
 | 
					 | 
				
			||||||
///////////////////////////////////////////////////////////////////////////////
 | 
					 | 
				
			||||||
#define INTERNAL_CHECK_THAT( macroName, matcher, resultDisposition, arg ) \
 | 
					 | 
				
			||||||
    do { \
 | 
					 | 
				
			||||||
        Catch::AssertionHandler catchAssertionHandler( macroName, CATCH_INTERNAL_LINEINFO, #arg ", " #matcher, resultDisposition ); \
 | 
					 | 
				
			||||||
        INTERNAL_CATCH_TRY( catchAssertionHandler ) { \
 | 
					 | 
				
			||||||
            catchAssertionHandler.handle( Catch::makeMatchExpr( arg, matcher, #matcher ) ); \
 | 
					 | 
				
			||||||
        } INTERNAL_CATCH_CATCH( catchAssertionHandler ) \
 | 
					 | 
				
			||||||
        INTERNAL_CATCH_REACT( catchAssertionHandler ) \
 | 
					 | 
				
			||||||
    } while( Catch::alwaysFalse() )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
///////////////////////////////////////////////////////////////////////////////
 | 
					///////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					// Although this is matcher-based, it can be used with just a string
 | 
				
			||||||
#define INTERNAL_CATCH_THROWS_STR_MATCHES( macroName, resultDisposition, matcher, ... ) \
 | 
					#define INTERNAL_CATCH_THROWS_STR_MATCHES( macroName, resultDisposition, matcher, ... ) \
 | 
				
			||||||
    do { \
 | 
					    do { \
 | 
				
			||||||
        Catch::AssertionHandler catchAssertionHandler( macroName, CATCH_INTERNAL_LINEINFO, #__VA_ARGS__ ", " #matcher, resultDisposition ); \
 | 
					        Catch::AssertionHandler catchAssertionHandler( macroName, CATCH_INTERNAL_LINEINFO, #__VA_ARGS__ ", " #matcher, resultDisposition ); \
 | 
				
			||||||
@@ -163,26 +153,4 @@
 | 
				
			|||||||
    } while( Catch::alwaysFalse() )
 | 
					    } while( Catch::alwaysFalse() )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
///////////////////////////////////////////////////////////////////////////////
 | 
					 | 
				
			||||||
#define INTERNAL_CATCH_THROWS_MATCHES( macroName, exceptionType, resultDisposition, matcher, ... ) \
 | 
					 | 
				
			||||||
    do { \
 | 
					 | 
				
			||||||
        Catch::AssertionHandler catchAssertionHandler( macroName, CATCH_INTERNAL_LINEINFO, #__VA_ARGS__ ", " #exceptionType ", " #matcher, resultDisposition ); \
 | 
					 | 
				
			||||||
        if( catchAssertionHandler.allowThrows() ) \
 | 
					 | 
				
			||||||
            try { \
 | 
					 | 
				
			||||||
                static_cast<void>(__VA_ARGS__ ); \
 | 
					 | 
				
			||||||
                catchAssertionHandler.handle( Catch::ResultWas::DidntThrowException ); \
 | 
					 | 
				
			||||||
            } \
 | 
					 | 
				
			||||||
            catch( exceptionType const& ex ) { \
 | 
					 | 
				
			||||||
                catchAssertionHandler.handle( Catch::makeMatchExpr( ex, matcher, #matcher ) ); \
 | 
					 | 
				
			||||||
            } \
 | 
					 | 
				
			||||||
            catch( ... ) { \
 | 
					 | 
				
			||||||
                catchAssertionHandler.useActiveException(); \
 | 
					 | 
				
			||||||
            } \
 | 
					 | 
				
			||||||
        else \
 | 
					 | 
				
			||||||
            catchAssertionHandler.handle( Catch::ResultWas::Ok ); \
 | 
					 | 
				
			||||||
        INTERNAL_CATCH_REACT( catchAssertionHandler ) \
 | 
					 | 
				
			||||||
    } while( Catch::alwaysFalse() )
 | 
					 | 
				
			||||||
#endif // CATCH_CONFIG_DISABLE_MATCHERS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif // TWOBLUECUBES_CATCH_CAPTURE_HPP_INCLUDED
 | 
					#endif // TWOBLUECUBES_CATCH_CAPTURE_HPP_INCLUDED
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										23
									
								
								include/internal/catch_capture_matchers.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								include/internal/catch_capture_matchers.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					 *  Created by Phil on 9/8/2017.
 | 
				
			||||||
 | 
					 *  Copyright 2017 Two Blue Cubes Ltd. All rights reserved.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  Distributed under the Boost Software License, Version 1.0. (See accompanying
 | 
				
			||||||
 | 
					 *  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#include "catch_capture_matchers.h"
 | 
				
			||||||
 | 
					#include "catch_interfaces_registry_hub.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Catch {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    using StringMatcher = Matchers::Impl::MatcherBase<std::string>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // This is the general overload that takes a any string matcher
 | 
				
			||||||
 | 
					    // There is another overload, in catch_assertinhandler.h/.cpp, that only takes a string and infers
 | 
				
			||||||
 | 
					    // the Equals matcher (so the header does not mention matchers)
 | 
				
			||||||
 | 
					    void handleExceptionMatchExpr( AssertionHandler& handler, StringMatcher const& matcher, StringRef matcherString  ) {
 | 
				
			||||||
 | 
					        MatchExpr<std::string, StringMatcher const&> expr( Catch::translateActiveException(), matcher, matcherString );
 | 
				
			||||||
 | 
					        handler.handle( expr );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} // namespace Catch
 | 
				
			||||||
							
								
								
									
										87
									
								
								include/internal/catch_capture_matchers.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								include/internal/catch_capture_matchers.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,87 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					 *  Created by Phil on 9/8/2017
 | 
				
			||||||
 | 
					 *  Copyright 2017 Two Blue Cubes Ltd. All rights reserved.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  Distributed under the Boost Software License, Version 1.0. (See accompanying
 | 
				
			||||||
 | 
					 *  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#ifndef TWOBLUECUBES_CATCH_CAPTURE_MATCHERS_HPP_INCLUDED
 | 
				
			||||||
 | 
					#define TWOBLUECUBES_CATCH_CAPTURE_MATCHERS_HPP_INCLUDED
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "catch_capture.hpp"
 | 
				
			||||||
 | 
					#include "catch_matchers.hpp"
 | 
				
			||||||
 | 
					#include "catch_matchers_string.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Catch {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    template<typename ArgT, typename MatcherT>
 | 
				
			||||||
 | 
					    class MatchExpr : public ITransientExpression {
 | 
				
			||||||
 | 
					        ArgT const& m_arg;
 | 
				
			||||||
 | 
					        MatcherT 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;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    using StringMatcher = Matchers::Impl::MatcherBase<std::string>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void handleExceptionMatchExpr( AssertionHandler& handler, StringMatcher const& matcher, StringRef matcherString  );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    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 );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} // namespace Catch
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					///////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					#define INTERNAL_CHECK_THAT( macroName, matcher, resultDisposition, arg ) \
 | 
				
			||||||
 | 
					    do { \
 | 
				
			||||||
 | 
					        Catch::AssertionHandler catchAssertionHandler( macroName, CATCH_INTERNAL_LINEINFO, #arg ", " #matcher, resultDisposition ); \
 | 
				
			||||||
 | 
					        INTERNAL_CATCH_TRY( catchAssertionHandler ) { \
 | 
				
			||||||
 | 
					            catchAssertionHandler.handle( Catch::makeMatchExpr( arg, matcher, #matcher ) ); \
 | 
				
			||||||
 | 
					        } INTERNAL_CATCH_CATCH( catchAssertionHandler ) \
 | 
				
			||||||
 | 
					        INTERNAL_CATCH_REACT( catchAssertionHandler ) \
 | 
				
			||||||
 | 
					    } while( Catch::alwaysFalse() )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					///////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					#define INTERNAL_CATCH_THROWS_MATCHES( macroName, exceptionType, resultDisposition, matcher, ... ) \
 | 
				
			||||||
 | 
					    do { \
 | 
				
			||||||
 | 
					        Catch::AssertionHandler catchAssertionHandler( macroName, CATCH_INTERNAL_LINEINFO, #__VA_ARGS__ ", " #exceptionType ", " #matcher, resultDisposition ); \
 | 
				
			||||||
 | 
					        if( catchAssertionHandler.allowThrows() ) \
 | 
				
			||||||
 | 
					            try { \
 | 
				
			||||||
 | 
					                static_cast<void>(__VA_ARGS__ ); \
 | 
				
			||||||
 | 
					                catchAssertionHandler.handle( Catch::ResultWas::DidntThrowException ); \
 | 
				
			||||||
 | 
					            } \
 | 
				
			||||||
 | 
					            catch( exceptionType const& ex ) { \
 | 
				
			||||||
 | 
					                catchAssertionHandler.handle( Catch::makeMatchExpr( ex, matcher, #matcher ) ); \
 | 
				
			||||||
 | 
					            } \
 | 
				
			||||||
 | 
					            catch( ... ) { \
 | 
				
			||||||
 | 
					                catchAssertionHandler.useActiveException(); \
 | 
				
			||||||
 | 
					            } \
 | 
				
			||||||
 | 
					        else \
 | 
				
			||||||
 | 
					            catchAssertionHandler.handle( Catch::ResultWas::Ok ); \
 | 
				
			||||||
 | 
					        INTERNAL_CATCH_REACT( catchAssertionHandler ) \
 | 
				
			||||||
 | 
					    } while( Catch::alwaysFalse() )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif // TWOBLUECUBES_CATCH_CAPTURE_MATCHERS_HPP_INCLUDED
 | 
				
			||||||
@@ -10,7 +10,6 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#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>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -156,39 +155,6 @@ namespace Catch {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // !TBD: this is just here temporarily
 | 
					 | 
				
			||||||
    template<typename ArgT, typename MatcherT>
 | 
					 | 
				
			||||||
    class MatchExpr : public ITransientExpression {
 | 
					 | 
				
			||||||
        ArgT const& m_arg;
 | 
					 | 
				
			||||||
        MatcherT 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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef _MSC_VER
 | 
					#ifdef _MSC_VER
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,8 +5,6 @@
 | 
				
			|||||||
 * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 | 
					 * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "catch_matchers.hpp"
 | 
					#include "catch_matchers.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace Catch {
 | 
					namespace Catch {
 | 
				
			||||||
@@ -26,5 +24,3 @@ using namespace Matchers;
 | 
				
			|||||||
using Matchers::Impl::MatcherBase;
 | 
					using Matchers::Impl::MatcherBase;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
} // namespace Catch
 | 
					} // namespace Catch
 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif // CATCH_CONFIG_DISABLE_MATCHERS
 | 
					 | 
				
			||||||
@@ -8,8 +8,6 @@
 | 
				
			|||||||
#ifndef TWOBLUECUBES_CATCH_MATCHERS_HPP_INCLUDED
 | 
					#ifndef TWOBLUECUBES_CATCH_MATCHERS_HPP_INCLUDED
 | 
				
			||||||
#define TWOBLUECUBES_CATCH_MATCHERS_HPP_INCLUDED
 | 
					#define TWOBLUECUBES_CATCH_MATCHERS_HPP_INCLUDED
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "catch_common.h"
 | 
					#include "catch_common.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <string>
 | 
					#include <string>
 | 
				
			||||||
@@ -182,6 +180,4 @@ using Matchers::Impl::MatcherBase;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
} // namespace Catch
 | 
					} // namespace Catch
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif // CATCH_CONFIG_DISABLE_MATCHERS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif // TWOBLUECUBES_CATCH_MATCHERS_HPP_INCLUDED
 | 
					#endif // TWOBLUECUBES_CATCH_MATCHERS_HPP_INCLUDED
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,8 +6,6 @@
 | 
				
			|||||||
 * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 | 
					 * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "catch_matchers_string.h"
 | 
					#include "catch_matchers_string.h"
 | 
				
			||||||
#include "catch_string_manip.h"
 | 
					#include "catch_string_manip.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -94,5 +92,3 @@ namespace Matchers {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
} // namespace Matchers
 | 
					} // namespace Matchers
 | 
				
			||||||
} // namespace Catch
 | 
					} // namespace Catch
 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif // CATCH_CONFIG_DISABLE_MATCHERS
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,8 +8,6 @@
 | 
				
			|||||||
#ifndef TWOBLUECUBES_CATCH_MATCHERS_STRING_H_INCLUDED
 | 
					#ifndef TWOBLUECUBES_CATCH_MATCHERS_STRING_H_INCLUDED
 | 
				
			||||||
#define TWOBLUECUBES_CATCH_MATCHERS_STRING_H_INCLUDED
 | 
					#define TWOBLUECUBES_CATCH_MATCHERS_STRING_H_INCLUDED
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "catch_matchers.hpp"
 | 
					#include "catch_matchers.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <string>
 | 
					#include <string>
 | 
				
			||||||
@@ -68,6 +66,4 @@ namespace Matchers {
 | 
				
			|||||||
} // namespace Matchers
 | 
					} // namespace Matchers
 | 
				
			||||||
} // namespace Catch
 | 
					} // namespace Catch
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif // CATCH_CONFIG_DISABLE_MATCHERS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif // TWOBLUECUBES_CATCH_MATCHERS_STRING_H_INCLUDED
 | 
					#endif // TWOBLUECUBES_CATCH_MATCHERS_STRING_H_INCLUDED
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,9 +8,6 @@
 | 
				
			|||||||
#ifndef TWOBLUECUBES_CATCH_MATCHERS_VECTOR_H_INCLUDED
 | 
					#ifndef TWOBLUECUBES_CATCH_MATCHERS_VECTOR_H_INCLUDED
 | 
				
			||||||
#define TWOBLUECUBES_CATCH_MATCHERS_VECTOR_H_INCLUDED
 | 
					#define TWOBLUECUBES_CATCH_MATCHERS_VECTOR_H_INCLUDED
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "catch_matchers.hpp"
 | 
					#include "catch_matchers.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace Catch {
 | 
					namespace Catch {
 | 
				
			||||||
@@ -115,6 +112,4 @@ namespace Matchers {
 | 
				
			|||||||
} // namespace Matchers
 | 
					} // namespace Matchers
 | 
				
			||||||
} // namespace Catch
 | 
					} // namespace Catch
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif // CATCH_CONFIG_DISABLE_MATCHERS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif // TWOBLUECUBES_CATCH_MATCHERS_VECTOR_H_INCLUDED
 | 
					#endif // TWOBLUECUBES_CATCH_MATCHERS_VECTOR_H_INCLUDED
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -43,7 +43,9 @@ bool templated_tests(T t) {
 | 
				
			|||||||
    REQUIRE_THROWS(throws_int(true));
 | 
					    REQUIRE_THROWS(throws_int(true));
 | 
				
			||||||
    CHECK_THROWS_AS(throws_int(true), int);
 | 
					    CHECK_THROWS_AS(throws_int(true), int);
 | 
				
			||||||
    REQUIRE_NOTHROW(throws_int(false));
 | 
					    REQUIRE_NOTHROW(throws_int(false));
 | 
				
			||||||
 | 
					#ifndef CATCH_CONFIG_DISABLE_MATCHERS
 | 
				
			||||||
    REQUIRE_THAT("aaa", Catch::EndsWith("aaa"));
 | 
					    REQUIRE_THAT("aaa", Catch::EndsWith("aaa"));
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
    return true;
 | 
					    return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -181,6 +181,8 @@ TEST_CASE( "Unexpected exceptions can be translated", "[.][failing][!throws]"  )
 | 
				
			|||||||
        throw double( 3.14 );
 | 
					        throw double( 3.14 );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef CATCH_CONFIG_DISABLE_MATCHERS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TEST_CASE( "Exception messages can be tested for", "[!throws]" ) {
 | 
					TEST_CASE( "Exception messages can be tested for", "[!throws]" ) {
 | 
				
			||||||
    using namespace Catch::Matchers;
 | 
					    using namespace Catch::Matchers;
 | 
				
			||||||
    SECTION( "exact match" )
 | 
					    SECTION( "exact match" )
 | 
				
			||||||
@@ -195,6 +197,8 @@ TEST_CASE( "Exception messages can be tested for", "[!throws]" ) {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TEST_CASE( "Mismatching exception messages failing the test", "[.][failing][!throws]" ) {
 | 
					TEST_CASE( "Mismatching exception messages failing the test", "[.][failing][!throws]" ) {
 | 
				
			||||||
    REQUIRE_THROWS_WITH( thisThrows(), "expected exception" );
 | 
					    REQUIRE_THROWS_WITH( thisThrows(), "expected exception" );
 | 
				
			||||||
    REQUIRE_THROWS_WITH( thisThrows(), "should fail" );
 | 
					    REQUIRE_THROWS_WITH( thisThrows(), "should fail" );
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,6 +8,8 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include "catch.hpp"
 | 
					#include "catch.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef CATCH_CONFIG_DISABLE_MATCHERS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
inline const char* testStringForMatching()
 | 
					inline const char* testStringForMatching()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return "this string contains 'abc' as a substring";
 | 
					    return "this string contains 'abc' as a substring";
 | 
				
			||||||
@@ -223,3 +225,5 @@ TEST_CASE("Exception matchers that fail", "[matchers][exceptions][!throws][.fail
 | 
				
			|||||||
        REQUIRE_THROWS_MATCHES(throws(4), SpecialException, ExceptionMatcher{ 1 });
 | 
					        REQUIRE_THROWS_MATCHES(throws(4), SpecialException, ExceptionMatcher{ 1 });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif // CATCH_CONFIG_DISABLE_MATCHERS
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,8 +11,6 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
TEST_CASE( "Tag alias can be registered against tag patterns" ) {
 | 
					TEST_CASE( "Tag alias can be registered against tag patterns" ) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    using namespace Catch::Matchers;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    Catch::TagAliasRegistry registry;
 | 
					    Catch::TagAliasRegistry registry;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    registry.add( "[@zzz]", "[one][two]", Catch::SourceLineInfo( "file", 2 ) );
 | 
					    registry.add( "[@zzz]", "[one][two]", Catch::SourceLineInfo( "file", 2 ) );
 | 
				
			||||||
@@ -24,11 +22,14 @@ TEST_CASE( "Tag alias can be registered against tag patterns" ) {
 | 
				
			|||||||
            FAIL( "expected exception" );
 | 
					            FAIL( "expected exception" );
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        catch( std::exception& ex ) {
 | 
					        catch( std::exception& ex ) {
 | 
				
			||||||
 | 
					#ifndef CATCH_CONFIG_DISABLE_MATCHERS
 | 
				
			||||||
            std::string what = ex.what();
 | 
					            std::string what = ex.what();
 | 
				
			||||||
 | 
					            using namespace Catch::Matchers;
 | 
				
			||||||
            CHECK_THAT( what, Contains( "[@zzz]" ) );
 | 
					            CHECK_THAT( what, Contains( "[@zzz]" ) );
 | 
				
			||||||
            CHECK_THAT( what, Contains( "file" ) );
 | 
					            CHECK_THAT( what, Contains( "file" ) );
 | 
				
			||||||
            CHECK_THAT( what, Contains( "2" ) );
 | 
					            CHECK_THAT( what, Contains( "2" ) );
 | 
				
			||||||
            CHECK_THAT( what, Contains( "10" ) );
 | 
					            CHECK_THAT( what, Contains( "10" ) );
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -47,7 +47,9 @@ inline Catch::TestCase fakeTestCase( const char* name, const char* desc = "" ){
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
TEST_CASE( "Process can be configured on command line", "[config][command-line]" ) {
 | 
					TEST_CASE( "Process can be configured on command line", "[config][command-line]" ) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef CATCH_CONFIG_DISABLE_MATCHERS
 | 
				
			||||||
    using namespace Catch::Matchers;
 | 
					    using namespace Catch::Matchers;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Catch::ConfigData config;
 | 
					    Catch::ConfigData config;
 | 
				
			||||||
    auto cli = Catch::makeCommandLineParser(config);
 | 
					    auto cli = Catch::makeCommandLineParser(config);
 | 
				
			||||||
@@ -153,7 +155,9 @@ TEST_CASE( "Process can be configured on command line", "[config][command-line]"
 | 
				
			|||||||
            auto result = cli.parse({"test", "-x", "oops"});
 | 
					            auto result = cli.parse({"test", "-x", "oops"});
 | 
				
			||||||
            CHECK(!result);
 | 
					            CHECK(!result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef CATCH_CONFIG_DISABLE_MATCHERS
 | 
				
			||||||
            REQUIRE_THAT(result.errorMessage(), Contains("convert") && Contains("oops"));
 | 
					            REQUIRE_THAT(result.errorMessage(), Contains("convert") && Contains("oops"));
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -225,7 +229,9 @@ TEST_CASE( "Process can be configured on command line", "[config][command-line]"
 | 
				
			|||||||
        SECTION( "error" ) {
 | 
					        SECTION( "error" ) {
 | 
				
			||||||
            auto result = cli.parse({"test", "--use-colour", "wrong"});
 | 
					            auto result = cli.parse({"test", "--use-colour", "wrong"});
 | 
				
			||||||
            CHECK( !result );
 | 
					            CHECK( !result );
 | 
				
			||||||
 | 
					#ifndef CATCH_CONFIG_DISABLE_MATCHERS
 | 
				
			||||||
            CHECK_THAT( result.errorMessage(), Contains( "colour mode must be one of" ) );
 | 
					            CHECK_THAT( result.errorMessage(), Contains( "colour mode must be one of" ) );
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user