mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-10-31 20:27:11 +01:00 
			
		
		
		
	Add STATIC_REQUIRE assertion
By default, it expands into a `static_assert` + `SUCCEED` pair, but it can also be deferred to runtime by defining `CATCH_CONFIG_RUNTIME_STATIC_REQUIRE`, which causes it to expand into plain old `REQUIRE`. Closes #1362 Closes #1356
This commit is contained in:
		| @@ -145,6 +145,15 @@ | ||||
|  | ||||
| #define CATCH_ANON_TEST_CASE() INTERNAL_CATCH_TESTCASE() | ||||
|  | ||||
| #if !defined(CATCH_CONFIG_RUNTIME_STATIC_REQUIRE) | ||||
| #define CATCH_STATIC_REQUIRE( ... )       static_assert(   __VA_ARGS__ ,      #__VA_ARGS__ );     CATCH_SUCCEED( #__VA_ARGS__ ) | ||||
| #define CATCH_STATIC_REQUIRE_FALSE( ... ) static_assert( !(__VA_ARGS__), "!(" #__VA_ARGS__ ")" ); CATCH_SUCCEED( #__VA_ARGS__ ) | ||||
| #else | ||||
| #define CATCH_STATIC_REQUIRE( ... )       CATCH_REQUIRE( __VA_ARGS__ ) | ||||
| #define CATCH_STATIC_REQUIRE_FALSE( ... ) CATCH_REQUIRE_FALSE( __VA_ARGS__ ) | ||||
| #endif | ||||
|  | ||||
|  | ||||
| // "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__ ) | ||||
| @@ -205,6 +214,14 @@ | ||||
| #define SUCCEED( ... ) INTERNAL_CATCH_MSG( "SUCCEED", Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ ) | ||||
| #define ANON_TEST_CASE() INTERNAL_CATCH_TESTCASE() | ||||
|  | ||||
| #if !defined(CATCH_CONFIG_RUNTIME_STATIC_REQUIRE) | ||||
| #define STATIC_REQUIRE( ... )       static_assert(   __VA_ARGS__,  #__VA_ARGS__ ); SUCCEED( #__VA_ARGS__ ) | ||||
| #define STATIC_REQUIRE_FALSE( ... ) static_assert( !(__VA_ARGS__), "!(" #__VA_ARGS__ ")" ); SUCCEED( "!(" #__VA_ARGS__ ")" ) | ||||
| #else | ||||
| #define STATIC_REQUIRE( ... )       REQUIRE( __VA_ARGS__ ) | ||||
| #define STATIC_REQUIRE_FALSE( ... ) REQUIRE_FALSE( __VA_ARGS__ ) | ||||
| #endif | ||||
|  | ||||
| #endif | ||||
|  | ||||
| #define CATCH_TRANSLATE_EXCEPTION( signature ) INTERNAL_CATCH_TRANSLATE_EXCEPTION( signature ) | ||||
| @@ -285,6 +302,9 @@ using Catch::Detail::Approx; | ||||
| #define CATCH_THEN( desc ) | ||||
| #define CATCH_AND_THEN( desc ) | ||||
|  | ||||
| #define CATCH_STATIC_REQUIRE( ... )       (void)(0) | ||||
| #define CATCH_STATIC_REQUIRE_FALSE( ... ) (void)(0) | ||||
|  | ||||
| // If CATCH_CONFIG_PREFIX_ALL is not defined then the CATCH_ prefix is not required | ||||
| #else | ||||
|  | ||||
| @@ -335,6 +355,10 @@ using Catch::Detail::Approx; | ||||
| #define SUCCEED( ... ) (void)(0) | ||||
| #define ANON_TEST_CASE() INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ )) | ||||
|  | ||||
|  | ||||
| #define STATIC_REQUIRE( ... )       (void)(0) | ||||
| #define STATIC_REQUIRE_FALSE( ... ) (void)(0) | ||||
|  | ||||
| #endif | ||||
|  | ||||
| #define CATCH_TRANSLATE_EXCEPTION( signature ) INTERNAL_CATCH_TRANSLATE_EXCEPTION_NO_REG( INTERNAL_CATCH_UNIQUE_NAME( catch_internal_ExceptionTranslator ), signature ) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Martin Hořeňovský
					Martin Hořeňovský