mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-11-04 05:59:32 +01:00 
			
		
		
		
	Added DYNAMIC_SECTION and implemented GIVEN/ WHEN/ THEN in terms of it
This commit is contained in:
		@@ -135,6 +135,7 @@
 | 
			
		||||
#define CATCH_METHOD_AS_TEST_CASE( method, ... ) INTERNAL_CATCH_METHOD_AS_TEST_CASE( method, __VA_ARGS__ )
 | 
			
		||||
#define CATCH_REGISTER_TEST_CASE( Function, ... ) INTERNAL_CATCH_REGISTER_TESTCASE( Function, __VA_ARGS__ )
 | 
			
		||||
#define CATCH_SECTION( ... ) INTERNAL_CATCH_SECTION( __VA_ARGS__ )
 | 
			
		||||
#define CATCH_DYNAMIC_SECTION( ... ) INTERNAL_CATCH_DYNAMIC_SECTION( __VA_ARGS__ )
 | 
			
		||||
#define CATCH_FAIL( ... ) INTERNAL_CATCH_MSG( "CATCH_FAIL", Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::Normal, __VA_ARGS__ )
 | 
			
		||||
#define CATCH_FAIL_CHECK( ... ) INTERNAL_CATCH_MSG( "CATCH_FAIL_CHECK", Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
 | 
			
		||||
#define CATCH_SUCCEED( ... ) INTERNAL_CATCH_MSG( "CATCH_SUCCEED", Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
 | 
			
		||||
@@ -144,11 +145,11 @@
 | 
			
		||||
// "BDD-style" convenience wrappers
 | 
			
		||||
#define CATCH_SCENARIO( ... ) CATCH_TEST_CASE( "Scenario: " __VA_ARGS__ )
 | 
			
		||||
#define CATCH_SCENARIO_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, "Scenario: " __VA_ARGS__ )
 | 
			
		||||
#define CATCH_GIVEN( desc )    CATCH_SECTION( std::string( "Given: ") + desc )
 | 
			
		||||
#define CATCH_WHEN( desc )     CATCH_SECTION( std::string( " When: ") + desc )
 | 
			
		||||
#define CATCH_AND_WHEN( desc ) CATCH_SECTION( std::string( "  And: ") + desc )
 | 
			
		||||
#define CATCH_THEN( desc )     CATCH_SECTION( std::string( " Then: ") + desc )
 | 
			
		||||
#define CATCH_AND_THEN( desc ) CATCH_SECTION( std::string( "  And: ") + desc )
 | 
			
		||||
#define CATCH_GIVEN( desc )    INTERNAL_CATCH_DYNAMIC_SECTION( "   Given: " << desc )
 | 
			
		||||
#define CATCH_WHEN( desc )     INTERNAL_CATCH_DYNAMIC_SECTION( "    When: " << desc )
 | 
			
		||||
#define CATCH_AND_WHEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( "And when: " << desc )
 | 
			
		||||
#define CATCH_THEN( desc )     INTERNAL_CATCH_DYNAMIC_SECTION( "    Then: " << desc )
 | 
			
		||||
#define CATCH_AND_THEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( "     And: " << desc )
 | 
			
		||||
 | 
			
		||||
// If CATCH_CONFIG_PREFIX_ALL is not defined then the CATCH_ prefix is not required
 | 
			
		||||
#else
 | 
			
		||||
@@ -194,6 +195,7 @@
 | 
			
		||||
#define METHOD_AS_TEST_CASE( method, ... ) INTERNAL_CATCH_METHOD_AS_TEST_CASE( method, __VA_ARGS__ )
 | 
			
		||||
#define REGISTER_TEST_CASE( Function, ... ) INTERNAL_CATCH_REGISTER_TESTCASE( Function, __VA_ARGS__ )
 | 
			
		||||
#define SECTION( ... ) INTERNAL_CATCH_SECTION( __VA_ARGS__ )
 | 
			
		||||
#define DYNAMIC_SECTION( ... ) INTERNAL_CATCH_DYNAMIC_SECTION( __VA_ARGS__ )
 | 
			
		||||
#define FAIL( ... ) INTERNAL_CATCH_MSG( "FAIL", Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::Normal, __VA_ARGS__ )
 | 
			
		||||
#define FAIL_CHECK( ... ) INTERNAL_CATCH_MSG( "FAIL_CHECK", Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
 | 
			
		||||
#define SUCCEED( ... ) INTERNAL_CATCH_MSG( "SUCCEED", Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
 | 
			
		||||
@@ -207,11 +209,11 @@
 | 
			
		||||
#define SCENARIO( ... ) TEST_CASE( "Scenario: " __VA_ARGS__ )
 | 
			
		||||
#define SCENARIO_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, "Scenario: " __VA_ARGS__ )
 | 
			
		||||
 | 
			
		||||
#define GIVEN( desc )    SECTION( std::string("   Given: ") + desc )
 | 
			
		||||
#define WHEN( desc )     SECTION( std::string("    When: ") + desc )
 | 
			
		||||
#define AND_WHEN( desc ) SECTION( std::string("And when: ") + desc )
 | 
			
		||||
#define THEN( desc )     SECTION( std::string("    Then: ") + desc )
 | 
			
		||||
#define AND_THEN( desc ) SECTION( std::string("     And: ") + desc )
 | 
			
		||||
#define GIVEN( desc )    INTERNAL_CATCH_DYNAMIC_SECTION( "   Given: " << desc )
 | 
			
		||||
#define WHEN( desc )     INTERNAL_CATCH_DYNAMIC_SECTION( "    When: " << desc )
 | 
			
		||||
#define AND_WHEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( "And when: " << desc )
 | 
			
		||||
#define THEN( desc )     INTERNAL_CATCH_DYNAMIC_SECTION( "    Then: " << desc )
 | 
			
		||||
#define AND_THEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( "     And: " << desc )
 | 
			
		||||
 | 
			
		||||
using Catch::Detail::Approx;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -38,4 +38,7 @@ namespace Catch {
 | 
			
		||||
#define INTERNAL_CATCH_SECTION( ... ) \
 | 
			
		||||
    if( Catch::Section const& INTERNAL_CATCH_UNIQUE_NAME( catch_internal_Section ) = Catch::SectionInfo( CATCH_INTERNAL_LINEINFO, __VA_ARGS__ ) )
 | 
			
		||||
 | 
			
		||||
#define INTERNAL_CATCH_DYNAMIC_SECTION( ... ) \
 | 
			
		||||
    if( Catch::Section const& INTERNAL_CATCH_UNIQUE_NAME( catch_internal_Section ) = Catch::SectionInfo( CATCH_INTERNAL_LINEINFO, (Catch::ReusableStringStream() << __VA_ARGS__).str() ) )
 | 
			
		||||
 | 
			
		||||
#endif // TWOBLUECUBES_CATCH_SECTION_H_INCLUDED
 | 
			
		||||
 
 | 
			
		||||
@@ -129,9 +129,7 @@ TEST_CASE( "looped SECTION tests", "[.][failing][sections]" ) {
 | 
			
		||||
    int a = 1;
 | 
			
		||||
 | 
			
		||||
    for( int b = 0; b < 10; ++b ) {
 | 
			
		||||
        std::ostringstream oss;
 | 
			
		||||
        oss << "b is currently: " << b;
 | 
			
		||||
        SECTION( oss.str() ) {
 | 
			
		||||
        DYNAMIC_SECTION( "b is currently: " << b ) {
 | 
			
		||||
            CHECK( b > a );
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user