mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-11-03 21:49:32 +01:00 
			
		
		
		
	Compare commits
	
		
			20 Commits
		
	
	
		
			v3.9.0
			...
			v2.0.0-dev
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					f4ba8aaf19 | ||
| 
						 | 
					25899ea20e | ||
| 
						 | 
					36cee598cf | ||
| 
						 | 
					506b915f7f | ||
| 
						 | 
					5cab3cc1b8 | ||
| 
						 | 
					d2642325ae | ||
| 
						 | 
					8fa41d96c7 | ||
| 
						 | 
					693355cc75 | ||
| 
						 | 
					5e0db60443 | ||
| 
						 | 
					ce547c1799 | ||
| 
						 | 
					28aece6a7a | ||
| 
						 | 
					bd8688cded | ||
| 
						 | 
					c70170e904 | ||
| 
						 | 
					6789dfa2ba | ||
| 
						 | 
					fdc8a2b2df | ||
| 
						 | 
					eea9357284 | ||
| 
						 | 
					73968f29a5 | ||
| 
						 | 
					b77b45a390 | ||
| 
						 | 
					2ebe11660c | ||
| 
						 | 
					e55273db19 | 
@@ -1,6 +1,6 @@
 | 
				
			|||||||

 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
*v1.3.0-develop.3*
 | 
					*v2.0.0-develop.2*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Build status (on Travis CI) [](https://travis-ci.org/philsquared/Catch)
 | 
					Build status (on Travis CI) [](https://travis-ci.org/philsquared/Catch)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,11 +29,9 @@
 | 
				
			|||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "internal/catch_notimplemented_exception.h"
 | 
					#include "internal/catch_notimplemented_exception.h"
 | 
				
			||||||
#include "internal/catch_context.h"
 | 
					 | 
				
			||||||
#include "internal/catch_test_registry.hpp"
 | 
					#include "internal/catch_test_registry.hpp"
 | 
				
			||||||
#include "internal/catch_capture.hpp"
 | 
					#include "internal/catch_capture.hpp"
 | 
				
			||||||
#include "internal/catch_section.h"
 | 
					#include "internal/catch_section.h"
 | 
				
			||||||
#include "internal/catch_generators.hpp"
 | 
					 | 
				
			||||||
#include "internal/catch_interfaces_exception.h"
 | 
					#include "internal/catch_interfaces_exception.h"
 | 
				
			||||||
#include "internal/catch_approx.hpp"
 | 
					#include "internal/catch_approx.hpp"
 | 
				
			||||||
#include "internal/catch_matchers.hpp"
 | 
					#include "internal/catch_matchers.hpp"
 | 
				
			||||||
@@ -43,7 +41,6 @@
 | 
				
			|||||||
// 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"
 | 
				
			||||||
#include "internal/catch_interfaces_runner.h"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef __OBJC__
 | 
					#ifdef __OBJC__
 | 
				
			||||||
#include "internal/catch_objc.hpp"
 | 
					#include "internal/catch_objc.hpp"
 | 
				
			||||||
@@ -99,6 +96,7 @@
 | 
				
			|||||||
    #define CATCH_TEST_CASE( ... ) INTERNAL_CATCH_TESTCASE( __VA_ARGS__ )
 | 
					    #define CATCH_TEST_CASE( ... ) INTERNAL_CATCH_TESTCASE( __VA_ARGS__ )
 | 
				
			||||||
    #define CATCH_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, __VA_ARGS__ )
 | 
					    #define CATCH_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, __VA_ARGS__ )
 | 
				
			||||||
    #define CATCH_METHOD_AS_TEST_CASE( method, ... ) INTERNAL_CATCH_METHOD_AS_TEST_CASE( method, __VA_ARGS__ )
 | 
					    #define CATCH_METHOD_AS_TEST_CASE( method, ... ) INTERNAL_CATCH_METHOD_AS_TEST_CASE( method, __VA_ARGS__ )
 | 
				
			||||||
 | 
					    #define CATCH_REGISTER_TEST_CASE( ... ) INTERNAL_CATCH_REGISTER_TESTCASE( __VA_ARGS__ )
 | 
				
			||||||
    #define CATCH_SECTION( ... ) INTERNAL_CATCH_SECTION( __VA_ARGS__ )
 | 
					    #define CATCH_SECTION( ... ) INTERNAL_CATCH_SECTION( __VA_ARGS__ )
 | 
				
			||||||
    #define CATCH_FAIL( ... ) INTERNAL_CATCH_MSG( Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::Normal, "CATCH_FAIL", __VA_ARGS__ )
 | 
					    #define CATCH_FAIL( ... ) INTERNAL_CATCH_MSG( Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::Normal, "CATCH_FAIL", __VA_ARGS__ )
 | 
				
			||||||
    #define CATCH_SUCCEED( ... ) INTERNAL_CATCH_MSG( Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, "CATCH_SUCCEED", __VA_ARGS__ )
 | 
					    #define CATCH_SUCCEED( ... ) INTERNAL_CATCH_MSG( Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, "CATCH_SUCCEED", __VA_ARGS__ )
 | 
				
			||||||
@@ -106,6 +104,7 @@
 | 
				
			|||||||
    #define CATCH_TEST_CASE( name, description ) INTERNAL_CATCH_TESTCASE( name, description )
 | 
					    #define CATCH_TEST_CASE( name, description ) INTERNAL_CATCH_TESTCASE( name, description )
 | 
				
			||||||
    #define CATCH_TEST_CASE_METHOD( className, name, description ) INTERNAL_CATCH_TEST_CASE_METHOD( className, name, description )
 | 
					    #define CATCH_TEST_CASE_METHOD( className, name, description ) INTERNAL_CATCH_TEST_CASE_METHOD( className, name, description )
 | 
				
			||||||
    #define CATCH_METHOD_AS_TEST_CASE( method, name, description ) INTERNAL_CATCH_METHOD_AS_TEST_CASE( method, name, description )
 | 
					    #define CATCH_METHOD_AS_TEST_CASE( method, name, description ) INTERNAL_CATCH_METHOD_AS_TEST_CASE( method, name, description )
 | 
				
			||||||
 | 
					    #define CATCH_REGISTER_TEST_CASE( function, name, description ) INTERNAL_CATCH_REGISTER_TESTCASE( function, name, description )
 | 
				
			||||||
    #define CATCH_SECTION( name, description ) INTERNAL_CATCH_SECTION( name, description )
 | 
					    #define CATCH_SECTION( name, description ) INTERNAL_CATCH_SECTION( name, description )
 | 
				
			||||||
    #define CATCH_FAIL( msg ) INTERNAL_CATCH_MSG( Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::Normal, "CATCH_FAIL", msg )
 | 
					    #define CATCH_FAIL( msg ) INTERNAL_CATCH_MSG( Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::Normal, "CATCH_FAIL", msg )
 | 
				
			||||||
    #define CATCH_SUCCEED( msg ) INTERNAL_CATCH_MSG( Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, "CATCH_SUCCEED", msg )
 | 
					    #define CATCH_SUCCEED( msg ) INTERNAL_CATCH_MSG( Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, "CATCH_SUCCEED", msg )
 | 
				
			||||||
@@ -115,8 +114,6 @@
 | 
				
			|||||||
#define CATCH_REGISTER_REPORTER( name, reporterType ) INTERNAL_CATCH_REGISTER_REPORTER( name, reporterType )
 | 
					#define CATCH_REGISTER_REPORTER( name, reporterType ) INTERNAL_CATCH_REGISTER_REPORTER( name, reporterType )
 | 
				
			||||||
#define CATCH_REGISTER_LEGACY_REPORTER( name, reporterType ) INTERNAL_CATCH_REGISTER_LEGACY_REPORTER( name, reporterType )
 | 
					#define CATCH_REGISTER_LEGACY_REPORTER( name, reporterType ) INTERNAL_CATCH_REGISTER_LEGACY_REPORTER( name, reporterType )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CATCH_GENERATE( expr) INTERNAL_CATCH_GENERATE( expr )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// "BDD-style" convenience wrappers
 | 
					// "BDD-style" convenience wrappers
 | 
				
			||||||
#ifdef CATCH_CONFIG_VARIADIC_MACROS
 | 
					#ifdef CATCH_CONFIG_VARIADIC_MACROS
 | 
				
			||||||
#define CATCH_SCENARIO( ... ) CATCH_TEST_CASE( "Scenario: " __VA_ARGS__ )
 | 
					#define CATCH_SCENARIO( ... ) CATCH_TEST_CASE( "Scenario: " __VA_ARGS__ )
 | 
				
			||||||
@@ -166,6 +163,7 @@
 | 
				
			|||||||
    #define TEST_CASE( ... ) INTERNAL_CATCH_TESTCASE( __VA_ARGS__ )
 | 
					    #define TEST_CASE( ... ) INTERNAL_CATCH_TESTCASE( __VA_ARGS__ )
 | 
				
			||||||
    #define TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, __VA_ARGS__ )
 | 
					    #define TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, __VA_ARGS__ )
 | 
				
			||||||
    #define METHOD_AS_TEST_CASE( method, ... ) INTERNAL_CATCH_METHOD_AS_TEST_CASE( method, __VA_ARGS__ )
 | 
					    #define METHOD_AS_TEST_CASE( method, ... ) INTERNAL_CATCH_METHOD_AS_TEST_CASE( method, __VA_ARGS__ )
 | 
				
			||||||
 | 
					    #define REGISTER_TEST_CASE( ... ) INTERNAL_CATCH_REGISTER_TESTCASE( __VA_ARGS__ )
 | 
				
			||||||
    #define SECTION( ... ) INTERNAL_CATCH_SECTION( __VA_ARGS__ )
 | 
					    #define SECTION( ... ) INTERNAL_CATCH_SECTION( __VA_ARGS__ )
 | 
				
			||||||
    #define FAIL( ... ) INTERNAL_CATCH_MSG( Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::Normal, "FAIL", __VA_ARGS__ )
 | 
					    #define FAIL( ... ) INTERNAL_CATCH_MSG( Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::Normal, "FAIL", __VA_ARGS__ )
 | 
				
			||||||
    #define SUCCEED( ... ) INTERNAL_CATCH_MSG( Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, "SUCCEED", __VA_ARGS__ )
 | 
					    #define SUCCEED( ... ) INTERNAL_CATCH_MSG( Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, "SUCCEED", __VA_ARGS__ )
 | 
				
			||||||
@@ -173,6 +171,7 @@
 | 
				
			|||||||
    #define TEST_CASE( name, description ) INTERNAL_CATCH_TESTCASE( name, description )
 | 
					    #define TEST_CASE( name, description ) INTERNAL_CATCH_TESTCASE( name, description )
 | 
				
			||||||
    #define TEST_CASE_METHOD( className, name, description ) INTERNAL_CATCH_TEST_CASE_METHOD( className, name, description )
 | 
					    #define TEST_CASE_METHOD( className, name, description ) INTERNAL_CATCH_TEST_CASE_METHOD( className, name, description )
 | 
				
			||||||
    #define METHOD_AS_TEST_CASE( method, name, description ) INTERNAL_CATCH_METHOD_AS_TEST_CASE( method, name, description )
 | 
					    #define METHOD_AS_TEST_CASE( method, name, description ) INTERNAL_CATCH_METHOD_AS_TEST_CASE( method, name, description )
 | 
				
			||||||
 | 
					    #define REGISTER_TEST_CASE( method, name, description ) INTERNAL_CATCH_REGISTER_TESTCASE( method, name, description )
 | 
				
			||||||
    #define SECTION( name, description ) INTERNAL_CATCH_SECTION( name, description )
 | 
					    #define SECTION( name, description ) INTERNAL_CATCH_SECTION( name, description )
 | 
				
			||||||
    #define FAIL( msg ) INTERNAL_CATCH_MSG( Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::Normal, "FAIL", msg )
 | 
					    #define FAIL( msg ) INTERNAL_CATCH_MSG( Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::Normal, "FAIL", msg )
 | 
				
			||||||
    #define SUCCEED( msg ) INTERNAL_CATCH_MSG( Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, "SUCCEED", msg )
 | 
					    #define SUCCEED( msg ) INTERNAL_CATCH_MSG( Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, "SUCCEED", msg )
 | 
				
			||||||
@@ -182,8 +181,6 @@
 | 
				
			|||||||
#define REGISTER_REPORTER( name, reporterType ) INTERNAL_CATCH_REGISTER_REPORTER( name, reporterType )
 | 
					#define REGISTER_REPORTER( name, reporterType ) INTERNAL_CATCH_REGISTER_REPORTER( name, reporterType )
 | 
				
			||||||
#define REGISTER_LEGACY_REPORTER( name, reporterType ) INTERNAL_CATCH_REGISTER_LEGACY_REPORTER( name, reporterType )
 | 
					#define REGISTER_LEGACY_REPORTER( name, reporterType ) INTERNAL_CATCH_REGISTER_LEGACY_REPORTER( name, reporterType )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define GENERATE( expr) INTERNAL_CATCH_GENERATE( expr )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CATCH_TRANSLATE_EXCEPTION( signature ) INTERNAL_CATCH_TRANSLATE_EXCEPTION( signature )
 | 
					#define CATCH_TRANSLATE_EXCEPTION( signature ) INTERNAL_CATCH_TRANSLATE_EXCEPTION( signature )
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -74,7 +74,7 @@ namespace Catch {
 | 
				
			|||||||
        for( std::vector<TestCase>::const_iterator it = allTestCases.begin(), itEnd = allTestCases.end();
 | 
					        for( std::vector<TestCase>::const_iterator it = allTestCases.begin(), itEnd = allTestCases.end();
 | 
				
			||||||
                it != itEnd;
 | 
					                it != itEnd;
 | 
				
			||||||
                ++it ) {
 | 
					                ++it ) {
 | 
				
			||||||
            if( !context.aborting() && matchTest( *it, testSpec, *iconfig ) )
 | 
					            if( !context.isAborting() && matchTest( *it, testSpec, *iconfig ) )
 | 
				
			||||||
                totals += context.runTest( *it );
 | 
					                totals += context.runTest( *it );
 | 
				
			||||||
            else
 | 
					            else
 | 
				
			||||||
                reporter->skipTest( *it );
 | 
					                reporter->skipTest( *it );
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,13 +10,14 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include "catch_result_builder.h"
 | 
					#include "catch_result_builder.h"
 | 
				
			||||||
#include "catch_message.h"
 | 
					#include "catch_message.h"
 | 
				
			||||||
#include "catch_interfaces_capture.h"
 | 
					 | 
				
			||||||
#include "catch_debugger.h"
 | 
					#include "catch_debugger.h"
 | 
				
			||||||
#include "catch_common.h"
 | 
					#include "catch_common.h"
 | 
				
			||||||
#include "catch_tostring.h"
 | 
					#include "catch_tostring.h"
 | 
				
			||||||
#include "catch_interfaces_runner.h"
 | 
					 | 
				
			||||||
#include "catch_compiler_capabilities.h"
 | 
					#include "catch_compiler_capabilities.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Catch {
 | 
				
			||||||
 | 
					    AssertionResult const* getLastResult();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
///////////////////////////////////////////////////////////////////////////////
 | 
					///////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
// In the event of a failure works out if the debugger needs to be invoked
 | 
					// In the event of a failure works out if the debugger needs to be invoked
 | 
				
			||||||
@@ -44,12 +45,12 @@
 | 
				
			|||||||
///////////////////////////////////////////////////////////////////////////////
 | 
					///////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
#define INTERNAL_CATCH_IF( expr, resultDisposition, macroName ) \
 | 
					#define INTERNAL_CATCH_IF( expr, resultDisposition, macroName ) \
 | 
				
			||||||
    INTERNAL_CATCH_TEST( expr, resultDisposition, macroName ); \
 | 
					    INTERNAL_CATCH_TEST( expr, resultDisposition, macroName ); \
 | 
				
			||||||
    if( Catch::getResultCapture().getLastResult()->succeeded() )
 | 
					    if( Catch::getLastResult()->succeeded() )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
///////////////////////////////////////////////////////////////////////////////
 | 
					///////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
#define INTERNAL_CATCH_ELSE( expr, resultDisposition, macroName ) \
 | 
					#define INTERNAL_CATCH_ELSE( expr, resultDisposition, macroName ) \
 | 
				
			||||||
    INTERNAL_CATCH_TEST( expr, resultDisposition, macroName ); \
 | 
					    INTERNAL_CATCH_TEST( expr, resultDisposition, macroName ); \
 | 
				
			||||||
    if( !Catch::getResultCapture().getLastResult()->succeeded() )
 | 
					    if( !Catch::getLastResult()->succeeded() )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
///////////////////////////////////////////////////////////////////////////////
 | 
					///////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
#define INTERNAL_CATCH_NO_THROW( expr, resultDisposition, macroName ) \
 | 
					#define INTERNAL_CATCH_NO_THROW( expr, resultDisposition, macroName ) \
 | 
				
			||||||
@@ -129,7 +130,7 @@
 | 
				
			|||||||
///////////////////////////////////////////////////////////////////////////////
 | 
					///////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
#define INTERNAL_CHECK_THAT( arg, matcher, resultDisposition, macroName ) \
 | 
					#define INTERNAL_CHECK_THAT( arg, matcher, resultDisposition, macroName ) \
 | 
				
			||||||
    do { \
 | 
					    do { \
 | 
				
			||||||
        Catch::ResultBuilder __catchResult( macroName, CATCH_INTERNAL_LINEINFO, #arg " " #matcher, resultDisposition ); \
 | 
					        Catch::ResultBuilder __catchResult( macroName, CATCH_INTERNAL_LINEINFO, #arg ", " #matcher, resultDisposition ); \
 | 
				
			||||||
        try { \
 | 
					        try { \
 | 
				
			||||||
            std::string matcherAsString = (matcher).toString(); \
 | 
					            std::string matcherAsString = (matcher).toString(); \
 | 
				
			||||||
            __catchResult \
 | 
					            __catchResult \
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,7 +10,11 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#define INTERNAL_CATCH_UNIQUE_NAME_LINE2( name, line ) name##line
 | 
					#define INTERNAL_CATCH_UNIQUE_NAME_LINE2( name, line ) name##line
 | 
				
			||||||
#define INTERNAL_CATCH_UNIQUE_NAME_LINE( name, line ) INTERNAL_CATCH_UNIQUE_NAME_LINE2( name, line )
 | 
					#define INTERNAL_CATCH_UNIQUE_NAME_LINE( name, line ) INTERNAL_CATCH_UNIQUE_NAME_LINE2( name, line )
 | 
				
			||||||
 | 
					#ifdef CATCH_CONFIG_COUNTER
 | 
				
			||||||
 | 
					#  define INTERNAL_CATCH_UNIQUE_NAME( name ) INTERNAL_CATCH_UNIQUE_NAME_LINE( name, __COUNTER__ )
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
#  define INTERNAL_CATCH_UNIQUE_NAME( name ) INTERNAL_CATCH_UNIQUE_NAME_LINE( name, __LINE__ )
 | 
					#  define INTERNAL_CATCH_UNIQUE_NAME( name ) INTERNAL_CATCH_UNIQUE_NAME_LINE( name, __LINE__ )
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define INTERNAL_CATCH_STRINGIFY2( expr ) #expr
 | 
					#define INTERNAL_CATCH_STRINGIFY2( expr ) #expr
 | 
				
			||||||
#define INTERNAL_CATCH_STRINGIFY( expr ) INTERNAL_CATCH_STRINGIFY2( expr )
 | 
					#define INTERNAL_CATCH_STRINGIFY( expr ) INTERNAL_CATCH_STRINGIFY2( expr )
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -87,7 +87,9 @@ namespace Catch {
 | 
				
			|||||||
            std::srand( config.rngSeed() );
 | 
					            std::srand( config.rngSeed() );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    unsigned int rngSeed() {
 | 
					    unsigned int rngSeed() {
 | 
				
			||||||
        return getCurrentContext().getConfig()->rngSeed();
 | 
					        return getCurrentConfig()
 | 
				
			||||||
 | 
					            ? getCurrentConfig()->rngSeed()
 | 
				
			||||||
 | 
					            : 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    std::ostream& operator << ( std::ostream& os, SourceLineInfo const& info ) {
 | 
					    std::ostream& operator << ( std::ostream& os, SourceLineInfo const& info ) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,7 +23,7 @@
 | 
				
			|||||||
// CATCH_CONFIG_CPP11_OR_GREATER : Is C++11 supported?
 | 
					// CATCH_CONFIG_CPP11_OR_GREATER : Is C++11 supported?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// CATCH_CONFIG_VARIADIC_MACROS : are variadic macros supported?
 | 
					// CATCH_CONFIG_VARIADIC_MACROS : are variadic macros supported?
 | 
				
			||||||
 | 
					// CATCH_CONFIG_COUNTER : is the __COUNTER__ macro supported?
 | 
				
			||||||
// ****************
 | 
					// ****************
 | 
				
			||||||
// Note to maintainers: if new toggles are added please document them
 | 
					// Note to maintainers: if new toggles are added please document them
 | 
				
			||||||
// in configuration.md, too
 | 
					// in configuration.md, too
 | 
				
			||||||
@@ -111,6 +111,15 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Use __COUNTER__ if the compiler supports it
 | 
				
			||||||
 | 
					#if ( defined _MSC_VER && _MSC_VER >= 1300 ) || \
 | 
				
			||||||
 | 
					    ( defined __GNUC__  && __GNUC__ >= 4 && __GNUC_MINOR__ >= 3 ) || \
 | 
				
			||||||
 | 
					    ( defined __clang__ && __clang_major__ >= 3 )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define CATCH_INTERNAL_CONFIG_COUNTER
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
////////////////////////////////////////////////////////////////////////////////
 | 
					////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
// C++ language feature support
 | 
					// C++ language feature support
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -185,6 +194,9 @@
 | 
				
			|||||||
#if defined(CATCH_INTERNAL_CONFIG_CPP11_UNIQUE_PTR) && !defined(CATCH_CONFIG_NO_UNIQUE_PTR) && !defined(CATCH_CONFIG_CPP11_UNIQUE_PTR) && !defined(CATCH_CONFIG_NO_CPP11)
 | 
					#if defined(CATCH_INTERNAL_CONFIG_CPP11_UNIQUE_PTR) && !defined(CATCH_CONFIG_NO_UNIQUE_PTR) && !defined(CATCH_CONFIG_CPP11_UNIQUE_PTR) && !defined(CATCH_CONFIG_NO_CPP11)
 | 
				
			||||||
#   define CATCH_CONFIG_CPP11_UNIQUE_PTR
 | 
					#   define CATCH_CONFIG_CPP11_UNIQUE_PTR
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					#if defined(CATCH_INTERNAL_CONFIG_COUNTER) && !defined(CATCH_CONFIG_NO_COUNTER) && !defined(CATCH_CONFIG_COUNTER)
 | 
				
			||||||
 | 
					#   define CATCH_CONFIG_COUNTER
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// noexcept support:
 | 
					// noexcept support:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,7 +9,6 @@
 | 
				
			|||||||
#define TWOBLUECUBES_CATCH_CONFIG_HPP_INCLUDED
 | 
					#define TWOBLUECUBES_CATCH_CONFIG_HPP_INCLUDED
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "catch_test_spec_parser.hpp"
 | 
					#include "catch_test_spec_parser.hpp"
 | 
				
			||||||
#include "catch_context.h"
 | 
					 | 
				
			||||||
#include "catch_interfaces_config.h"
 | 
					#include "catch_interfaces_config.h"
 | 
				
			||||||
#include "catch_stream.h"
 | 
					#include "catch_stream.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -145,7 +145,7 @@ namespace {
 | 
				
			|||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    IColourImpl* platformColourInstance() {
 | 
					    IColourImpl* platformColourInstance() {
 | 
				
			||||||
        Ptr<IConfig const> config = getCurrentContext().getConfig();
 | 
					        IConfig const* config = getCurrentConfig();
 | 
				
			||||||
        return (config && config->forceColour()) || isatty(STDOUT_FILENO)
 | 
					        return (config && config->forceColour()) || isatty(STDOUT_FILENO)
 | 
				
			||||||
            ? PosixColourImpl::instance()
 | 
					            ? PosixColourImpl::instance()
 | 
				
			||||||
            : NoColourImpl::instance();
 | 
					            : NoColourImpl::instance();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,53 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 *  Created by Phil on 31/12/2010.
 | 
					 | 
				
			||||||
 *  Copyright 2010 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_CONTEXT_H_INCLUDED
 | 
					 | 
				
			||||||
#define TWOBLUECUBES_CATCH_CONTEXT_H_INCLUDED
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "catch_interfaces_generators.h"
 | 
					 | 
				
			||||||
#include "catch_ptr.hpp"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <memory>
 | 
					 | 
				
			||||||
#include <vector>
 | 
					 | 
				
			||||||
#include <stdlib.h>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
namespace Catch {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    class TestCase;
 | 
					 | 
				
			||||||
    class Stream;
 | 
					 | 
				
			||||||
    struct IResultCapture;
 | 
					 | 
				
			||||||
    struct IRunner;
 | 
					 | 
				
			||||||
    struct IGeneratorsForTest;
 | 
					 | 
				
			||||||
    struct IConfig;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    struct IContext
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        virtual ~IContext();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        virtual IResultCapture* getResultCapture() = 0;
 | 
					 | 
				
			||||||
        virtual IRunner* getRunner() = 0;
 | 
					 | 
				
			||||||
        virtual size_t getGeneratorIndex( std::string const& fileInfo, size_t totalSize ) = 0;
 | 
					 | 
				
			||||||
        virtual bool advanceGeneratorsForCurrentTest() = 0;
 | 
					 | 
				
			||||||
        virtual Ptr<IConfig const> getConfig() const = 0;
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    struct IMutableContext : IContext
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        virtual ~IMutableContext();
 | 
					 | 
				
			||||||
        virtual void setResultCapture( IResultCapture* resultCapture ) = 0;
 | 
					 | 
				
			||||||
        virtual void setRunner( IRunner* runner ) = 0;
 | 
					 | 
				
			||||||
        virtual void setConfig( Ptr<IConfig const> const& config ) = 0;
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    IContext& getCurrentContext();
 | 
					 | 
				
			||||||
    IMutableContext& getCurrentMutableContext();
 | 
					 | 
				
			||||||
    void cleanUpContext();
 | 
					 | 
				
			||||||
    Stream createStream( std::string const& streamName );
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif // TWOBLUECUBES_CATCH_CONTEXT_H_INCLUDED
 | 
					 | 
				
			||||||
@@ -1,104 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 *  Created by Phil on 31/12/2010.
 | 
					 | 
				
			||||||
 *  Copyright 2010 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_CONTEXT_IMPL_HPP_INCLUDED
 | 
					 | 
				
			||||||
#define TWOBLUECUBES_CATCH_CONTEXT_IMPL_HPP_INCLUDED
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "catch_run_context.hpp"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "catch_context.h"
 | 
					 | 
				
			||||||
#include "catch_stream.hpp"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
namespace Catch {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    class Context : public IMutableContext {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        Context() : m_config( CATCH_NULL ), m_runner( CATCH_NULL ), m_resultCapture( CATCH_NULL ) {}
 | 
					 | 
				
			||||||
        Context( Context const& );
 | 
					 | 
				
			||||||
        void operator=( Context const& );
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public: // IContext
 | 
					 | 
				
			||||||
        virtual IResultCapture* getResultCapture() {
 | 
					 | 
				
			||||||
            return m_resultCapture;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        virtual IRunner* getRunner() {
 | 
					 | 
				
			||||||
            return m_runner;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        virtual size_t getGeneratorIndex( std::string const& fileInfo, size_t totalSize ) {
 | 
					 | 
				
			||||||
            return getGeneratorsForCurrentTest()
 | 
					 | 
				
			||||||
            .getGeneratorInfo( fileInfo, totalSize )
 | 
					 | 
				
			||||||
            .getCurrentIndex();
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        virtual bool advanceGeneratorsForCurrentTest() {
 | 
					 | 
				
			||||||
            IGeneratorsForTest* generators = findGeneratorsForCurrentTest();
 | 
					 | 
				
			||||||
            return generators && generators->moveNext();
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        virtual Ptr<IConfig const> getConfig() const {
 | 
					 | 
				
			||||||
            return m_config;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public: // IMutableContext
 | 
					 | 
				
			||||||
        virtual void setResultCapture( IResultCapture* resultCapture ) {
 | 
					 | 
				
			||||||
            m_resultCapture = resultCapture;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        virtual void setRunner( IRunner* runner ) {
 | 
					 | 
				
			||||||
            m_runner = runner;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        virtual void setConfig( Ptr<IConfig const> const& config ) {
 | 
					 | 
				
			||||||
            m_config = config;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        friend IMutableContext& getCurrentMutableContext();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    private:
 | 
					 | 
				
			||||||
        IGeneratorsForTest* findGeneratorsForCurrentTest() {
 | 
					 | 
				
			||||||
            std::string testName = getResultCapture()->getCurrentTestName();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            std::map<std::string, IGeneratorsForTest*>::const_iterator it =
 | 
					 | 
				
			||||||
                m_generatorsByTestName.find( testName );
 | 
					 | 
				
			||||||
            return it != m_generatorsByTestName.end()
 | 
					 | 
				
			||||||
                ? it->second
 | 
					 | 
				
			||||||
                : CATCH_NULL;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        IGeneratorsForTest& getGeneratorsForCurrentTest() {
 | 
					 | 
				
			||||||
            IGeneratorsForTest* generators = findGeneratorsForCurrentTest();
 | 
					 | 
				
			||||||
            if( !generators ) {
 | 
					 | 
				
			||||||
                std::string testName = getResultCapture()->getCurrentTestName();
 | 
					 | 
				
			||||||
                generators = createGeneratorsForTest();
 | 
					 | 
				
			||||||
                m_generatorsByTestName.insert( std::make_pair( testName, generators ) );
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return *generators;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    private:
 | 
					 | 
				
			||||||
        Ptr<IConfig const> m_config;
 | 
					 | 
				
			||||||
        IRunner* m_runner;
 | 
					 | 
				
			||||||
        IResultCapture* m_resultCapture;
 | 
					 | 
				
			||||||
        std::map<std::string, IGeneratorsForTest*> m_generatorsByTestName;
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    namespace {
 | 
					 | 
				
			||||||
        Context* currentContext = CATCH_NULL;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    IMutableContext& getCurrentMutableContext() {
 | 
					 | 
				
			||||||
        if( !currentContext )
 | 
					 | 
				
			||||||
            currentContext = new Context();
 | 
					 | 
				
			||||||
        return *currentContext;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    IContext& getCurrentContext() {
 | 
					 | 
				
			||||||
        return getCurrentMutableContext();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    void cleanUpContext() {
 | 
					 | 
				
			||||||
        delete currentContext;
 | 
					 | 
				
			||||||
        currentContext = CATCH_NULL;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif // TWOBLUECUBES_CATCH_CONTEXT_IMPL_HPP_INCLUDED
 | 
					 | 
				
			||||||
@@ -11,7 +11,7 @@
 | 
				
			|||||||
#ifndef __OBJC__
 | 
					#ifndef __OBJC__
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Standard C/C++ main entry point
 | 
					// Standard C/C++ main entry point
 | 
				
			||||||
int main (int argc, char * const argv[]) {
 | 
					int main (int argc, char * argv[]) {
 | 
				
			||||||
    return Catch::Session().run( argc, argv );
 | 
					    return Catch::Session().run( argc, argv );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,9 +14,8 @@ namespace Catch {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    // Report the error condition then exit the process
 | 
					    // Report the error condition then exit the process
 | 
				
			||||||
    inline void fatal( std::string const& message, int exitCode ) {
 | 
					    inline void fatal( std::string const& message, int exitCode ) {
 | 
				
			||||||
        IContext& context = Catch::getCurrentContext();
 | 
					        IRunContext& runContext = getCurrentRunContext();
 | 
				
			||||||
        IResultCapture* resultCapture = context.getResultCapture();
 | 
					        runContext.handleFatalErrorCondition( message );
 | 
				
			||||||
        resultCapture->handleFatalErrorCondition( message );
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if( Catch::alwaysTrue() ) // avoids "no return" warnings
 | 
							if( Catch::alwaysTrue() ) // avoids "no return" warnings
 | 
				
			||||||
            exit( exitCode );
 | 
					            exit( exitCode );
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,190 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 *  Created by Phil on 27/01/2011.
 | 
					 | 
				
			||||||
 *  Copyright 2011 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_GENERATORS_HPP_INCLUDED
 | 
					 | 
				
			||||||
#define TWOBLUECUBES_CATCH_GENERATORS_HPP_INCLUDED
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "catch_context.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <iterator>
 | 
					 | 
				
			||||||
#include <vector>
 | 
					 | 
				
			||||||
#include <string>
 | 
					 | 
				
			||||||
#include <stdlib.h>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
namespace Catch {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
template<typename T>
 | 
					 | 
				
			||||||
struct IGenerator {
 | 
					 | 
				
			||||||
    virtual ~IGenerator() {}
 | 
					 | 
				
			||||||
    virtual T getValue( std::size_t index ) const = 0;
 | 
					 | 
				
			||||||
    virtual std::size_t size () const = 0;
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
template<typename T>
 | 
					 | 
				
			||||||
class BetweenGenerator : public IGenerator<T> {
 | 
					 | 
				
			||||||
public:
 | 
					 | 
				
			||||||
    BetweenGenerator( T from, T to ) : m_from( from ), m_to( to ){}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    virtual T getValue( std::size_t index ) const {
 | 
					 | 
				
			||||||
        return m_from+static_cast<int>( index );
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    virtual std::size_t size() const {
 | 
					 | 
				
			||||||
        return static_cast<std::size_t>( 1+m_to-m_from );
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
private:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    T m_from;
 | 
					 | 
				
			||||||
    T m_to;
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
template<typename T>
 | 
					 | 
				
			||||||
class ValuesGenerator : public IGenerator<T> {
 | 
					 | 
				
			||||||
public:
 | 
					 | 
				
			||||||
    ValuesGenerator(){}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    void add( T value ) {
 | 
					 | 
				
			||||||
        m_values.push_back( value );
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    virtual T getValue( std::size_t index ) const {
 | 
					 | 
				
			||||||
        return m_values[index];
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    virtual std::size_t size() const {
 | 
					 | 
				
			||||||
        return m_values.size();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
private:
 | 
					 | 
				
			||||||
    std::vector<T> m_values;
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
template<typename T>
 | 
					 | 
				
			||||||
class CompositeGenerator {
 | 
					 | 
				
			||||||
public:
 | 
					 | 
				
			||||||
    CompositeGenerator() : m_totalSize( 0 ) {}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // *** Move semantics, similar to auto_ptr ***
 | 
					 | 
				
			||||||
    CompositeGenerator( CompositeGenerator& other )
 | 
					 | 
				
			||||||
    :   m_fileInfo( other.m_fileInfo ),
 | 
					 | 
				
			||||||
        m_totalSize( 0 )
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        move( other );
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    CompositeGenerator& setFileInfo( const char* fileInfo ) {
 | 
					 | 
				
			||||||
        m_fileInfo = fileInfo;
 | 
					 | 
				
			||||||
        return *this;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ~CompositeGenerator() {
 | 
					 | 
				
			||||||
        deleteAll( m_composed );
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    operator T () const {
 | 
					 | 
				
			||||||
        size_t overallIndex = getCurrentContext().getGeneratorIndex( m_fileInfo, m_totalSize );
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        typename std::vector<const IGenerator<T>*>::const_iterator it = m_composed.begin();
 | 
					 | 
				
			||||||
        typename std::vector<const IGenerator<T>*>::const_iterator itEnd = m_composed.end();
 | 
					 | 
				
			||||||
        for( size_t index = 0; it != itEnd; ++it )
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            const IGenerator<T>* generator = *it;
 | 
					 | 
				
			||||||
            if( overallIndex >= index && overallIndex < index + generator->size() )
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                return generator->getValue( overallIndex-index );
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            index += generator->size();
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        CATCH_INTERNAL_ERROR( "Indexed past end of generated range" );
 | 
					 | 
				
			||||||
        return T(); // Suppress spurious "not all control paths return a value" warning in Visual Studio - if you know how to fix this please do so
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    void add( const IGenerator<T>* generator ) {
 | 
					 | 
				
			||||||
        m_totalSize += generator->size();
 | 
					 | 
				
			||||||
        m_composed.push_back( generator );
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    CompositeGenerator& then( CompositeGenerator& other ) {
 | 
					 | 
				
			||||||
        move( other );
 | 
					 | 
				
			||||||
        return *this;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    CompositeGenerator& then( T value ) {
 | 
					 | 
				
			||||||
        ValuesGenerator<T>* valuesGen = new ValuesGenerator<T>();
 | 
					 | 
				
			||||||
        valuesGen->add( value );
 | 
					 | 
				
			||||||
        add( valuesGen );
 | 
					 | 
				
			||||||
        return *this;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
private:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    void move( CompositeGenerator& other ) {
 | 
					 | 
				
			||||||
        std::copy( other.m_composed.begin(), other.m_composed.end(), std::back_inserter( m_composed ) );
 | 
					 | 
				
			||||||
        m_totalSize += other.m_totalSize;
 | 
					 | 
				
			||||||
        other.m_composed.clear();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    std::vector<const IGenerator<T>*> m_composed;
 | 
					 | 
				
			||||||
    std::string m_fileInfo;
 | 
					 | 
				
			||||||
    size_t m_totalSize;
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
namespace Generators
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    template<typename T>
 | 
					 | 
				
			||||||
    CompositeGenerator<T> between( T from, T to ) {
 | 
					 | 
				
			||||||
        CompositeGenerator<T> generators;
 | 
					 | 
				
			||||||
        generators.add( new BetweenGenerator<T>( from, to ) );
 | 
					 | 
				
			||||||
        return generators;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    template<typename T>
 | 
					 | 
				
			||||||
    CompositeGenerator<T> values( T val1, T val2 ) {
 | 
					 | 
				
			||||||
        CompositeGenerator<T> generators;
 | 
					 | 
				
			||||||
        ValuesGenerator<T>* valuesGen = new ValuesGenerator<T>();
 | 
					 | 
				
			||||||
        valuesGen->add( val1 );
 | 
					 | 
				
			||||||
        valuesGen->add( val2 );
 | 
					 | 
				
			||||||
        generators.add( valuesGen );
 | 
					 | 
				
			||||||
        return generators;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    template<typename T>
 | 
					 | 
				
			||||||
    CompositeGenerator<T> values( T val1, T val2, T val3 ){
 | 
					 | 
				
			||||||
        CompositeGenerator<T> generators;
 | 
					 | 
				
			||||||
        ValuesGenerator<T>* valuesGen = new ValuesGenerator<T>();
 | 
					 | 
				
			||||||
        valuesGen->add( val1 );
 | 
					 | 
				
			||||||
        valuesGen->add( val2 );
 | 
					 | 
				
			||||||
        valuesGen->add( val3 );
 | 
					 | 
				
			||||||
        generators.add( valuesGen );
 | 
					 | 
				
			||||||
        return generators;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    template<typename T>
 | 
					 | 
				
			||||||
    CompositeGenerator<T> values( T val1, T val2, T val3, T val4 ) {
 | 
					 | 
				
			||||||
        CompositeGenerator<T> generators;
 | 
					 | 
				
			||||||
        ValuesGenerator<T>* valuesGen = new ValuesGenerator<T>();
 | 
					 | 
				
			||||||
        valuesGen->add( val1 );
 | 
					 | 
				
			||||||
        valuesGen->add( val2 );
 | 
					 | 
				
			||||||
        valuesGen->add( val3 );
 | 
					 | 
				
			||||||
        valuesGen->add( val4 );
 | 
					 | 
				
			||||||
        generators.add( valuesGen );
 | 
					 | 
				
			||||||
        return generators;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
} // end namespace Generators
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
using namespace Generators;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
} // end namespace Catch
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define INTERNAL_CATCH_LINESTR2( line ) #line
 | 
					 | 
				
			||||||
#define INTERNAL_CATCH_LINESTR( line ) INTERNAL_CATCH_LINESTR2( line )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define INTERNAL_CATCH_GENERATE( expr ) expr.setFileInfo( __FILE__ "(" INTERNAL_CATCH_LINESTR( __LINE__ ) ")" )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif // TWOBLUECUBES_CATCH_GENERATORS_HPP_INCLUDED
 | 
					 | 
				
			||||||
@@ -1,86 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 *  Created by Phil on 28/01/2011.
 | 
					 | 
				
			||||||
 *  Copyright 2011 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_GENERATORS_IMPL_HPP_INCLUDED
 | 
					 | 
				
			||||||
#define TWOBLUECUBES_CATCH_GENERATORS_IMPL_HPP_INCLUDED
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "catch_interfaces_generators.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "catch_common.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <vector>
 | 
					 | 
				
			||||||
#include <string>
 | 
					 | 
				
			||||||
#include <map>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
namespace Catch {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    struct GeneratorInfo : IGeneratorInfo {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        GeneratorInfo( std::size_t size )
 | 
					 | 
				
			||||||
        :   m_size( size ),
 | 
					 | 
				
			||||||
            m_currentIndex( 0 )
 | 
					 | 
				
			||||||
        {}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        bool moveNext() {
 | 
					 | 
				
			||||||
            if( ++m_currentIndex == m_size ) {
 | 
					 | 
				
			||||||
                m_currentIndex = 0;
 | 
					 | 
				
			||||||
                return false;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return true;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        std::size_t getCurrentIndex() const {
 | 
					 | 
				
			||||||
            return m_currentIndex;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        std::size_t m_size;
 | 
					 | 
				
			||||||
        std::size_t m_currentIndex;
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ///////////////////////////////////////////////////////////////////////////
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    class GeneratorsForTest : public IGeneratorsForTest {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public:
 | 
					 | 
				
			||||||
        ~GeneratorsForTest() {
 | 
					 | 
				
			||||||
            deleteAll( m_generatorsInOrder );
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        IGeneratorInfo& getGeneratorInfo( std::string const& fileInfo, std::size_t size ) {
 | 
					 | 
				
			||||||
            std::map<std::string, IGeneratorInfo*>::const_iterator it = m_generatorsByName.find( fileInfo );
 | 
					 | 
				
			||||||
            if( it == m_generatorsByName.end() ) {
 | 
					 | 
				
			||||||
                IGeneratorInfo* info = new GeneratorInfo( size );
 | 
					 | 
				
			||||||
                m_generatorsByName.insert( std::make_pair( fileInfo, info ) );
 | 
					 | 
				
			||||||
                m_generatorsInOrder.push_back( info );
 | 
					 | 
				
			||||||
                return *info;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return *it->second;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        bool moveNext() {
 | 
					 | 
				
			||||||
            std::vector<IGeneratorInfo*>::const_iterator it = m_generatorsInOrder.begin();
 | 
					 | 
				
			||||||
            std::vector<IGeneratorInfo*>::const_iterator itEnd = m_generatorsInOrder.end();
 | 
					 | 
				
			||||||
            for(; it != itEnd; ++it ) {
 | 
					 | 
				
			||||||
                if( (*it)->moveNext() )
 | 
					 | 
				
			||||||
                    return true;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    private:
 | 
					 | 
				
			||||||
        std::map<std::string, IGeneratorInfo*> m_generatorsByName;
 | 
					 | 
				
			||||||
        std::vector<IGeneratorInfo*> m_generatorsInOrder;
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    IGeneratorsForTest* createGeneratorsForTest()
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        return new GeneratorsForTest();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
} // end namespace Catch
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif // TWOBLUECUBES_CATCH_GENERATORS_IMPL_HPP_INCLUDED
 | 
					 | 
				
			||||||
@@ -19,9 +19,7 @@
 | 
				
			|||||||
#include "../catch_session.hpp"
 | 
					#include "../catch_session.hpp"
 | 
				
			||||||
#include "catch_registry_hub.hpp"
 | 
					#include "catch_registry_hub.hpp"
 | 
				
			||||||
#include "catch_notimplemented_exception.hpp"
 | 
					#include "catch_notimplemented_exception.hpp"
 | 
				
			||||||
#include "catch_context_impl.hpp"
 | 
					 | 
				
			||||||
#include "catch_console_colour_impl.hpp"
 | 
					#include "catch_console_colour_impl.hpp"
 | 
				
			||||||
#include "catch_generators_impl.hpp"
 | 
					 | 
				
			||||||
#include "catch_assertionresult.hpp"
 | 
					#include "catch_assertionresult.hpp"
 | 
				
			||||||
#include "catch_test_case_info.hpp"
 | 
					#include "catch_test_case_info.hpp"
 | 
				
			||||||
#include "catch_test_spec.hpp"
 | 
					#include "catch_test_spec.hpp"
 | 
				
			||||||
@@ -36,6 +34,7 @@
 | 
				
			|||||||
#include "catch_result_builder.hpp"
 | 
					#include "catch_result_builder.hpp"
 | 
				
			||||||
#include "catch_tag_alias_registry.hpp"
 | 
					#include "catch_tag_alias_registry.hpp"
 | 
				
			||||||
#include "catch_test_case_tracker.hpp"
 | 
					#include "catch_test_case_tracker.hpp"
 | 
				
			||||||
 | 
					#include "catch_stream.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "../reporters/catch_reporter_multi.hpp"
 | 
					#include "../reporters/catch_reporter_multi.hpp"
 | 
				
			||||||
#include "../reporters/catch_reporter_xml.hpp"
 | 
					#include "../reporters/catch_reporter_xml.hpp"
 | 
				
			||||||
@@ -53,8 +52,7 @@ namespace Catch {
 | 
				
			|||||||
    CoutStream::~CoutStream() CATCH_NOEXCEPT {}
 | 
					    CoutStream::~CoutStream() CATCH_NOEXCEPT {}
 | 
				
			||||||
    DebugOutStream::~DebugOutStream() CATCH_NOEXCEPT {}
 | 
					    DebugOutStream::~DebugOutStream() CATCH_NOEXCEPT {}
 | 
				
			||||||
    StreamBufBase::~StreamBufBase() CATCH_NOEXCEPT {}
 | 
					    StreamBufBase::~StreamBufBase() CATCH_NOEXCEPT {}
 | 
				
			||||||
    IContext::~IContext() {}
 | 
					    IRunContext::~IRunContext() {}
 | 
				
			||||||
    IResultCapture::~IResultCapture() {}
 | 
					 | 
				
			||||||
    ITestCase::~ITestCase() {}
 | 
					    ITestCase::~ITestCase() {}
 | 
				
			||||||
    ITestCaseRegistry::~ITestCaseRegistry() {}
 | 
					    ITestCaseRegistry::~ITestCaseRegistry() {}
 | 
				
			||||||
    IRegistryHub::~IRegistryHub() {}
 | 
					    IRegistryHub::~IRegistryHub() {}
 | 
				
			||||||
@@ -76,15 +74,11 @@ namespace Catch {
 | 
				
			|||||||
    StreamingReporterBase::~StreamingReporterBase() {}
 | 
					    StreamingReporterBase::~StreamingReporterBase() {}
 | 
				
			||||||
    ConsoleReporter::~ConsoleReporter() {}
 | 
					    ConsoleReporter::~ConsoleReporter() {}
 | 
				
			||||||
    CompactReporter::~CompactReporter() {}
 | 
					    CompactReporter::~CompactReporter() {}
 | 
				
			||||||
    IRunner::~IRunner() {}
 | 
					 | 
				
			||||||
    IMutableContext::~IMutableContext() {}
 | 
					 | 
				
			||||||
    IConfig::~IConfig() {}
 | 
					    IConfig::~IConfig() {}
 | 
				
			||||||
    XmlReporter::~XmlReporter() {}
 | 
					    XmlReporter::~XmlReporter() {}
 | 
				
			||||||
    JunitReporter::~JunitReporter() {}
 | 
					    JunitReporter::~JunitReporter() {}
 | 
				
			||||||
    TestRegistry::~TestRegistry() {}
 | 
					    TestRegistry::~TestRegistry() {}
 | 
				
			||||||
    FreeFunctionTestCase::~FreeFunctionTestCase() {}
 | 
					    FreeFunctionTestCase::~FreeFunctionTestCase() {}
 | 
				
			||||||
    IGeneratorInfo::~IGeneratorInfo() {}
 | 
					 | 
				
			||||||
    IGeneratorsForTest::~IGeneratorsForTest() {}
 | 
					 | 
				
			||||||
    WildcardPattern::~WildcardPattern() {}
 | 
					    WildcardPattern::~WildcardPattern() {}
 | 
				
			||||||
    TestSpec::Pattern::~Pattern() {}
 | 
					    TestSpec::Pattern::~Pattern() {}
 | 
				
			||||||
    TestSpec::NamePattern::~NamePattern() {}
 | 
					    TestSpec::NamePattern::~NamePattern() {}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -16,32 +16,42 @@ namespace Catch {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    class TestCase;
 | 
					    class TestCase;
 | 
				
			||||||
    class AssertionResult;
 | 
					    class AssertionResult;
 | 
				
			||||||
 | 
					    class ScopedMessageBuilder;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    struct AssertionInfo;
 | 
					    struct AssertionInfo;
 | 
				
			||||||
    struct SectionInfo;
 | 
					    struct SectionInfo;
 | 
				
			||||||
    struct SectionEndInfo;
 | 
					    struct SectionEndInfo;
 | 
				
			||||||
    struct MessageInfo;
 | 
					    struct MessageInfo;
 | 
				
			||||||
    class ScopedMessageBuilder;
 | 
					 | 
				
			||||||
    struct Counts;
 | 
					    struct Counts;
 | 
				
			||||||
 | 
					    struct IConfig;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    struct IResultCapture {
 | 
					    struct IRunContext {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        virtual ~IResultCapture();
 | 
					        virtual ~IRunContext();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        virtual void assertionEnded( AssertionResult const& result ) = 0;
 | 
					        virtual void assertionEnded( AssertionResult const& result ) = 0;
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
        virtual bool sectionStarted(    SectionInfo const& sectionInfo,
 | 
					        virtual bool sectionStarted(    SectionInfo const& sectionInfo,
 | 
				
			||||||
                                        Counts& assertions ) = 0;
 | 
					                                        Counts& assertions ) = 0;
 | 
				
			||||||
        virtual void sectionEnded( SectionEndInfo const& endInfo ) = 0;
 | 
					        virtual void sectionEnded( SectionEndInfo const& endInfo ) = 0;
 | 
				
			||||||
        virtual void sectionEndedEarly( SectionEndInfo const& endInfo ) = 0;
 | 
					        virtual void sectionEndedEarly( SectionEndInfo const& endInfo ) = 0;
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
        virtual void pushScopedMessage( MessageInfo const& message ) = 0;
 | 
					        virtual void pushScopedMessage( MessageInfo const& message ) = 0;
 | 
				
			||||||
        virtual void popScopedMessage( MessageInfo const& message ) = 0;
 | 
					        virtual void popScopedMessage( MessageInfo const& message ) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        virtual std::string getCurrentTestName() const = 0;
 | 
					 | 
				
			||||||
        virtual const AssertionResult* getLastResult() const = 0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        virtual void handleFatalErrorCondition( std::string const& message ) = 0;
 | 
					        virtual void handleFatalErrorCondition( std::string const& message ) = 0;
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        virtual std::string getCurrentTestName() const = 0;
 | 
				
			||||||
 | 
					        virtual AssertionResult const* getLastResult() const = 0;
 | 
				
			||||||
 | 
					        virtual bool isAborting() const = 0;
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        virtual IConfig const& config() const = 0;
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    IResultCapture& getResultCapture();
 | 
					    IRunContext* tryGetCurrentRunContext();
 | 
				
			||||||
 | 
					    IRunContext& getCurrentRunContext();
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    IConfig const* getCurrentConfig();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif // TWOBLUECUBES_CATCH_INTERFACES_CAPTURE_H_INCLUDED
 | 
					#endif // TWOBLUECUBES_CATCH_INTERFACES_CAPTURE_H_INCLUDED
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -66,9 +66,11 @@ namespace Catch {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
///////////////////////////////////////////////////////////////////////////////
 | 
					///////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
#define INTERNAL_CATCH_TRANSLATE_EXCEPTION( signature ) \
 | 
					#define INTERNAL_CATCH_TRANSLATE_EXCEPTION2( translatorName, signature ) \
 | 
				
			||||||
    static std::string INTERNAL_CATCH_UNIQUE_NAME( catch_internal_ExceptionTranslator )( signature ); \
 | 
					    static std::string translatorName( signature ); \
 | 
				
			||||||
    namespace{ Catch::ExceptionTranslatorRegistrar INTERNAL_CATCH_UNIQUE_NAME( catch_internal_ExceptionRegistrar )( &INTERNAL_CATCH_UNIQUE_NAME( catch_internal_ExceptionTranslator ) ); }\
 | 
					    namespace{ Catch::ExceptionTranslatorRegistrar INTERNAL_CATCH_UNIQUE_NAME( catch_internal_ExceptionRegistrar )( &translatorName ); }\
 | 
				
			||||||
    static std::string INTERNAL_CATCH_UNIQUE_NAME(  catch_internal_ExceptionTranslator )( signature )
 | 
					    static std::string translatorName( signature )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define INTERNAL_CATCH_TRANSLATE_EXCEPTION( signature ) INTERNAL_CATCH_TRANSLATE_EXCEPTION2( INTERNAL_CATCH_UNIQUE_NAME( catch_internal_ExceptionTranslator ), signature )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif // TWOBLUECUBES_CATCH_INTERFACES_EXCEPTION_H_INCLUDED
 | 
					#endif // TWOBLUECUBES_CATCH_INTERFACES_EXCEPTION_H_INCLUDED
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,32 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 *  Created by Phil on 7/8/2012.
 | 
					 | 
				
			||||||
 *  Copyright 2011 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_INTERFACES_GENERATORS_H_INCLUDED
 | 
					 | 
				
			||||||
#define TWOBLUECUBES_CATCH_INTERFACES_GENERATORS_H_INCLUDED
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <string>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
namespace Catch {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    struct IGeneratorInfo {
 | 
					 | 
				
			||||||
        virtual ~IGeneratorInfo();
 | 
					 | 
				
			||||||
        virtual bool moveNext() = 0;
 | 
					 | 
				
			||||||
        virtual std::size_t getCurrentIndex() const = 0;
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    struct IGeneratorsForTest {
 | 
					 | 
				
			||||||
        virtual ~IGeneratorsForTest();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        virtual IGeneratorInfo& getGeneratorInfo( std::string const& fileInfo, std::size_t size ) = 0;
 | 
					 | 
				
			||||||
        virtual bool moveNext() = 0;
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    IGeneratorsForTest* createGeneratorsForTest();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
} // end namespace Catch
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif // TWOBLUECUBES_CATCH_INTERFACES_GENERATORS_H_INCLUDED
 | 
					 | 
				
			||||||
@@ -1,20 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 *  Created by Phil on 07/01/2011.
 | 
					 | 
				
			||||||
 *  Copyright 2011 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_INTERFACES_RUNNER_H_INCLUDED
 | 
					 | 
				
			||||||
#define TWOBLUECUBES_CATCH_INTERFACES_RUNNER_H_INCLUDED
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
namespace Catch {
 | 
					 | 
				
			||||||
    class TestCase;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    struct IRunner {
 | 
					 | 
				
			||||||
        virtual ~IRunner();
 | 
					 | 
				
			||||||
        virtual bool aborting() const = 0;
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif // TWOBLUECUBES_CATCH_INTERFACES_RUNNER_H_INCLUDED
 | 
					 | 
				
			||||||
@@ -14,6 +14,8 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
namespace Catch {
 | 
					namespace Catch {
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					    struct IRunContext;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    struct MessageInfo {
 | 
					    struct MessageInfo {
 | 
				
			||||||
        MessageInfo(    std::string const& _macroName,
 | 
					        MessageInfo(    std::string const& _macroName,
 | 
				
			||||||
                        SourceLineInfo const& _lineInfo,
 | 
					                        SourceLineInfo const& _lineInfo,
 | 
				
			||||||
@@ -58,6 +60,7 @@ namespace Catch {
 | 
				
			|||||||
        ScopedMessage( ScopedMessage const& other );
 | 
					        ScopedMessage( ScopedMessage const& other );
 | 
				
			||||||
        ~ScopedMessage();
 | 
					        ~ScopedMessage();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        IRunContext& m_runContext;
 | 
				
			||||||
        MessageInfo m_info;
 | 
					        MessageInfo m_info;
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,17 +28,19 @@ namespace Catch {
 | 
				
			|||||||
    ////////////////////////////////////////////////////////////////////////////
 | 
					    ////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ScopedMessage::ScopedMessage( MessageBuilder const& builder )
 | 
					    ScopedMessage::ScopedMessage( MessageBuilder const& builder )
 | 
				
			||||||
    : m_info( builder.m_info )
 | 
					    :   m_info( builder.m_info ),
 | 
				
			||||||
 | 
					        m_runContext( getCurrentRunContext() )
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        m_info.message = builder.m_stream.str();
 | 
					        m_info.message = builder.m_stream.str();
 | 
				
			||||||
        getResultCapture().pushScopedMessage( m_info );
 | 
					        m_runContext.pushScopedMessage( m_info );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    ScopedMessage::ScopedMessage( ScopedMessage const& other )
 | 
					    ScopedMessage::ScopedMessage( ScopedMessage const& other )
 | 
				
			||||||
    : m_info( other.m_info )
 | 
					    :   m_info( other.m_info ),
 | 
				
			||||||
 | 
					        m_runContext( other.m_runContext )
 | 
				
			||||||
    {}
 | 
					    {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ScopedMessage::~ScopedMessage() {
 | 
					    ScopedMessage::~ScopedMessage() {
 | 
				
			||||||
        getResultCapture().popScopedMessage( m_info );
 | 
					        m_runContext.popScopedMessage( m_info );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -74,7 +74,6 @@ namespace Catch {
 | 
				
			|||||||
    void cleanUp() {
 | 
					    void cleanUp() {
 | 
				
			||||||
        delete getTheRegistryHub();
 | 
					        delete getTheRegistryHub();
 | 
				
			||||||
        getTheRegistryHub() = CATCH_NULL;
 | 
					        getTheRegistryHub() = CATCH_NULL;
 | 
				
			||||||
        cleanUpContext();
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    std::string translateActiveException() {
 | 
					    std::string translateActiveException() {
 | 
				
			||||||
        return getRegistryHub().getExceptionTranslatorRegistry().translateActiveException();
 | 
					        return getRegistryHub().getExceptionTranslatorRegistry().translateActiveException();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,6 +15,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
namespace Catch {
 | 
					namespace Catch {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    struct IRunContext;
 | 
				
			||||||
    struct TestFailureException{};
 | 
					    struct TestFailureException{};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    template<typename T> class ExpressionLhs;
 | 
					    template<typename T> class ExpressionLhs;
 | 
				
			||||||
@@ -77,6 +78,7 @@ namespace Catch {
 | 
				
			|||||||
        bool allowThrows() const;
 | 
					        bool allowThrows() const;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private:
 | 
					    private:
 | 
				
			||||||
 | 
					        IRunContext& m_runContext;
 | 
				
			||||||
        AssertionInfo m_assertionInfo;
 | 
					        AssertionInfo m_assertionInfo;
 | 
				
			||||||
        AssertionResultData m_data;
 | 
					        AssertionResultData m_data;
 | 
				
			||||||
        struct ExprComponents {
 | 
					        struct ExprComponents {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,9 +9,7 @@
 | 
				
			|||||||
#define TWOBLUECUBES_CATCH_RESULT_BUILDER_HPP_INCLUDED
 | 
					#define TWOBLUECUBES_CATCH_RESULT_BUILDER_HPP_INCLUDED
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "catch_result_builder.h"
 | 
					#include "catch_result_builder.h"
 | 
				
			||||||
#include "catch_context.h"
 | 
					 | 
				
			||||||
#include "catch_interfaces_config.h"
 | 
					#include "catch_interfaces_config.h"
 | 
				
			||||||
#include "catch_interfaces_runner.h"
 | 
					 | 
				
			||||||
#include "catch_interfaces_capture.h"
 | 
					#include "catch_interfaces_capture.h"
 | 
				
			||||||
#include "catch_interfaces_registry_hub.h"
 | 
					#include "catch_interfaces_registry_hub.h"
 | 
				
			||||||
#include "catch_wildcard_pattern.hpp"
 | 
					#include "catch_wildcard_pattern.hpp"
 | 
				
			||||||
@@ -28,7 +26,8 @@ namespace Catch {
 | 
				
			|||||||
                                    char const* capturedExpression,
 | 
					                                    char const* capturedExpression,
 | 
				
			||||||
                                    ResultDisposition::Flags resultDisposition,
 | 
					                                    ResultDisposition::Flags resultDisposition,
 | 
				
			||||||
                                    char const* secondArg )
 | 
					                                    char const* secondArg )
 | 
				
			||||||
    :   m_assertionInfo( macroName, lineInfo, capturedExpressionWithSecondArgument( capturedExpression, secondArg ), resultDisposition ),
 | 
					    :   m_runContext( getCurrentRunContext() ),
 | 
				
			||||||
 | 
					        m_assertionInfo( macroName, lineInfo, capturedExpressionWithSecondArgument( capturedExpression, secondArg ), resultDisposition ),
 | 
				
			||||||
        m_shouldDebugBreak( false ),
 | 
					        m_shouldDebugBreak( false ),
 | 
				
			||||||
        m_shouldThrow( false )
 | 
					        m_shouldThrow( false )
 | 
				
			||||||
    {}
 | 
					    {}
 | 
				
			||||||
@@ -98,12 +97,12 @@ namespace Catch {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    void ResultBuilder::handleResult( AssertionResult const& result )
 | 
					    void ResultBuilder::handleResult( AssertionResult const& result )
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        getResultCapture().assertionEnded( result );
 | 
					        m_runContext.assertionEnded( result );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if( !result.isOk() ) {
 | 
					        if( !result.isOk() ) {
 | 
				
			||||||
            if( getCurrentContext().getConfig()->shouldDebugBreak() )
 | 
					            if( m_runContext.config().shouldDebugBreak() )
 | 
				
			||||||
                m_shouldDebugBreak = true;
 | 
					                m_shouldDebugBreak = true;
 | 
				
			||||||
            if( getCurrentContext().getRunner()->aborting() || (m_assertionInfo.resultDisposition & ResultDisposition::Normal) )
 | 
					            if( m_runContext.isAborting() || (m_assertionInfo.resultDisposition & ResultDisposition::Normal) )
 | 
				
			||||||
                m_shouldThrow = true;
 | 
					                m_shouldThrow = true;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -113,7 +112,7 @@ namespace Catch {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    bool ResultBuilder::shouldDebugBreak() const { return m_shouldDebugBreak; }
 | 
					    bool ResultBuilder::shouldDebugBreak() const { return m_shouldDebugBreak; }
 | 
				
			||||||
    bool ResultBuilder::allowThrows() const { return getCurrentContext().getConfig()->allowThrows(); }
 | 
					    bool ResultBuilder::allowThrows() const { return m_runContext.config().allowThrows(); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    AssertionResult ResultBuilder::build() const
 | 
					    AssertionResult ResultBuilder::build() const
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,7 +8,7 @@
 | 
				
			|||||||
#ifndef TWOBLUECUBES_CATCH_RUNNER_IMPL_HPP_INCLUDED
 | 
					#ifndef TWOBLUECUBES_CATCH_RUNNER_IMPL_HPP_INCLUDED
 | 
				
			||||||
#define TWOBLUECUBES_CATCH_RUNNER_IMPL_HPP_INCLUDED
 | 
					#define TWOBLUECUBES_CATCH_RUNNER_IMPL_HPP_INCLUDED
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "catch_interfaces_runner.h"
 | 
					#include "catch_interfaces_capture.h"
 | 
				
			||||||
#include "catch_interfaces_reporter.h"
 | 
					#include "catch_interfaces_reporter.h"
 | 
				
			||||||
#include "catch_interfaces_exception.h"
 | 
					#include "catch_interfaces_exception.h"
 | 
				
			||||||
#include "catch_config.hpp"
 | 
					#include "catch_config.hpp"
 | 
				
			||||||
@@ -52,7 +52,34 @@ namespace Catch {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    ///////////////////////////////////////////////////////////////////////////
 | 
					    ///////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    class RunContext : public IResultCapture, public IRunner {
 | 
					    namespace {
 | 
				
			||||||
 | 
					        IRunContext* s_currentRunContext = CATCH_NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        void setCurrentRunContext( IRunContext* context ) {
 | 
				
			||||||
 | 
					            s_currentRunContext = context;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    IRunContext* tryGetCurrentRunContext() {
 | 
				
			||||||
 | 
					        return s_currentRunContext;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    IRunContext& getCurrentRunContext() {
 | 
				
			||||||
 | 
					        if( IRunContext* capture = tryGetCurrentRunContext() )
 | 
				
			||||||
 | 
					            return *capture;
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					            throw std::logic_error( "No current test runner" );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    IConfig const* getCurrentConfig() {
 | 
				
			||||||
 | 
					        if( IRunContext* capture = tryGetCurrentRunContext() )
 | 
				
			||||||
 | 
					            return &capture->config();
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					            return CATCH_NULL;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    AssertionResult const* getLastResult() {
 | 
				
			||||||
 | 
					        return getCurrentRunContext().getLastResult();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    class RunContext : public IRunContext {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        RunContext( RunContext const& );
 | 
					        RunContext( RunContext const& );
 | 
				
			||||||
        void operator =( RunContext const& );
 | 
					        void operator =( RunContext const& );
 | 
				
			||||||
@@ -61,81 +88,66 @@ namespace Catch {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        explicit RunContext( Ptr<IConfig const> const& _config, Ptr<IStreamingReporter> const& reporter )
 | 
					        explicit RunContext( Ptr<IConfig const> const& _config, Ptr<IStreamingReporter> const& reporter )
 | 
				
			||||||
        :   m_runInfo( _config->name() ),
 | 
					        :   m_runInfo( _config->name() ),
 | 
				
			||||||
            m_context( getCurrentMutableContext() ),
 | 
					 | 
				
			||||||
            m_activeTestCase( CATCH_NULL ),
 | 
					 | 
				
			||||||
            m_config( _config ),
 | 
					            m_config( _config ),
 | 
				
			||||||
            m_reporter( reporter )
 | 
					            m_reporter( reporter ),
 | 
				
			||||||
 | 
					            m_activeTestCaseInfo( CATCH_NULL )
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            m_context.setRunner( this );
 | 
					            setCurrentRunContext( this );
 | 
				
			||||||
            m_context.setConfig( m_config );
 | 
					 | 
				
			||||||
            m_context.setResultCapture( this );
 | 
					 | 
				
			||||||
            m_reporter->testRunStarting( m_runInfo );
 | 
					            m_reporter->testRunStarting( m_runInfo );
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        virtual ~RunContext() {
 | 
					        virtual ~RunContext() {
 | 
				
			||||||
            m_reporter->testRunEnded( TestRunStats( m_runInfo, m_totals, aborting() ) );
 | 
					            m_reporter->testRunEnded( TestRunStats( m_runInfo, m_totals, isAborting() ) );
 | 
				
			||||||
 | 
					            setCurrentRunContext( CATCH_NULL );
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        void testGroupStarting( std::string const& testSpec, std::size_t groupIndex, std::size_t groupsCount ) {
 | 
					        void testGroupStarting( std::string const& testSpec, std::size_t groupIndex, std::size_t groupsCount ) {
 | 
				
			||||||
            m_reporter->testGroupStarting( GroupInfo( testSpec, groupIndex, groupsCount ) );
 | 
					            m_reporter->testGroupStarting( GroupInfo( testSpec, groupIndex, groupsCount ) );
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        void testGroupEnded( std::string const& testSpec, Totals const& totals, std::size_t groupIndex, std::size_t groupsCount ) {
 | 
					        void testGroupEnded( std::string const& testSpec, Totals const& totals, std::size_t groupIndex, std::size_t groupsCount ) {
 | 
				
			||||||
            m_reporter->testGroupEnded( TestGroupStats( GroupInfo( testSpec, groupIndex, groupsCount ), totals, aborting() ) );
 | 
					            m_reporter->testGroupEnded( TestGroupStats( GroupInfo( testSpec, groupIndex, groupsCount ), totals, isAborting() ) );
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Totals runTest( TestCase const& testCase ) {
 | 
					        Totals runTest( TestCase const& testCase ) {
 | 
				
			||||||
 | 
					            m_activeTestCaseInfo = &testCase;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            Totals prevTotals = m_totals;
 | 
					            Totals prevTotals = m_totals;
 | 
				
			||||||
 | 
					            std::string redirectedCout, redirectedCerr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            std::string redirectedCout;
 | 
					            m_reporter->testCaseStarting( testCase );
 | 
				
			||||||
            std::string redirectedCerr;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
            TestCaseInfo testInfo = testCase.getTestCaseInfo();
 | 
					            ITracker* m_testCaseTracker;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            m_reporter->testCaseStarting( testInfo );
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            m_activeTestCase = &testCase;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            do {
 | 
					 | 
				
			||||||
            m_trackerContext.startRun();
 | 
					            m_trackerContext.startRun();
 | 
				
			||||||
            do {
 | 
					            do {
 | 
				
			||||||
                m_trackerContext.startCycle();
 | 
					                m_trackerContext.startCycle();
 | 
				
			||||||
                    m_testCaseTracker = &SectionTracker::acquire( m_trackerContext, testInfo.name );
 | 
					                m_testCaseTracker = &SectionTracker::acquire( m_trackerContext, testCase.name );
 | 
				
			||||||
                    runCurrentTest( redirectedCout, redirectedCerr );
 | 
					                runTest( testCase, redirectedCout, redirectedCerr );
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
                while( !m_testCaseTracker->isSuccessfullyCompleted() && !aborting() );
 | 
					            while( !m_testCaseTracker->isSuccessfullyCompleted() && !isAborting() );
 | 
				
			||||||
            }
 | 
					
 | 
				
			||||||
            // !TBD: deprecated - this will be replaced by indexed trackers
 | 
					 | 
				
			||||||
            while( getCurrentContext().advanceGeneratorsForCurrentTest() && !aborting() );
 | 
					 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Totals deltaTotals = m_totals.delta( prevTotals );
 | 
					            Totals deltaTotals = m_totals.delta( prevTotals );
 | 
				
			||||||
            m_totals.testCases += deltaTotals.testCases;
 | 
					            m_totals.testCases += deltaTotals.testCases;
 | 
				
			||||||
            m_reporter->testCaseEnded( TestCaseStats(   testInfo,
 | 
					            m_reporter->testCaseEnded( TestCaseStats(   testCase,
 | 
				
			||||||
                                                        deltaTotals,
 | 
					                                                        deltaTotals,
 | 
				
			||||||
                                                        redirectedCout,
 | 
					                                                        redirectedCout,
 | 
				
			||||||
                                                        redirectedCerr,
 | 
					                                                        redirectedCerr,
 | 
				
			||||||
                                                        aborting() ) );
 | 
					                                                        isAborting() ) );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            m_activeTestCase = CATCH_NULL;
 | 
					            m_activeTestCaseInfo = CATCH_NULL;
 | 
				
			||||||
            m_testCaseTracker = CATCH_NULL;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
            return deltaTotals;
 | 
					            return deltaTotals;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Ptr<IConfig const> config() const {
 | 
					    private: // IRunContext
 | 
				
			||||||
            return m_config;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    private: // IResultCapture
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        virtual void assertionEnded( AssertionResult const& result ) {
 | 
					        virtual void assertionEnded( AssertionResult const& result ) CATCH_OVERRIDE {
 | 
				
			||||||
            if( result.getResultType() == ResultWas::Ok ) {
 | 
					            if( result.getResultType() == ResultWas::Ok )
 | 
				
			||||||
                m_totals.assertions.passed++;
 | 
					                m_totals.assertions.passed++;
 | 
				
			||||||
            }
 | 
					            else if( !result.isOk() )
 | 
				
			||||||
            else if( !result.isOk() ) {
 | 
					 | 
				
			||||||
                m_totals.assertions.failed++;
 | 
					                m_totals.assertions.failed++;
 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if( m_reporter->assertionEnded( AssertionStats( result, m_messages, m_totals ) ) )
 | 
					            if( m_reporter->assertionEnded( AssertionStats( result, m_messages, m_totals ) ) )
 | 
				
			||||||
                m_messages.clear();
 | 
					                m_messages.clear();
 | 
				
			||||||
@@ -145,10 +157,9 @@ namespace Catch {
 | 
				
			|||||||
            m_lastResult = result;
 | 
					            m_lastResult = result;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        virtual bool sectionStarted (
 | 
					        virtual bool sectionStarted
 | 
				
			||||||
            SectionInfo const& sectionInfo,
 | 
					            (   SectionInfo const& sectionInfo,
 | 
				
			||||||
            Counts& assertions
 | 
					                Counts& assertions ) CATCH_OVERRIDE
 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            std::ostringstream oss;
 | 
					            std::ostringstream oss;
 | 
				
			||||||
            oss << sectionInfo.name << "@" << sectionInfo.lineInfo;
 | 
					            oss << sectionInfo.name << "@" << sectionInfo.lineInfo;
 | 
				
			||||||
@@ -178,7 +189,7 @@ namespace Catch {
 | 
				
			|||||||
            return true;
 | 
					            return true;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        virtual void sectionEnded( SectionEndInfo const& endInfo ) {
 | 
					        virtual void sectionEnded( SectionEndInfo const& endInfo ) CATCH_OVERRIDE {
 | 
				
			||||||
            Counts assertions = m_totals.assertions - endInfo.prevAssertions;
 | 
					            Counts assertions = m_totals.assertions - endInfo.prevAssertions;
 | 
				
			||||||
            bool missingAssertions = testForMissingAssertions( assertions );
 | 
					            bool missingAssertions = testForMissingAssertions( assertions );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -191,7 +202,7 @@ namespace Catch {
 | 
				
			|||||||
            m_messages.clear();
 | 
					            m_messages.clear();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        virtual void sectionEndedEarly( SectionEndInfo const& endInfo ) {
 | 
					        virtual void sectionEndedEarly( SectionEndInfo const& endInfo ) CATCH_OVERRIDE {
 | 
				
			||||||
            if( m_unfinishedSections.empty() )
 | 
					            if( m_unfinishedSections.empty() )
 | 
				
			||||||
                m_activeSections.back()->fail();
 | 
					                m_activeSections.back()->fail();
 | 
				
			||||||
            else
 | 
					            else
 | 
				
			||||||
@@ -201,25 +212,28 @@ namespace Catch {
 | 
				
			|||||||
            m_unfinishedSections.push_back( endInfo );
 | 
					            m_unfinishedSections.push_back( endInfo );
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        virtual void pushScopedMessage( MessageInfo const& message ) {
 | 
					        virtual void pushScopedMessage( MessageInfo const& message ) CATCH_OVERRIDE {
 | 
				
			||||||
            m_messages.push_back( message );
 | 
					            m_messages.push_back( message );
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        virtual void popScopedMessage( MessageInfo const& message ) {
 | 
					        virtual void popScopedMessage( MessageInfo const& message ) CATCH_OVERRIDE {
 | 
				
			||||||
            m_messages.erase( std::remove( m_messages.begin(), m_messages.end(), message ), m_messages.end() );
 | 
					            m_messages.erase( std::remove( m_messages.begin(), m_messages.end(), message ), m_messages.end() );
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        virtual std::string getCurrentTestName() const {
 | 
					        virtual std::string getCurrentTestName() const CATCH_OVERRIDE {
 | 
				
			||||||
            return m_activeTestCase
 | 
					            return m_activeTestCaseInfo
 | 
				
			||||||
                ? m_activeTestCase->getTestCaseInfo().name
 | 
					                ? m_activeTestCaseInfo->name
 | 
				
			||||||
                : "";
 | 
					                : "";
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        virtual const AssertionResult* getLastResult() const {
 | 
					        virtual AssertionResult const* getLastResult() const CATCH_OVERRIDE {
 | 
				
			||||||
            return &m_lastResult;
 | 
					            return &m_lastResult;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        virtual IConfig const& config() const CATCH_OVERRIDE {
 | 
				
			||||||
 | 
					            return *m_config;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        virtual void handleFatalErrorCondition( std::string const& message ) {
 | 
					        virtual void handleFatalErrorCondition( std::string const& message ) CATCH_OVERRIDE {
 | 
				
			||||||
            ResultBuilder resultBuilder = makeUnexpectedResultBuilder();
 | 
					            ResultBuilder resultBuilder = makeUnexpectedResultBuilder();
 | 
				
			||||||
            resultBuilder.setResultType( ResultWas::FatalErrorCondition );
 | 
					            resultBuilder.setResultType( ResultWas::FatalErrorCondition );
 | 
				
			||||||
            resultBuilder << message;
 | 
					            resultBuilder << message;
 | 
				
			||||||
@@ -228,19 +242,19 @@ namespace Catch {
 | 
				
			|||||||
            handleUnfinishedSections();
 | 
					            handleUnfinishedSections();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // Recreate section for test case (as we will lose the one that was in scope)
 | 
					            // Recreate section for test case (as we will lose the one that was in scope)
 | 
				
			||||||
            TestCaseInfo const& testCaseInfo = m_activeTestCase->getTestCaseInfo();
 | 
					            SectionInfo testCaseSection
 | 
				
			||||||
            SectionInfo testCaseSection( testCaseInfo.lineInfo, testCaseInfo.name, testCaseInfo.description );
 | 
					                (   m_activeTestCaseInfo->lineInfo,
 | 
				
			||||||
 | 
					                    m_activeTestCaseInfo->name,
 | 
				
			||||||
 | 
					                    m_activeTestCaseInfo->description );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            Counts assertions;
 | 
					            Counts assertions;
 | 
				
			||||||
            assertions.failed = 1;
 | 
					            assertions.failed = 1;
 | 
				
			||||||
            SectionStats testCaseSectionStats( testCaseSection, assertions, 0, false );
 | 
					            SectionStats testCaseSectionStats( testCaseSection, assertions, 0, false );
 | 
				
			||||||
            m_reporter->sectionEnded( testCaseSectionStats );
 | 
					            m_reporter->sectionEnded( testCaseSectionStats );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            TestCaseInfo testInfo = m_activeTestCase->getTestCaseInfo();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            Totals deltaTotals;
 | 
					            Totals deltaTotals;
 | 
				
			||||||
            deltaTotals.testCases.failed = 1;
 | 
					            deltaTotals.testCases.failed = 1;
 | 
				
			||||||
            m_reporter->testCaseEnded( TestCaseStats(   testInfo,
 | 
					            m_reporter->testCaseEnded( TestCaseStats(   *m_activeTestCaseInfo,
 | 
				
			||||||
                                                        deltaTotals,
 | 
					                                                        deltaTotals,
 | 
				
			||||||
                                                        "",
 | 
					                                                        "",
 | 
				
			||||||
                                                        "",
 | 
					                                                        "",
 | 
				
			||||||
@@ -252,20 +266,19 @@ namespace Catch {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    public:
 | 
					    public:
 | 
				
			||||||
        // !TBD We need to do this another way!
 | 
					        // !TBD We need to do this another way!
 | 
				
			||||||
        bool aborting() const {
 | 
					        bool isAborting() const {
 | 
				
			||||||
            return m_totals.assertions.failed == static_cast<std::size_t>( m_config->abortAfter() );
 | 
					            return m_totals.assertions.failed == static_cast<std::size_t>( m_config->abortAfter() );
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private:
 | 
					    private:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        void runCurrentTest( std::string& redirectedCout, std::string& redirectedCerr ) {
 | 
					        void runTest( TestCase const& testCase, std::string& redirectedCout, std::string& redirectedCerr ) {
 | 
				
			||||||
            TestCaseInfo const& testCaseInfo = m_activeTestCase->getTestCaseInfo();
 | 
					            SectionInfo testCaseSection( testCase.lineInfo, testCase.name, testCase.description );
 | 
				
			||||||
            SectionInfo testCaseSection( testCaseInfo.lineInfo, testCaseInfo.name, testCaseInfo.description );
 | 
					 | 
				
			||||||
            m_reporter->sectionStarting( testCaseSection );
 | 
					            m_reporter->sectionStarting( testCaseSection );
 | 
				
			||||||
            Counts prevAssertions = m_totals.assertions;
 | 
					            Counts prevAssertions = m_totals.assertions;
 | 
				
			||||||
            double duration = 0;
 | 
					            double duration = 0;
 | 
				
			||||||
            try {
 | 
					            try {
 | 
				
			||||||
                m_lastAssertionInfo = AssertionInfo( "TEST_CASE", testCaseInfo.lineInfo, "", ResultDisposition::Normal );
 | 
					                m_lastAssertionInfo = AssertionInfo( "TEST_CASE", testCase.lineInfo, "", ResultDisposition::Normal );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                seedRng( *m_config );
 | 
					                seedRng( *m_config );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -274,10 +287,10 @@ namespace Catch {
 | 
				
			|||||||
                if( m_reporter->getPreferences().shouldRedirectStdOut ) {
 | 
					                if( m_reporter->getPreferences().shouldRedirectStdOut ) {
 | 
				
			||||||
                    StreamRedirect coutRedir( Catch::cout(), redirectedCout );
 | 
					                    StreamRedirect coutRedir( Catch::cout(), redirectedCout );
 | 
				
			||||||
                    StreamRedirect cerrRedir( Catch::cerr(), redirectedCerr );
 | 
					                    StreamRedirect cerrRedir( Catch::cerr(), redirectedCerr );
 | 
				
			||||||
                    invokeActiveTestCase();
 | 
					                    invokeTestCase( testCase );
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                else {
 | 
					                else {
 | 
				
			||||||
                    invokeActiveTestCase();
 | 
					                    invokeTestCase( testCase );
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                duration = timer.getElapsedSeconds();
 | 
					                duration = timer.getElapsedSeconds();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@@ -287,14 +300,15 @@ namespace Catch {
 | 
				
			|||||||
            catch(...) {
 | 
					            catch(...) {
 | 
				
			||||||
                makeUnexpectedResultBuilder().useActiveException();
 | 
					                makeUnexpectedResultBuilder().useActiveException();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            m_testCaseTracker->close();
 | 
					            m_trackerContext.currentTracker().close();
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
            handleUnfinishedSections();
 | 
					            handleUnfinishedSections();
 | 
				
			||||||
            m_messages.clear();
 | 
					            m_messages.clear();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            Counts assertions = m_totals.assertions - prevAssertions;
 | 
					            Counts assertions = m_totals.assertions - prevAssertions;
 | 
				
			||||||
            bool missingAssertions = testForMissingAssertions( assertions );
 | 
					            bool missingAssertions = testForMissingAssertions( assertions );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if( testCaseInfo.okToFail() ) {
 | 
					            if( testCase.okToFail() ) {
 | 
				
			||||||
                std::swap( assertions.failedButOk, assertions.failed );
 | 
					                std::swap( assertions.failedButOk, assertions.failed );
 | 
				
			||||||
                m_totals.assertions.failed -= assertions.failedButOk;
 | 
					                m_totals.assertions.failed -= assertions.failedButOk;
 | 
				
			||||||
                m_totals.assertions.failedButOk += assertions.failedButOk;
 | 
					                m_totals.assertions.failedButOk += assertions.failedButOk;
 | 
				
			||||||
@@ -304,10 +318,9 @@ namespace Catch {
 | 
				
			|||||||
            m_reporter->sectionEnded( testCaseSectionStats );
 | 
					            m_reporter->sectionEnded( testCaseSectionStats );
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        void invokeActiveTestCase() {
 | 
					        static void invokeTestCase( TestCase const& testCase ) {
 | 
				
			||||||
            FatalConditionHandler fatalConditionHandler; // Handle signals
 | 
					            FatalConditionHandler fatalConditionHandler; // Handle signals
 | 
				
			||||||
            m_activeTestCase->invoke();
 | 
					            testCase.invoke();
 | 
				
			||||||
            fatalConditionHandler.reset();
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private:
 | 
					    private:
 | 
				
			||||||
@@ -331,29 +344,21 @@ namespace Catch {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        TestRunInfo m_runInfo;
 | 
					        TestRunInfo m_runInfo;
 | 
				
			||||||
        IMutableContext& m_context;
 | 
					 | 
				
			||||||
        TestCase const* m_activeTestCase;
 | 
					 | 
				
			||||||
        ITracker* m_testCaseTracker;
 | 
					 | 
				
			||||||
        ITracker* m_currentSectionTracker;
 | 
					 | 
				
			||||||
        AssertionResult m_lastResult;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Ptr<IConfig const> m_config;
 | 
					        Ptr<IConfig const> m_config;
 | 
				
			||||||
        Totals m_totals;
 | 
					 | 
				
			||||||
        Ptr<IStreamingReporter> m_reporter;
 | 
					        Ptr<IStreamingReporter> m_reporter;
 | 
				
			||||||
        std::vector<MessageInfo> m_messages;
 | 
					        TrackerContext m_trackerContext;
 | 
				
			||||||
 | 
					        Totals m_totals;
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        // Transient state
 | 
				
			||||||
 | 
					        TestCaseInfo const* m_activeTestCaseInfo;
 | 
				
			||||||
 | 
					        AssertionResult m_lastResult;
 | 
				
			||||||
        AssertionInfo m_lastAssertionInfo;
 | 
					        AssertionInfo m_lastAssertionInfo;
 | 
				
			||||||
        std::vector<SectionEndInfo> m_unfinishedSections;
 | 
					        std::vector<SectionEndInfo> m_unfinishedSections;
 | 
				
			||||||
        std::vector<ITracker*> m_activeSections;
 | 
					        std::vector<ITracker*> m_activeSections;
 | 
				
			||||||
        TrackerContext m_trackerContext;
 | 
					        std::vector<MessageInfo> m_messages;
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    IResultCapture& getResultCapture() {
 | 
					 | 
				
			||||||
        if( IResultCapture* capture = getCurrentContext().getResultCapture() )
 | 
					 | 
				
			||||||
            return *capture;
 | 
					 | 
				
			||||||
        else
 | 
					 | 
				
			||||||
            throw std::logic_error( "No result capture instance" );
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
} // end namespace Catch
 | 
					} // end namespace Catch
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif // TWOBLUECUBES_CATCH_RUNNER_IMPL_HPP_INCLUDED
 | 
					#endif // TWOBLUECUBES_CATCH_RUNNER_IMPL_HPP_INCLUDED
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -16,6 +16,8 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
namespace Catch {
 | 
					namespace Catch {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    struct IRunContext;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    class Section : NonCopyable {
 | 
					    class Section : NonCopyable {
 | 
				
			||||||
    public:
 | 
					    public:
 | 
				
			||||||
        Section( SectionInfo const& info );
 | 
					        Section( SectionInfo const& info );
 | 
				
			||||||
@@ -29,6 +31,7 @@ namespace Catch {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        std::string m_name;
 | 
					        std::string m_name;
 | 
				
			||||||
        Counts m_assertions;
 | 
					        Counts m_assertions;
 | 
				
			||||||
 | 
					        IRunContext& m_runContext;
 | 
				
			||||||
        bool m_sectionIncluded;
 | 
					        bool m_sectionIncluded;
 | 
				
			||||||
        Timer m_timer;
 | 
					        Timer m_timer;
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,7 +26,8 @@ namespace Catch {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    Section::Section( SectionInfo const& info )
 | 
					    Section::Section( SectionInfo const& info )
 | 
				
			||||||
    :   m_info( info ),
 | 
					    :   m_info( info ),
 | 
				
			||||||
        m_sectionIncluded( getResultCapture().sectionStarted( m_info, m_assertions ) )
 | 
					        m_runContext( getCurrentRunContext() ),
 | 
				
			||||||
 | 
					        m_sectionIncluded( m_runContext.sectionStarted( m_info, m_assertions ) )
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        m_timer.start();
 | 
					        m_timer.start();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -35,9 +36,9 @@ namespace Catch {
 | 
				
			|||||||
        if( m_sectionIncluded ) {
 | 
					        if( m_sectionIncluded ) {
 | 
				
			||||||
            SectionEndInfo endInfo( m_info, m_assertions, m_timer.getElapsedSeconds() );
 | 
					            SectionEndInfo endInfo( m_info, m_assertions, m_timer.getElapsedSeconds() );
 | 
				
			||||||
            if( std::uncaught_exception() )
 | 
					            if( std::uncaught_exception() )
 | 
				
			||||||
                getResultCapture().sectionEndedEarly( endInfo );
 | 
					                m_runContext.sectionEndedEarly( endInfo );
 | 
				
			||||||
            else
 | 
					            else
 | 
				
			||||||
                getResultCapture().sectionEnded( endInfo );
 | 
					                m_runContext.sectionEnded( endInfo );
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,6 +15,7 @@
 | 
				
			|||||||
#include <streambuf>
 | 
					#include <streambuf>
 | 
				
			||||||
#include <ostream>
 | 
					#include <ostream>
 | 
				
			||||||
#include <fstream>
 | 
					#include <fstream>
 | 
				
			||||||
 | 
					#include <memory>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace Catch {
 | 
					namespace Catch {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -49,7 +50,7 @@ namespace Catch {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    class DebugOutStream : public IStream {
 | 
					    class DebugOutStream : public IStream {
 | 
				
			||||||
        std::auto_ptr<StreamBufBase> m_streamBuf;
 | 
					        CATCH_AUTO_PTR( StreamBufBase ) m_streamBuf;
 | 
				
			||||||
        mutable std::ostream m_os;
 | 
					        mutable std::ostream m_os;
 | 
				
			||||||
    public:
 | 
					    public:
 | 
				
			||||||
        DebugOutStream();
 | 
					        DebugOutStream();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,7 +11,6 @@
 | 
				
			|||||||
#include "catch_test_registry.hpp"
 | 
					#include "catch_test_registry.hpp"
 | 
				
			||||||
#include "catch_test_case_info.h"
 | 
					#include "catch_test_case_info.h"
 | 
				
			||||||
#include "catch_test_spec.hpp"
 | 
					#include "catch_test_spec.hpp"
 | 
				
			||||||
#include "catch_context.h"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <vector>
 | 
					#include <vector>
 | 
				
			||||||
#include <set>
 | 
					#include <set>
 | 
				
			||||||
@@ -87,7 +86,10 @@ namespace Catch {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    class TestRegistry : public ITestCaseRegistry {
 | 
					    class TestRegistry : public ITestCaseRegistry {
 | 
				
			||||||
    public:
 | 
					    public:
 | 
				
			||||||
        TestRegistry() : m_unnamedCount( 0 ) {}
 | 
					        TestRegistry()
 | 
				
			||||||
 | 
					        :   m_currentSortOrder( RunTests::InDeclarationOrder ),
 | 
				
			||||||
 | 
					            m_unnamedCount( 0 )        
 | 
				
			||||||
 | 
					        {}
 | 
				
			||||||
        virtual ~TestRegistry();
 | 
					        virtual ~TestRegistry();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        virtual void registerTest( TestCase const& testCase ) {
 | 
					        virtual void registerTest( TestCase const& testCase ) {
 | 
				
			||||||
@@ -152,28 +154,37 @@ namespace Catch {
 | 
				
			|||||||
        return className;
 | 
					        return className;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ///////////////////////////////////////////////////////////////////////////
 | 
					    void registerTestCase
 | 
				
			||||||
 | 
					        (   ITestCase* testCase,
 | 
				
			||||||
    AutoReg::AutoReg(   TestFunction function,
 | 
					 | 
				
			||||||
                        SourceLineInfo const& lineInfo,
 | 
					 | 
				
			||||||
                        NameAndDesc const& nameAndDesc ) {
 | 
					 | 
				
			||||||
        registerTestCase( new FreeFunctionTestCase( function ), "", nameAndDesc, lineInfo );
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    AutoReg::~AutoReg() {}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    void AutoReg::registerTestCase( ITestCase* testCase,
 | 
					 | 
				
			||||||
            char const* classOrQualifiedMethodName,
 | 
					            char const* classOrQualifiedMethodName,
 | 
				
			||||||
            NameAndDesc const& nameAndDesc,
 | 
					            NameAndDesc const& nameAndDesc,
 | 
				
			||||||
            SourceLineInfo const& lineInfo ) {
 | 
					            SourceLineInfo const& lineInfo ) {
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        getMutableRegistryHub().registerTest
 | 
					        getMutableRegistryHub().registerTest
 | 
				
			||||||
            ( makeTestCase( testCase,
 | 
					            ( makeTestCase
 | 
				
			||||||
 | 
					                (   testCase,
 | 
				
			||||||
                    extractClassName( classOrQualifiedMethodName ),
 | 
					                    extractClassName( classOrQualifiedMethodName ),
 | 
				
			||||||
                    nameAndDesc.name,
 | 
					                    nameAndDesc.name,
 | 
				
			||||||
                    nameAndDesc.description,
 | 
					                    nameAndDesc.description,
 | 
				
			||||||
                    lineInfo ) );
 | 
					                    lineInfo ) );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    void registerTestCaseFunction
 | 
				
			||||||
 | 
					        (   TestFunction function,
 | 
				
			||||||
 | 
					            SourceLineInfo const& lineInfo,
 | 
				
			||||||
 | 
					            NameAndDesc const& nameAndDesc ) {
 | 
				
			||||||
 | 
					        registerTestCase( new FreeFunctionTestCase( function ), "", nameAndDesc, lineInfo );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    ///////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    AutoReg::AutoReg
 | 
				
			||||||
 | 
					        (   TestFunction function,
 | 
				
			||||||
 | 
					            SourceLineInfo const& lineInfo,
 | 
				
			||||||
 | 
					            NameAndDesc const& nameAndDesc ) {
 | 
				
			||||||
 | 
					        registerTestCaseFunction( function, lineInfo, nameAndDesc );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    AutoReg::~AutoReg() {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
} // end namespace Catch
 | 
					} // end namespace Catch
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -42,28 +42,33 @@ struct NameAndDesc {
 | 
				
			|||||||
    const char* description;
 | 
					    const char* description;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void registerTestCase
 | 
				
			||||||
 | 
					    (   ITestCase* testCase,
 | 
				
			||||||
 | 
					        char const* className,
 | 
				
			||||||
 | 
					        NameAndDesc const& nameAndDesc,
 | 
				
			||||||
 | 
					        SourceLineInfo const& lineInfo );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct AutoReg {
 | 
					struct AutoReg {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    AutoReg(    TestFunction function,
 | 
					    AutoReg
 | 
				
			||||||
 | 
					        (   TestFunction function,
 | 
				
			||||||
            SourceLineInfo const& lineInfo,
 | 
					            SourceLineInfo const& lineInfo,
 | 
				
			||||||
            NameAndDesc const& nameAndDesc );
 | 
					            NameAndDesc const& nameAndDesc );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    template<typename C>
 | 
					    template<typename C>
 | 
				
			||||||
    AutoReg(    void (C::*method)(),
 | 
					    AutoReg
 | 
				
			||||||
 | 
					        (   void (C::*method)(),
 | 
				
			||||||
            char const* className,
 | 
					            char const* className,
 | 
				
			||||||
            NameAndDesc const& nameAndDesc,
 | 
					            NameAndDesc const& nameAndDesc,
 | 
				
			||||||
            SourceLineInfo const& lineInfo ) {
 | 
					            SourceLineInfo const& lineInfo ) {
 | 
				
			||||||
        registerTestCase(   new MethodTestCase<C>( method ),
 | 
					
 | 
				
			||||||
 | 
					        registerTestCase
 | 
				
			||||||
 | 
					            (   new MethodTestCase<C>( method ),
 | 
				
			||||||
                className,
 | 
					                className,
 | 
				
			||||||
                nameAndDesc,
 | 
					                nameAndDesc,
 | 
				
			||||||
                lineInfo );
 | 
					                lineInfo );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void registerTestCase(  ITestCase* testCase,
 | 
					 | 
				
			||||||
                            char const* className,
 | 
					 | 
				
			||||||
                            NameAndDesc const& nameAndDesc,
 | 
					 | 
				
			||||||
                            SourceLineInfo const& lineInfo );
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ~AutoReg();
 | 
					    ~AutoReg();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
@@ -71,50 +76,70 @@ private:
 | 
				
			|||||||
    void operator= ( AutoReg const& );
 | 
					    void operator= ( AutoReg const& );
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void registerTestCaseFunction
 | 
				
			||||||
 | 
					    (   TestFunction function,
 | 
				
			||||||
 | 
					        SourceLineInfo const& lineInfo,
 | 
				
			||||||
 | 
					        NameAndDesc const& nameAndDesc );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
} // end namespace Catch
 | 
					} // end namespace Catch
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CATCH_CONFIG_VARIADIC_MACROS
 | 
					#ifdef CATCH_CONFIG_VARIADIC_MACROS
 | 
				
			||||||
    ///////////////////////////////////////////////////////////////////////////////
 | 
					    ///////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					    #define INTERNAL_CATCH_TESTCASE2( TestName, ... ) \
 | 
				
			||||||
 | 
					        static void TestName(); \
 | 
				
			||||||
 | 
					        namespace{ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( &TestName, CATCH_INTERNAL_LINEINFO, Catch::NameAndDesc( __VA_ARGS__ ) ); }\
 | 
				
			||||||
 | 
					        static void TestName()
 | 
				
			||||||
    #define INTERNAL_CATCH_TESTCASE( ... ) \
 | 
					    #define INTERNAL_CATCH_TESTCASE( ... ) \
 | 
				
			||||||
        static void INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ )(); \
 | 
					        INTERNAL_CATCH_TESTCASE2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ), __VA_ARGS__ )
 | 
				
			||||||
        namespace{ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( &INTERNAL_CATCH_UNIQUE_NAME(  ____C_A_T_C_H____T_E_S_T____ ), CATCH_INTERNAL_LINEINFO, Catch::NameAndDesc( __VA_ARGS__ ) ); }\
 | 
					 | 
				
			||||||
        static void INTERNAL_CATCH_UNIQUE_NAME(  ____C_A_T_C_H____T_E_S_T____ )()
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ///////////////////////////////////////////////////////////////////////////////
 | 
					    ///////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
    #define INTERNAL_CATCH_METHOD_AS_TEST_CASE( QualifiedMethod, ... ) \
 | 
					    #define INTERNAL_CATCH_METHOD_AS_TEST_CASE( QualifiedMethod, ... ) \
 | 
				
			||||||
        namespace{ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( &QualifiedMethod, "&" #QualifiedMethod, Catch::NameAndDesc( __VA_ARGS__ ), CATCH_INTERNAL_LINEINFO ); }
 | 
					        namespace{ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( &QualifiedMethod, "&" #QualifiedMethod, Catch::NameAndDesc( __VA_ARGS__ ), CATCH_INTERNAL_LINEINFO ); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ///////////////////////////////////////////////////////////////////////////////
 | 
					    ///////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
    #define INTERNAL_CATCH_TEST_CASE_METHOD( ClassName, ... )\
 | 
					    #define INTERNAL_CATCH_TEST_CASE_METHOD2( TestName, ClassName, ... )\
 | 
				
			||||||
        namespace{ \
 | 
					        namespace{ \
 | 
				
			||||||
            struct INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ) : ClassName{ \
 | 
					            struct TestName : ClassName{ \
 | 
				
			||||||
                void test(); \
 | 
					                void test(); \
 | 
				
			||||||
            }; \
 | 
					            }; \
 | 
				
			||||||
            Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar ) ( &INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ )::test, #ClassName, Catch::NameAndDesc( __VA_ARGS__ ), CATCH_INTERNAL_LINEINFO ); \
 | 
					            Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar ) ( &TestName::test, #ClassName, Catch::NameAndDesc( __VA_ARGS__ ), CATCH_INTERNAL_LINEINFO ); \
 | 
				
			||||||
        } \
 | 
					        } \
 | 
				
			||||||
        void INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ )::test()
 | 
					        void TestName::test()
 | 
				
			||||||
 | 
					    #define INTERNAL_CATCH_TEST_CASE_METHOD( ClassName, ... ) \
 | 
				
			||||||
 | 
					        INTERNAL_CATCH_TEST_CASE_METHOD2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ), ClassName, __VA_ARGS__ )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ///////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					    #define INTERNAL_CATCH_REGISTER_TESTCASE( Function, ... ) \
 | 
				
			||||||
 | 
					        Catch::AutoReg( Function, CATCH_INTERNAL_LINEINFO, Catch::NameAndDesc( __VA_ARGS__ ) );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
    ///////////////////////////////////////////////////////////////////////////////
 | 
					    ///////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					    #define INTERNAL_CATCH_TESTCASE2( TestName, Name, Desc ) \
 | 
				
			||||||
 | 
					        static void TestName(); \
 | 
				
			||||||
 | 
					        namespace{ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( &TestName, CATCH_INTERNAL_LINEINFO, Catch::NameAndDesc( Name, Desc ) ); }\
 | 
				
			||||||
 | 
					        static void TestName()
 | 
				
			||||||
    #define INTERNAL_CATCH_TESTCASE( Name, Desc ) \
 | 
					    #define INTERNAL_CATCH_TESTCASE( Name, Desc ) \
 | 
				
			||||||
        static void INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ )(); \
 | 
					        INTERNAL_CATCH_TESTCASE2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ), Name, Desc )
 | 
				
			||||||
        namespace{ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( &INTERNAL_CATCH_UNIQUE_NAME(  ____C_A_T_C_H____T_E_S_T____ ), CATCH_INTERNAL_LINEINFO, Catch::NameAndDesc( Name, Desc ) ); }\
 | 
					 | 
				
			||||||
        static void INTERNAL_CATCH_UNIQUE_NAME(  ____C_A_T_C_H____T_E_S_T____ )()
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ///////////////////////////////////////////////////////////////////////////////
 | 
					    ///////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
    #define INTERNAL_CATCH_METHOD_AS_TEST_CASE( QualifiedMethod, Name, Desc ) \
 | 
					    #define INTERNAL_CATCH_METHOD_AS_TEST_CASE( QualifiedMethod, Name, Desc ) \
 | 
				
			||||||
        namespace{ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( &QualifiedMethod, "&" #QualifiedMethod, Catch::NameAndDesc( Name, Desc ), CATCH_INTERNAL_LINEINFO ); }
 | 
					        namespace{ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( &QualifiedMethod, "&" #QualifiedMethod, Catch::NameAndDesc( Name, Desc ), CATCH_INTERNAL_LINEINFO ); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ///////////////////////////////////////////////////////////////////////////////
 | 
					    ///////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
    #define INTERNAL_CATCH_TEST_CASE_METHOD( ClassName, TestName, Desc )\
 | 
					    #define INTERNAL_CATCH_TEST_CASE_METHOD2( TestCaseName, ClassName, TestName, Desc )\
 | 
				
			||||||
        namespace{ \
 | 
					        namespace{ \
 | 
				
			||||||
            struct INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ) : ClassName{ \
 | 
					            struct TestCaseName : ClassName{ \
 | 
				
			||||||
                void test(); \
 | 
					                void test(); \
 | 
				
			||||||
            }; \
 | 
					            }; \
 | 
				
			||||||
            Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar ) ( &INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ )::test, #ClassName, Catch::NameAndDesc( TestName, Desc ), CATCH_INTERNAL_LINEINFO ); \
 | 
					            Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar ) ( &TestCaseName::test, #ClassName, Catch::NameAndDesc( TestName, Desc ), CATCH_INTERNAL_LINEINFO ); \
 | 
				
			||||||
        } \
 | 
					        } \
 | 
				
			||||||
        void INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ )::test()
 | 
					        void TestCaseName::test()
 | 
				
			||||||
 | 
					    #define INTERNAL_CATCH_TEST_CASE_METHOD( ClassName, TestName, Desc )\
 | 
				
			||||||
 | 
					        INTERNAL_CATCH_TEST_CASE_METHOD2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ), ClassName, TestName, Desc )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ///////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					    #define INTERNAL_CATCH_REGISTER_TESTCASE( Function, Name, Desc ) \
 | 
				
			||||||
 | 
					        Catch::AutoReg( Function, CATCH_INTERNAL_LINEINFO, Catch::NameAndDesc( Name, Desc ) );
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif // TWOBLUECUBES_CATCH_TEST_REGISTRY_HPP_INCLUDED
 | 
					#endif // TWOBLUECUBES_CATCH_TEST_REGISTRY_HPP_INCLUDED
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -55,10 +55,13 @@ namespace Detail {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
std::string toString( std::string const& value ) {
 | 
					std::string toString( std::string const& value ) {
 | 
				
			||||||
    std::string s = value;
 | 
					    std::string s = value;
 | 
				
			||||||
    if( getCurrentContext().getConfig()->showInvisibles() ) {
 | 
					    IConfig const* config = getCurrentConfig();
 | 
				
			||||||
 | 
					    if( config && config->showInvisibles() ) {
 | 
				
			||||||
        for(size_t i = 0; i < s.size(); ++i ) {
 | 
					        for(size_t i = 0; i < s.size(); ++i ) {
 | 
				
			||||||
            std::string subs;
 | 
					            std::string subs;
 | 
				
			||||||
            switch( s[i] ) {
 | 
					            switch( s[i] ) {
 | 
				
			||||||
 | 
					            case '\r': subs = "\\r"; break;
 | 
				
			||||||
 | 
					            case '\l': subs = "\\l"; break;
 | 
				
			||||||
            case '\n': subs = "\\n"; break;
 | 
					            case '\n': subs = "\\n"; break;
 | 
				
			||||||
            case '\t': subs = "\\t"; break;
 | 
					            case '\t': subs = "\\t"; break;
 | 
				
			||||||
            default: break;
 | 
					            default: break;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -37,7 +37,7 @@ namespace Catch {
 | 
				
			|||||||
        return os;
 | 
					        return os;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Version libraryVersion( 1, 3, 0, "develop", 3 );
 | 
					    Version libraryVersion( 2, 0, 0, "develop", 2 );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -680,7 +680,7 @@ MiscTests.cpp:<line number>
 | 
				
			|||||||
...............................................................................
 | 
					...............................................................................
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MiscTests.cpp:<line number>: FAILED:
 | 
					MiscTests.cpp:<line number>: FAILED:
 | 
				
			||||||
  CHECK_THAT( testStringForMatching() Contains( "not there" ) )
 | 
					  CHECK_THAT( testStringForMatching(), Contains( "not there" ) )
 | 
				
			||||||
with expansion:
 | 
					with expansion:
 | 
				
			||||||
  "this string contains 'abc' as a substring" contains: "not there"
 | 
					  "this string contains 'abc' as a substring" contains: "not there"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -691,7 +691,7 @@ MiscTests.cpp:<line number>
 | 
				
			|||||||
...............................................................................
 | 
					...............................................................................
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MiscTests.cpp:<line number>: FAILED:
 | 
					MiscTests.cpp:<line number>: FAILED:
 | 
				
			||||||
  CHECK_THAT( testStringForMatching() StartsWith( "string" ) )
 | 
					  CHECK_THAT( testStringForMatching(), StartsWith( "string" ) )
 | 
				
			||||||
with expansion:
 | 
					with expansion:
 | 
				
			||||||
  "this string contains 'abc' as a substring" starts with: "string"
 | 
					  "this string contains 'abc' as a substring" starts with: "string"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -702,7 +702,7 @@ MiscTests.cpp:<line number>
 | 
				
			|||||||
...............................................................................
 | 
					...............................................................................
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MiscTests.cpp:<line number>: FAILED:
 | 
					MiscTests.cpp:<line number>: FAILED:
 | 
				
			||||||
  CHECK_THAT( testStringForMatching() EndsWith( "this" ) )
 | 
					  CHECK_THAT( testStringForMatching(), EndsWith( "this" ) )
 | 
				
			||||||
with expansion:
 | 
					with expansion:
 | 
				
			||||||
  "this string contains 'abc' as a substring" ends with: "this"
 | 
					  "this string contains 'abc' as a substring" ends with: "this"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -713,7 +713,7 @@ MiscTests.cpp:<line number>
 | 
				
			|||||||
...............................................................................
 | 
					...............................................................................
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MiscTests.cpp:<line number>: FAILED:
 | 
					MiscTests.cpp:<line number>: FAILED:
 | 
				
			||||||
  CHECK_THAT( testStringForMatching() Equals( "something else" ) )
 | 
					  CHECK_THAT( testStringForMatching(), Equals( "something else" ) )
 | 
				
			||||||
with expansion:
 | 
					with expansion:
 | 
				
			||||||
  "this string contains 'abc' as a substring" equals: "something else"
 | 
					  "this string contains 'abc' as a substring" equals: "something else"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -724,7 +724,7 @@ MiscTests.cpp:<line number>
 | 
				
			|||||||
...............................................................................
 | 
					...............................................................................
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MiscTests.cpp:<line number>: FAILED:
 | 
					MiscTests.cpp:<line number>: FAILED:
 | 
				
			||||||
  CHECK_THAT( testStringForMatching() ( Contains( "string" ) || Contains( "different" ) ) && Contains( "random" ) )
 | 
					  CHECK_THAT( testStringForMatching(), ( Contains( "string" ) || Contains( "different" ) ) && Contains( "random" ) )
 | 
				
			||||||
with expansion:
 | 
					with expansion:
 | 
				
			||||||
  "this string contains 'abc' as a substring" ( ( contains: "string" or
 | 
					  "this string contains 'abc' as a substring" ( ( contains: "string" or
 | 
				
			||||||
  contains: "different" ) and contains: "random" )
 | 
					  contains: "different" ) and contains: "random" )
 | 
				
			||||||
@@ -736,7 +736,7 @@ MiscTests.cpp:<line number>
 | 
				
			|||||||
...............................................................................
 | 
					...............................................................................
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MiscTests.cpp:<line number>: FAILED:
 | 
					MiscTests.cpp:<line number>: FAILED:
 | 
				
			||||||
  CHECK_THAT( testStringForMatching() !Contains( "substring" ) )
 | 
					  CHECK_THAT( testStringForMatching(), !Contains( "substring" ) )
 | 
				
			||||||
with expansion:
 | 
					with expansion:
 | 
				
			||||||
  "this string contains 'abc' as a substring" not contains: "substring"
 | 
					  "this string contains 'abc' as a substring" not contains: "substring"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -830,6 +830,6 @@ with expansion:
 | 
				
			|||||||
  "first" == "second"
 | 
					  "first" == "second"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
===============================================================================
 | 
					===============================================================================
 | 
				
			||||||
test cases: 166 | 123 passed | 42 failed |  1 failed as expected
 | 
					test cases: 165 | 122 passed | 42 failed |  1 failed as expected
 | 
				
			||||||
assertions: 913 | 817 passed | 83 failed | 13 failed as expected
 | 
					assertions: 768 | 672 passed | 83 failed | 13 failed as expected
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -1,5 +1,5 @@
 | 
				
			|||||||
<testsuites>
 | 
					<testsuites>
 | 
				
			||||||
  <testsuite name="CatchSelfTest" errors="13" failures="72" tests="915" hostname="tbd" time="{duration}" timestamp="tbd">
 | 
					  <testsuite name="CatchSelfTest" errors="13" failures="72" tests="770" hostname="tbd" time="{duration}" timestamp="tbd">
 | 
				
			||||||
    <testcase classname="global" name="toString(enum)" time="{duration}"/>
 | 
					    <testcase classname="global" name="toString(enum)" time="{duration}"/>
 | 
				
			||||||
    <testcase classname="global" name="toString(enum w/operator<<)" time="{duration}"/>
 | 
					    <testcase classname="global" name="toString(enum w/operator<<)" time="{duration}"/>
 | 
				
			||||||
    <testcase classname="global" name="toString(enum class)" time="{duration}"/>
 | 
					    <testcase classname="global" name="toString(enum class)" time="{duration}"/>
 | 
				
			||||||
@@ -265,8 +265,6 @@ ExceptionTests.cpp:<line number>
 | 
				
			|||||||
ExceptionTests.cpp:<line number>
 | 
					ExceptionTests.cpp:<line number>
 | 
				
			||||||
      </failure>
 | 
					      </failure>
 | 
				
			||||||
    </testcase>
 | 
					    </testcase>
 | 
				
			||||||
    <testcase classname="global" name="Generators over two ranges" time="{duration}"/>
 | 
					 | 
				
			||||||
    <testcase classname="global" name="Generator over a range of pairs" time="{duration}"/>
 | 
					 | 
				
			||||||
    <testcase classname="global" name="INFO and WARN do not abort tests" time="{duration}"/>
 | 
					    <testcase classname="global" name="INFO and WARN do not abort tests" time="{duration}"/>
 | 
				
			||||||
    <testcase classname="global" name="SUCCEED counts as a test pass" time="{duration}"/>
 | 
					    <testcase classname="global" name="SUCCEED counts as a test pass" time="{duration}"/>
 | 
				
			||||||
    <testcase classname="global" name="INFO gets logged on failure" time="{duration}">
 | 
					    <testcase classname="global" name="INFO gets logged on failure" time="{duration}">
 | 
				
			||||||
@@ -547,6 +545,7 @@ hello
 | 
				
			|||||||
    </testcase>
 | 
					    </testcase>
 | 
				
			||||||
    <testcase classname="global" name="Text can be formatted using the Text class" time="{duration}"/>
 | 
					    <testcase classname="global" name="Text can be formatted using the Text class" time="{duration}"/>
 | 
				
			||||||
    <testcase classname="global" name="Long text is truncted" time="{duration}"/>
 | 
					    <testcase classname="global" name="Long text is truncted" time="{duration}"/>
 | 
				
			||||||
 | 
					    <testcase classname="global" name="ManuallyRegistered" time="{duration}"/>
 | 
				
			||||||
    <testcase classname="global" name="Parsing a std::pair" time="{duration}"/>
 | 
					    <testcase classname="global" name="Parsing a std::pair" time="{duration}"/>
 | 
				
			||||||
    <testcase classname="global" name="Where there is more to the expression after the RHS" time="{duration}"/>
 | 
					    <testcase classname="global" name="Where there is more to the expression after the RHS" time="{duration}"/>
 | 
				
			||||||
    <testcase classname="global" name="Where the LHS is not a simple value" time="{duration}"/>
 | 
					    <testcase classname="global" name="Where the LHS is not a simple value" time="{duration}"/>
 | 
				
			||||||
 
 | 
				
			|||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -112,6 +112,7 @@ public:
 | 
				
			|||||||
    CustomStdException( const std::string& msg )
 | 
					    CustomStdException( const std::string& msg )
 | 
				
			||||||
    : m_msg( msg )
 | 
					    : m_msg( msg )
 | 
				
			||||||
    {}
 | 
					    {}
 | 
				
			||||||
 | 
					    ~CustomStdException() CATCH_NOEXCEPT {}
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    std::string getMessage() const
 | 
					    std::string getMessage() const
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,42 +1,2 @@
 | 
				
			|||||||
/*
 | 
					// The old generators have been removed
 | 
				
			||||||
 *  Created by Phil on 28/01/2011.
 | 
					// A new generator implementation is coming
 | 
				
			||||||
 *  Copyright 2011 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)
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// This define means we have to prefix all the CATCH macros with CATCH_
 | 
					 | 
				
			||||||
// We're using it here to test it out
 | 
					 | 
				
			||||||
#define CATCH_CONFIG_PREFIX_ALL
 | 
					 | 
				
			||||||
#include "catch.hpp"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
inline int multiply( int a, int b )
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    return a*b;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
CATCH_TEST_CASE( "Generators over two ranges", "[generators]" )
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    using namespace Catch::Generators;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    int i = CATCH_GENERATE( between( 1, 5 ).then( values( 15, 20, 21 ).then( 36 ) ) );
 | 
					 | 
				
			||||||
    int j = CATCH_GENERATE( between( 100, 107 ) );
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    CATCH_REQUIRE( multiply( i, 2 ) == i*2 );
 | 
					 | 
				
			||||||
    CATCH_REQUIRE( multiply( j, 2 ) == j*2 );
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
struct IntPair { int first, second; };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
CATCH_TEST_CASE( "Generator over a range of pairs", "[generators]" )
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    using namespace Catch::Generators;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    IntPair p[] = { { 0, 1 }, { 2, 3 } };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    IntPair* i = CATCH_GENERATE( between( p, &p[1] ) );
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    CATCH_REQUIRE( i->first == i->second-1 );
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -475,6 +475,8 @@ TEST_CASE( "long long" ) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
//TEST_CASE( "Divide by Zero signal handler", "[.][sig]" ) {
 | 
					//TEST_CASE( "Divide by Zero signal handler", "[.][sig]" ) {
 | 
				
			||||||
//    int i = 0;
 | 
					//    int i = 0;
 | 
				
			||||||
 | 
					//    SECTION( "s" ) {
 | 
				
			||||||
//        int x = 10/i; // This should cause the signal to fire
 | 
					//        int x = 10/i; // This should cause the signal to fire
 | 
				
			||||||
//        CHECK( x == 0 );
 | 
					//        CHECK( x == 0 );
 | 
				
			||||||
//    }
 | 
					//    }
 | 
				
			||||||
 | 
					//}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1 +0,0 @@
 | 
				
			|||||||
#include "catch_interfaces_generators.h"
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1 +0,0 @@
 | 
				
			|||||||
#include "catch_interfaces_runner.h"
 | 
					 | 
				
			||||||
@@ -449,3 +449,13 @@ TEST_CASE( "Long text is truncted", "[Text][Truncated]" ) {
 | 
				
			|||||||
    CHECK_THAT( t.toString(), EndsWith( "... message truncated due to excessive size" ) );
 | 
					    CHECK_THAT( t.toString(), EndsWith( "... message truncated due to excessive size" ) );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					inline void manuallyRegisteredTestFunction() {
 | 
				
			||||||
 | 
					    SUCCEED( "was called" );
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					struct AutoTestReg {
 | 
				
			||||||
 | 
					    AutoTestReg() {
 | 
				
			||||||
 | 
					        REGISTER_TEST_CASE( manuallyRegisteredTestFunction, "ManuallyRegistered", "" );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					AutoTestReg autoTestReg;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,7 +27,6 @@
 | 
				
			|||||||
		4A45DA2D16161FA2004F8D6B /* catch_interfaces_capture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A45DA2C16161FA2004F8D6B /* catch_interfaces_capture.cpp */; };
 | 
							4A45DA2D16161FA2004F8D6B /* catch_interfaces_capture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A45DA2C16161FA2004F8D6B /* catch_interfaces_capture.cpp */; };
 | 
				
			||||||
		4A45DA3116161FFC004F8D6B /* catch_interfaces_reporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A45DA3016161FFB004F8D6B /* catch_interfaces_reporter.cpp */; };
 | 
							4A45DA3116161FFC004F8D6B /* catch_interfaces_reporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A45DA3016161FFB004F8D6B /* catch_interfaces_reporter.cpp */; };
 | 
				
			||||||
		4A45DA3316162047004F8D6B /* catch_interfaces_exception.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A45DA3216162047004F8D6B /* catch_interfaces_exception.cpp */; };
 | 
							4A45DA3316162047004F8D6B /* catch_interfaces_exception.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A45DA3216162047004F8D6B /* catch_interfaces_exception.cpp */; };
 | 
				
			||||||
		4A45DA3516162071004F8D6B /* catch_interfaces_runner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A45DA3416162071004F8D6B /* catch_interfaces_runner.cpp */; };
 | 
					 | 
				
			||||||
		4A6D0C27149B3D3B00DB3EAA /* CatchSelfTest.1 in CopyFiles */ = {isa = PBXBuildFile; fileRef = 4A6D0C26149B3D3B00DB3EAA /* CatchSelfTest.1 */; };
 | 
							4A6D0C27149B3D3B00DB3EAA /* CatchSelfTest.1 in CopyFiles */ = {isa = PBXBuildFile; fileRef = 4A6D0C26149B3D3B00DB3EAA /* CatchSelfTest.1 */; };
 | 
				
			||||||
		4A6D0C37149B3D9E00DB3EAA /* ApproxTests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A6D0C2D149B3D9E00DB3EAA /* ApproxTests.cpp */; };
 | 
							4A6D0C37149B3D9E00DB3EAA /* ApproxTests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A6D0C2D149B3D9E00DB3EAA /* ApproxTests.cpp */; };
 | 
				
			||||||
		4A6D0C38149B3D9E00DB3EAA /* ClassTests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A6D0C2F149B3D9E00DB3EAA /* ClassTests.cpp */; };
 | 
							4A6D0C38149B3D9E00DB3EAA /* ClassTests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A6D0C2F149B3D9E00DB3EAA /* ClassTests.cpp */; };
 | 
				
			||||||
@@ -120,7 +119,6 @@
 | 
				
			|||||||
		4A45DA2C16161FA2004F8D6B /* catch_interfaces_capture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = catch_interfaces_capture.cpp; path = ../../../SelfTest/SurrogateCpps/catch_interfaces_capture.cpp; sourceTree = "<group>"; };
 | 
							4A45DA2C16161FA2004F8D6B /* catch_interfaces_capture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = catch_interfaces_capture.cpp; path = ../../../SelfTest/SurrogateCpps/catch_interfaces_capture.cpp; sourceTree = "<group>"; };
 | 
				
			||||||
		4A45DA3016161FFB004F8D6B /* catch_interfaces_reporter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = catch_interfaces_reporter.cpp; path = ../../../SelfTest/SurrogateCpps/catch_interfaces_reporter.cpp; sourceTree = "<group>"; };
 | 
							4A45DA3016161FFB004F8D6B /* catch_interfaces_reporter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = catch_interfaces_reporter.cpp; path = ../../../SelfTest/SurrogateCpps/catch_interfaces_reporter.cpp; sourceTree = "<group>"; };
 | 
				
			||||||
		4A45DA3216162047004F8D6B /* catch_interfaces_exception.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = catch_interfaces_exception.cpp; path = ../../../SelfTest/SurrogateCpps/catch_interfaces_exception.cpp; sourceTree = "<group>"; };
 | 
							4A45DA3216162047004F8D6B /* catch_interfaces_exception.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = catch_interfaces_exception.cpp; path = ../../../SelfTest/SurrogateCpps/catch_interfaces_exception.cpp; sourceTree = "<group>"; };
 | 
				
			||||||
		4A45DA3416162071004F8D6B /* catch_interfaces_runner.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = catch_interfaces_runner.cpp; path = ../../../SelfTest/SurrogateCpps/catch_interfaces_runner.cpp; sourceTree = "<group>"; };
 | 
					 | 
				
			||||||
		4A4B0F9715CE6CFB00AE2392 /* catch_registry_hub.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; path = catch_registry_hub.hpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; };
 | 
							4A4B0F9715CE6CFB00AE2392 /* catch_registry_hub.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; path = catch_registry_hub.hpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; };
 | 
				
			||||||
		4A4B0F9915CE6EC100AE2392 /* catch_interfaces_registry_hub.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = catch_interfaces_registry_hub.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
 | 
							4A4B0F9915CE6EC100AE2392 /* catch_interfaces_registry_hub.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = catch_interfaces_registry_hub.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
 | 
				
			||||||
		4A4B0F9A15CEF84800AE2392 /* catch_notimplemented_exception.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = catch_notimplemented_exception.h; sourceTree = "<group>"; };
 | 
							4A4B0F9A15CEF84800AE2392 /* catch_notimplemented_exception.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = catch_notimplemented_exception.h; sourceTree = "<group>"; };
 | 
				
			||||||
@@ -149,14 +147,9 @@
 | 
				
			|||||||
		4A6D0C4C149B3E3D00DB3EAA /* catch_default_main.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_default_main.hpp; sourceTree = "<group>"; };
 | 
							4A6D0C4C149B3E3D00DB3EAA /* catch_default_main.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_default_main.hpp; sourceTree = "<group>"; };
 | 
				
			||||||
		4A6D0C4D149B3E3D00DB3EAA /* catch_evaluate.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; path = catch_evaluate.hpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; };
 | 
							4A6D0C4D149B3E3D00DB3EAA /* catch_evaluate.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; path = catch_evaluate.hpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; };
 | 
				
			||||||
		4A6D0C4E149B3E3D00DB3EAA /* catch_exception_translator_registry.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_exception_translator_registry.hpp; sourceTree = "<group>"; };
 | 
							4A6D0C4E149B3E3D00DB3EAA /* catch_exception_translator_registry.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_exception_translator_registry.hpp; sourceTree = "<group>"; };
 | 
				
			||||||
		4A6D0C4F149B3E3D00DB3EAA /* catch_generators.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_generators.hpp; sourceTree = "<group>"; };
 | 
					 | 
				
			||||||
		4A6D0C50149B3E3D00DB3EAA /* catch_generators_impl.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_generators_impl.hpp; sourceTree = "<group>"; };
 | 
					 | 
				
			||||||
		4A6D0C51149B3E3D00DB3EAA /* catch_context.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = catch_context.h; sourceTree = "<group>"; };
 | 
					 | 
				
			||||||
		4A6D0C52149B3E3D00DB3EAA /* catch_context_impl.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_context_impl.hpp; sourceTree = "<group>"; };
 | 
					 | 
				
			||||||
		4A6D0C53149B3E3D00DB3EAA /* catch_interfaces_capture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = catch_interfaces_capture.h; sourceTree = "<group>"; };
 | 
							4A6D0C53149B3E3D00DB3EAA /* catch_interfaces_capture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = catch_interfaces_capture.h; sourceTree = "<group>"; };
 | 
				
			||||||
		4A6D0C54149B3E3D00DB3EAA /* catch_interfaces_exception.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = catch_interfaces_exception.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
 | 
							4A6D0C54149B3E3D00DB3EAA /* catch_interfaces_exception.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = catch_interfaces_exception.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
 | 
				
			||||||
		4A6D0C55149B3E3D00DB3EAA /* catch_interfaces_reporter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = catch_interfaces_reporter.h; sourceTree = "<group>"; };
 | 
							4A6D0C55149B3E3D00DB3EAA /* catch_interfaces_reporter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = catch_interfaces_reporter.h; sourceTree = "<group>"; };
 | 
				
			||||||
		4A6D0C56149B3E3D00DB3EAA /* catch_interfaces_runner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = catch_interfaces_runner.h; sourceTree = "<group>"; };
 | 
					 | 
				
			||||||
		4A6D0C57149B3E3D00DB3EAA /* catch_interfaces_testcase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = catch_interfaces_testcase.h; sourceTree = "<group>"; };
 | 
							4A6D0C57149B3E3D00DB3EAA /* catch_interfaces_testcase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = catch_interfaces_testcase.h; sourceTree = "<group>"; };
 | 
				
			||||||
		4A6D0C58149B3E3D00DB3EAA /* catch_list.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; path = catch_list.hpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; };
 | 
							4A6D0C58149B3E3D00DB3EAA /* catch_list.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; path = catch_list.hpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; };
 | 
				
			||||||
		4A6D0C59149B3E3D00DB3EAA /* catch_objc.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_objc.hpp; sourceTree = "<group>"; };
 | 
							4A6D0C59149B3E3D00DB3EAA /* catch_objc.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_objc.hpp; sourceTree = "<group>"; };
 | 
				
			||||||
@@ -175,7 +168,6 @@
 | 
				
			|||||||
		4A6D0C68149B3E3D00DB3EAA /* catch_reporter_xml.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_reporter_xml.hpp; sourceTree = "<group>"; };
 | 
							4A6D0C68149B3E3D00DB3EAA /* catch_reporter_xml.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_reporter_xml.hpp; sourceTree = "<group>"; };
 | 
				
			||||||
		4A7ADB4314F631E10094FE10 /* catch_totals.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_totals.hpp; sourceTree = "<group>"; };
 | 
							4A7ADB4314F631E10094FE10 /* catch_totals.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_totals.hpp; sourceTree = "<group>"; };
 | 
				
			||||||
		4A7DB2CD1652FE4B00FA6523 /* catch_version.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = catch_version.h; path = ../../../../include/internal/catch_version.h; sourceTree = "<group>"; };
 | 
							4A7DB2CD1652FE4B00FA6523 /* catch_version.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = catch_version.h; path = ../../../../include/internal/catch_version.h; sourceTree = "<group>"; };
 | 
				
			||||||
		4A90B59B15D0F61A00EF71BC /* catch_interfaces_generators.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = catch_interfaces_generators.h; sourceTree = "<group>"; };
 | 
					 | 
				
			||||||
		4A90B59D15D24FE900EF71BC /* catch_assertionresult.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; path = catch_assertionresult.hpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; };
 | 
							4A90B59D15D24FE900EF71BC /* catch_assertionresult.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; path = catch_assertionresult.hpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; };
 | 
				
			||||||
		4AA7B8B4165428BA003155F6 /* catch_version.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; name = catch_version.hpp; path = ../../../../include/internal/catch_version.hpp; sourceTree = "<group>"; };
 | 
							4AA7B8B4165428BA003155F6 /* catch_version.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; name = catch_version.hpp; path = ../../../../include/internal/catch_version.hpp; sourceTree = "<group>"; };
 | 
				
			||||||
		4AB1C73514F97BDA00F31DF7 /* catch_console_colour_impl.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; path = catch_console_colour_impl.hpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; };
 | 
							4AB1C73514F97BDA00F31DF7 /* catch_console_colour_impl.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; path = catch_console_colour_impl.hpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; };
 | 
				
			||||||
@@ -340,7 +332,6 @@
 | 
				
			|||||||
				4A45DA2C16161FA2004F8D6B /* catch_interfaces_capture.cpp */,
 | 
									4A45DA2C16161FA2004F8D6B /* catch_interfaces_capture.cpp */,
 | 
				
			||||||
				4A45DA3216162047004F8D6B /* catch_interfaces_exception.cpp */,
 | 
									4A45DA3216162047004F8D6B /* catch_interfaces_exception.cpp */,
 | 
				
			||||||
				4A45DA3016161FFB004F8D6B /* catch_interfaces_reporter.cpp */,
 | 
									4A45DA3016161FFB004F8D6B /* catch_interfaces_reporter.cpp */,
 | 
				
			||||||
				4A45DA3416162071004F8D6B /* catch_interfaces_runner.cpp */,
 | 
					 | 
				
			||||||
				4AB3D99C1616216500C9A0F8 /* catch_interfaces_testcase.cpp */,
 | 
									4AB3D99C1616216500C9A0F8 /* catch_interfaces_testcase.cpp */,
 | 
				
			||||||
				4AB3D99F1616219100C9A0F8 /* catch_interfaces_config.cpp */,
 | 
									4AB3D99F1616219100C9A0F8 /* catch_interfaces_config.cpp */,
 | 
				
			||||||
				4AB3D9A1161621B500C9A0F8 /* catch_interfaces_generators.cpp */,
 | 
									4AB3D9A1161621B500C9A0F8 /* catch_interfaces_generators.cpp */,
 | 
				
			||||||
@@ -358,8 +349,6 @@
 | 
				
			|||||||
				263FD06017AF8DF200988A20 /* catch_timer.hpp */,
 | 
									263FD06017AF8DF200988A20 /* catch_timer.hpp */,
 | 
				
			||||||
				4A4B0F9C15CEFA8300AE2392 /* catch_impl.hpp */,
 | 
									4A4B0F9C15CEFA8300AE2392 /* catch_impl.hpp */,
 | 
				
			||||||
				4A4B0F9715CE6CFB00AE2392 /* catch_registry_hub.hpp */,
 | 
									4A4B0F9715CE6CFB00AE2392 /* catch_registry_hub.hpp */,
 | 
				
			||||||
				4A6D0C50149B3E3D00DB3EAA /* catch_generators_impl.hpp */,
 | 
					 | 
				
			||||||
				4A6D0C52149B3E3D00DB3EAA /* catch_context_impl.hpp */,
 | 
					 | 
				
			||||||
				4A6D0C5E149B3E3D00DB3EAA /* catch_run_context.hpp */,
 | 
									4A6D0C5E149B3E3D00DB3EAA /* catch_run_context.hpp */,
 | 
				
			||||||
				4A6D0C62149B3E3D00DB3EAA /* catch_test_case_registry_impl.hpp */,
 | 
									4A6D0C62149B3E3D00DB3EAA /* catch_test_case_registry_impl.hpp */,
 | 
				
			||||||
				4AB1C73514F97BDA00F31DF7 /* catch_console_colour_impl.hpp */,
 | 
									4AB1C73514F97BDA00F31DF7 /* catch_console_colour_impl.hpp */,
 | 
				
			||||||
@@ -379,7 +368,6 @@
 | 
				
			|||||||
				269831E519078C1600BB0CE0 /* catch_tostring.h */,
 | 
									269831E519078C1600BB0CE0 /* catch_tostring.h */,
 | 
				
			||||||
				269831E619078CA200BB0CE0 /* catch_tostring.hpp */,
 | 
									269831E619078CA200BB0CE0 /* catch_tostring.hpp */,
 | 
				
			||||||
				4A6D0C4D149B3E3D00DB3EAA /* catch_evaluate.hpp */,
 | 
									4A6D0C4D149B3E3D00DB3EAA /* catch_evaluate.hpp */,
 | 
				
			||||||
				4A6D0C4F149B3E3D00DB3EAA /* catch_generators.hpp */,
 | 
					 | 
				
			||||||
				4A6D0C5C149B3E3D00DB3EAA /* catch_result_type.h */,
 | 
									4A6D0C5C149B3E3D00DB3EAA /* catch_result_type.h */,
 | 
				
			||||||
				4A6D0C5D149B3E3D00DB3EAA /* catch_assertionresult.h */,
 | 
									4A6D0C5D149B3E3D00DB3EAA /* catch_assertionresult.h */,
 | 
				
			||||||
				261488FE184DC32F0041FBEB /* catch_section.h */,
 | 
									261488FE184DC32F0041FBEB /* catch_section.h */,
 | 
				
			||||||
@@ -412,7 +400,6 @@
 | 
				
			|||||||
				261488FA184C81130041FBEB /* catch_test_spec.hpp */,
 | 
									261488FA184C81130041FBEB /* catch_test_spec.hpp */,
 | 
				
			||||||
				2656C21F1925E5100040DB02 /* catch_test_spec_parser.hpp */,
 | 
									2656C21F1925E5100040DB02 /* catch_test_spec_parser.hpp */,
 | 
				
			||||||
				4A6D0C4A149B3E3D00DB3EAA /* catch_config.hpp */,
 | 
									4A6D0C4A149B3E3D00DB3EAA /* catch_config.hpp */,
 | 
				
			||||||
				4A6D0C51149B3E3D00DB3EAA /* catch_context.h */,
 | 
					 | 
				
			||||||
				4A6D0C61149B3E3D00DB3EAA /* catch_test_case_info.h */,
 | 
									4A6D0C61149B3E3D00DB3EAA /* catch_test_case_info.h */,
 | 
				
			||||||
				4A7ADB4314F631E10094FE10 /* catch_totals.hpp */,
 | 
									4A7ADB4314F631E10094FE10 /* catch_totals.hpp */,
 | 
				
			||||||
				4AB77CB71553B72B00857BF0 /* catch_section_info.hpp */,
 | 
									4AB77CB71553B72B00857BF0 /* catch_section_info.hpp */,
 | 
				
			||||||
@@ -440,10 +427,8 @@
 | 
				
			|||||||
				4A6D0C53149B3E3D00DB3EAA /* catch_interfaces_capture.h */,
 | 
									4A6D0C53149B3E3D00DB3EAA /* catch_interfaces_capture.h */,
 | 
				
			||||||
				4A6D0C54149B3E3D00DB3EAA /* catch_interfaces_exception.h */,
 | 
									4A6D0C54149B3E3D00DB3EAA /* catch_interfaces_exception.h */,
 | 
				
			||||||
				4A6D0C55149B3E3D00DB3EAA /* catch_interfaces_reporter.h */,
 | 
									4A6D0C55149B3E3D00DB3EAA /* catch_interfaces_reporter.h */,
 | 
				
			||||||
				4A6D0C56149B3E3D00DB3EAA /* catch_interfaces_runner.h */,
 | 
					 | 
				
			||||||
				4A6D0C57149B3E3D00DB3EAA /* catch_interfaces_testcase.h */,
 | 
									4A6D0C57149B3E3D00DB3EAA /* catch_interfaces_testcase.h */,
 | 
				
			||||||
				4AFC661D157E96A7009D58CF /* catch_interfaces_config.h */,
 | 
									4AFC661D157E96A7009D58CF /* catch_interfaces_config.h */,
 | 
				
			||||||
				4A90B59B15D0F61A00EF71BC /* catch_interfaces_generators.h */,
 | 
					 | 
				
			||||||
				26711C90195D46CD0033EDA2 /* catch_interfaces_tag_alias_registry.h */,
 | 
									26711C90195D46CD0033EDA2 /* catch_interfaces_tag_alias_registry.h */,
 | 
				
			||||||
			);
 | 
								);
 | 
				
			||||||
			name = Interfaces;
 | 
								name = Interfaces;
 | 
				
			||||||
@@ -566,7 +551,6 @@
 | 
				
			|||||||
				4A45DA3316162047004F8D6B /* catch_interfaces_exception.cpp in Sources */,
 | 
									4A45DA3316162047004F8D6B /* catch_interfaces_exception.cpp in Sources */,
 | 
				
			||||||
				2691574C1A532A280054F1ED /* ToStringTuple.cpp in Sources */,
 | 
									2691574C1A532A280054F1ED /* ToStringTuple.cpp in Sources */,
 | 
				
			||||||
				26711C8F195D465C0033EDA2 /* TagAliasTests.cpp in Sources */,
 | 
									26711C8F195D465C0033EDA2 /* TagAliasTests.cpp in Sources */,
 | 
				
			||||||
				4A45DA3516162071004F8D6B /* catch_interfaces_runner.cpp in Sources */,
 | 
					 | 
				
			||||||
				4AB3D99D1616216500C9A0F8 /* catch_interfaces_testcase.cpp in Sources */,
 | 
									4AB3D99D1616216500C9A0F8 /* catch_interfaces_testcase.cpp in Sources */,
 | 
				
			||||||
				4AB3D9A01616219100C9A0F8 /* catch_interfaces_config.cpp in Sources */,
 | 
									4AB3D9A01616219100C9A0F8 /* catch_interfaces_config.cpp in Sources */,
 | 
				
			||||||
				4AB3D9A2161621B500C9A0F8 /* catch_interfaces_generators.cpp in Sources */,
 | 
									4AB3D9A2161621B500C9A0F8 /* catch_interfaces_generators.cpp in Sources */,
 | 
				
			||||||
 
 | 
				
			|||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Reference in New Issue
	
	Block a user