mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-10-31 20:27:11 +01:00 
			
		
		
		
	Add BDD AND_GIVEN based macros
issue #1360 It is possible to have multple given contexts in a single BDD scenario; if you have to type 'and' in the GIVEN description; it's very likely you need an AND. A generic AND is not possible, thus a AND_GIVEN is added to complement the AND_WHEN and AND_THEN. Can be used without needing to increase indent: SCENARIO("...") { GIVEN("...") AND_GIVEN("...") { WHEN("...") { THEN("...") { // ... } } } } would correctly output, when requested/needed: Given: ... And given: ... When: ... Then: ... The padding had to be increased by a character in the output message, to continue to be uniform.
This commit is contained in:
		 Matthew Parnell
					Matthew Parnell
				
			
				
					committed by
					
						 Martin Hořeňovský
						Martin Hořeňovský
					
				
			
			
				
	
			
			
			 Martin Hořeňovský
						Martin Hořeňovský
					
				
			
						parent
						
							ee73989f9b
						
					
				
				
					commit
					64fd5b8058
				
			| @@ -148,11 +148,12 @@ | ||||
| // "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 )    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 ) | ||||
| #define CATCH_GIVEN( desc )     INTERNAL_CATCH_DYNAMIC_SECTION( "    Given: " << desc ) | ||||
| #define CATCH_AND_GIVEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( "And 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 | ||||
| @@ -212,11 +213,12 @@ | ||||
| #define SCENARIO( ... ) TEST_CASE( "Scenario: " __VA_ARGS__ ) | ||||
| #define SCENARIO_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, "Scenario: " __VA_ARGS__ ) | ||||
|  | ||||
| #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 ) | ||||
| #define GIVEN( desc )     INTERNAL_CATCH_DYNAMIC_SECTION( "    Given: " << desc ) | ||||
| #define AND_GIVEN( desc ) INTERNAL_CATCH_DYNAMIC_SECTION( "And 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; | ||||
|  | ||||
| @@ -277,6 +279,7 @@ using Catch::Detail::Approx; | ||||
| #define CATCH_SCENARIO( ... ) INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ )) | ||||
| #define CATCH_SCENARIO_METHOD( className, ... ) INTERNAL_CATCH_TESTCASE_METHOD_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ), className ) | ||||
| #define CATCH_GIVEN( desc ) | ||||
| #define CATCH_AND_GIVEN( desc ) | ||||
| #define CATCH_WHEN( desc ) | ||||
| #define CATCH_AND_WHEN( desc ) | ||||
| #define CATCH_THEN( desc ) | ||||
| @@ -341,6 +344,7 @@ using Catch::Detail::Approx; | ||||
| #define SCENARIO_METHOD( className, ... ) INTERNAL_CATCH_TESTCASE_METHOD_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ), className ) | ||||
|  | ||||
| #define GIVEN( desc ) | ||||
| #define AND_GIVEN( desc ) | ||||
| #define WHEN( desc ) | ||||
| #define AND_WHEN( desc ) | ||||
| #define THEN( desc ) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user