mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-10-31 04:07:10 +01:00 
			
		
		
		
	v1.4.0
- use __COUNTER__ for unique IDS instead of __LINE__ (where possible) + bug fixes
This commit is contained in:
		| @@ -1,6 +1,6 @@ | ||||
|  | ||||
|  | ||||
| *v1.3.6* | ||||
| *v1.4.0* | ||||
|  | ||||
| Build status (on Travis CI) [](https://travis-ci.org/philsquared/Catch) | ||||
|  | ||||
|   | ||||
| @@ -37,7 +37,7 @@ namespace Catch { | ||||
|         return os; | ||||
|     } | ||||
|  | ||||
|     Version libraryVersion( 1, 3, 6, "", 0 ); | ||||
|     Version libraryVersion( 1, 4, 0, "", 0 ); | ||||
|  | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| /* | ||||
|  *  Catch v1.3.6 | ||||
|  *  Generated: 2016-03-11 18:30:42.852700 | ||||
|  *  Catch v1.4.0 | ||||
|  *  Generated: 2016-03-15 07:23:12.623111 | ||||
|  *  ---------------------------------------------------------- | ||||
|  *  This file has been merged from multiple headers. Please don't edit it directly | ||||
|  *  Copyright (c) 2012 Two Blue Cubes Ltd. All rights reserved. | ||||
| @@ -62,7 +62,11 @@ | ||||
|  | ||||
| #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( name ) INTERNAL_CATCH_UNIQUE_NAME_LINE( 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__ ) | ||||
| #endif | ||||
|  | ||||
| #define INTERNAL_CATCH_STRINGIFY2( expr ) #expr | ||||
| #define INTERNAL_CATCH_STRINGIFY( expr ) INTERNAL_CATCH_STRINGIFY2( expr ) | ||||
| @@ -89,7 +93,7 @@ | ||||
| // CATCH_CONFIG_CPP11_OR_GREATER : Is C++11 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 | ||||
| // in configuration.md, too | ||||
| @@ -185,6 +189,15 @@ | ||||
|  | ||||
| #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 | ||||
|  | ||||
| @@ -256,6 +269,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) | ||||
| #   define CATCH_CONFIG_CPP11_UNIQUE_PTR | ||||
| #endif | ||||
| #if defined(CATCH_INTERNAL_CONFIG_COUNTER) && !defined(CATCH_CONFIG_NO_COUNTER) && !defined(CATCH_CONFIG_COUNTER) | ||||
| #   define CATCH_CONFIG_COUNTER | ||||
| #endif | ||||
|  | ||||
| #if !defined(CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS) | ||||
| #   define CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS | ||||
| @@ -686,24 +702,28 @@ void registerTestCaseFunction | ||||
|  | ||||
| #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( ... ) \ | ||||
|         static void INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ )(); \ | ||||
|         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____ )() | ||||
|         INTERNAL_CATCH_TESTCASE2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ), __VA_ARGS__ ) | ||||
|  | ||||
|     /////////////////////////////////////////////////////////////////////////////// | ||||
|     #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 ); } | ||||
|  | ||||
|     /////////////////////////////////////////////////////////////////////////////// | ||||
|     #define INTERNAL_CATCH_TEST_CASE_METHOD( ClassName, ... )\ | ||||
|     #define INTERNAL_CATCH_TEST_CASE_METHOD2( TestName, ClassName, ... )\ | ||||
|         namespace{ \ | ||||
|             struct INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ) : ClassName{ \ | ||||
|             struct TestName : ClassName{ \ | ||||
|                 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, ... ) \ | ||||
| @@ -711,24 +731,28 @@ void registerTestCaseFunction | ||||
|  | ||||
| #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 ) \ | ||||
|         static void INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ )(); \ | ||||
|         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____ )() | ||||
|         INTERNAL_CATCH_TESTCASE2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ), 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 ); } | ||||
|  | ||||
|     /////////////////////////////////////////////////////////////////////////////// | ||||
|     #define INTERNAL_CATCH_TEST_CASE_METHOD( ClassName, TestName, Desc )\ | ||||
|     #define INTERNAL_CATCH_TEST_CASE_METHOD2( TestCaseName, ClassName, TestName, Desc )\ | ||||
|         namespace{ \ | ||||
|             struct INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ) : ClassName{ \ | ||||
|             struct TestCaseName : ClassName{ \ | ||||
|                 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 ) \ | ||||
| @@ -2578,10 +2602,12 @@ namespace Catch { | ||||
| } | ||||
|  | ||||
| /////////////////////////////////////////////////////////////////////////////// | ||||
| #define INTERNAL_CATCH_TRANSLATE_EXCEPTION( signature ) \ | ||||
|     static std::string INTERNAL_CATCH_UNIQUE_NAME( catch_internal_ExceptionTranslator )( signature ); \ | ||||
|     namespace{ Catch::ExceptionTranslatorRegistrar INTERNAL_CATCH_UNIQUE_NAME( catch_internal_ExceptionRegistrar )( &INTERNAL_CATCH_UNIQUE_NAME( catch_internal_ExceptionTranslator ) ); }\ | ||||
|     static std::string INTERNAL_CATCH_UNIQUE_NAME(  catch_internal_ExceptionTranslator )( signature ) | ||||
| #define INTERNAL_CATCH_TRANSLATE_EXCEPTION2( translatorName, signature ) \ | ||||
|     static std::string translatorName( signature ); \ | ||||
|     namespace{ Catch::ExceptionTranslatorRegistrar INTERNAL_CATCH_UNIQUE_NAME( catch_internal_ExceptionRegistrar )( &translatorName ); }\ | ||||
|     static std::string translatorName( signature ) | ||||
|  | ||||
| #define INTERNAL_CATCH_TRANSLATE_EXCEPTION( signature ) INTERNAL_CATCH_TRANSLATE_EXCEPTION2( INTERNAL_CATCH_UNIQUE_NAME( catch_internal_ExceptionTranslator ), signature ) | ||||
|  | ||||
| // #included from: internal/catch_approx.hpp | ||||
| #define TWOBLUECUBES_CATCH_APPROX_HPP_INCLUDED | ||||
| @@ -5884,6 +5910,11 @@ namespace Catch { | ||||
|             while( getCurrentContext().advanceGeneratorsForCurrentTest() && !aborting() ); | ||||
|  | ||||
|             Totals deltaTotals = m_totals.delta( prevTotals ); | ||||
|             if( testInfo.expectedToFail() && deltaTotals.testCases.passed > 0 ) { | ||||
|                 deltaTotals.assertions.failed++; | ||||
|                 deltaTotals.testCases.passed--; | ||||
|                 deltaTotals.testCases.failed++; | ||||
|             } | ||||
|             m_totals.testCases += deltaTotals.testCases; | ||||
|             m_reporter->testCaseEnded( TestCaseStats(   testInfo, | ||||
|                                                         deltaTotals, | ||||
| @@ -7481,7 +7512,7 @@ namespace Catch { | ||||
|         return os; | ||||
|     } | ||||
|  | ||||
|     Version libraryVersion( 1, 3, 6, "", 0 ); | ||||
|     Version libraryVersion( 1, 4, 0, "", 0 ); | ||||
|  | ||||
| } | ||||
|  | ||||
| @@ -9777,7 +9808,7 @@ namespace Catch { | ||||
|             if( totals.testCases.total() == 0 ) { | ||||
|                 stream << Colour( Colour::Warning ) << "No tests ran\n"; | ||||
|             } | ||||
|             else if( totals.assertions.total() > 0 && totals.assertions.allPassed() ) { | ||||
|             else if( totals.assertions.total() > 0 && totals.testCases.allPassed() ) { | ||||
|                 stream << Colour( Colour::ResultSuccess ) << "All tests passed"; | ||||
|                 stream << " (" | ||||
|                         << pluralise( totals.assertions.passed, "assertion" ) << " in " | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Phil Nash
					Phil Nash