mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-10-31 12:17:11 +01:00 
			
		
		
		
	 Jozef Grajciar
					Jozef Grajciar
				
			
				
					committed by
					
						 Martin Hořeňovský
						Martin Hořeňovský
					
				
			
			
				
	
			
			
			 Martin Hořeňovský
						Martin Hořeňovský
					
				
			
						parent
						
							c365ac392b
						
					
				
				
					commit
					f2cfc2b852
				
			| @@ -259,6 +259,8 @@ | ||||
| #define TEMPLATE_PRODUCT_TEST_CASE_SIG( ... ) INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_SIG( __VA_ARGS__ ) | ||||
| #define TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, __VA_ARGS__ ) | ||||
| #define TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, __VA_ARGS__ ) | ||||
| #define TEMPLATE_LIST_TEST_CASE( ... ) INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE(__VA_ARGS__) | ||||
| #define TEMPLATE_LIST_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE_METHOD( className, __VA_ARGS__ ) | ||||
| #else | ||||
| #define TEMPLATE_TEST_CASE( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE( __VA_ARGS__ ) ) | ||||
| #define TEMPLATE_TEST_CASE_SIG( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_SIG( __VA_ARGS__ ) ) | ||||
| @@ -268,6 +270,8 @@ | ||||
| #define TEMPLATE_PRODUCT_TEST_CASE_SIG( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_SIG( __VA_ARGS__ ) ) | ||||
| #define TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD( className, __VA_ARGS__ ) ) | ||||
| #define TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG( className, __VA_ARGS__ ) ) | ||||
| #define TEMPLATE_LIST_TEST_CASE( ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE( __VA_ARGS__ ) ) | ||||
| #define TEMPLATE_LIST_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE_METHOD( className, __VA_ARGS__ ) ) | ||||
| #endif | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -31,4 +31,8 @@ struct is_callable<Fun(Args...)> : decltype(is_callable_tester::test<Fun, Args.. | ||||
|  | ||||
| } // namespace Catch | ||||
|  | ||||
| namespace mpl_{ | ||||
|     struct na; | ||||
| } | ||||
|  | ||||
| #endif // TWOBLUECUBES_CATCH_META_HPP_INCLUDED | ||||
|   | ||||
| @@ -107,6 +107,8 @@ | ||||
|     constexpr auto append(L1<E1...>, L2<E2...>) noexcept -> L1<E1...,E2...> { return {}; }\ | ||||
|     template< template<typename...> class L1, typename...E1, template<typename...> class L2, typename...E2, typename...Rest>\ | ||||
|     constexpr auto append(L1<E1...>, L2<E2...>, Rest...) noexcept -> decltype(append(L1<E1...,E2...>{}, Rest{}...)) { return {}; }\ | ||||
|     template< template<typename...> class L1, typename...E1, typename...Rest>\ | ||||
|     constexpr auto append(L1<E1...>, TypeList<mpl_::na>, Rest...) noexcept -> L1<E1...> { return {}; }\ | ||||
|     \ | ||||
|     template< template<typename...> class Container, template<typename...> class List, typename...elems>\ | ||||
|     constexpr auto rewrap(List<elems...>) noexcept -> TypeList<Container<elems...>> { return {}; }\ | ||||
| @@ -114,7 +116,9 @@ | ||||
|     constexpr auto rewrap(List<Elems...>,Elements...) noexcept -> decltype(append(TypeList<Container<Elems...>>{}, rewrap<Container>(Elements{}...))) { return {}; }\ | ||||
|     \ | ||||
|     template<template <typename...> class Final, template< typename...> class...Containers, typename...Types>\ | ||||
|     constexpr auto create(TypeList<Types...>) noexcept -> decltype(append(Final<>{}, rewrap<Containers>(Types{}...)...)) { return {}; } | ||||
|     constexpr auto create(TypeList<Types...>) noexcept -> decltype(append(Final<>{}, rewrap<Containers>(Types{}...)...)) { return {}; }\ | ||||
|     template<template <typename...> class Final, template <typename...> class List, typename...Ts>\ | ||||
|     constexpr auto convert(List<Ts...>) noexcept -> decltype(append(Final<>{},TypeList<Ts>{}...)) { return {}; } | ||||
|  | ||||
| #define INTERNAL_CATCH_NTTP_1(signature, ...)\ | ||||
|     template<INTERNAL_CATCH_REMOVE_PARENS(signature)> struct Nttp{};\ | ||||
|   | ||||
| @@ -232,6 +232,35 @@ struct AutoReg : NonCopyable { | ||||
|         INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____ ), INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____F_U_N_C____ ), Name, Tags, Signature, __VA_ARGS__ ) ) | ||||
| #endif | ||||
|  | ||||
|     #define INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE_2(TestName, TestFunc, Name, Tags, TmplList)\ | ||||
|         CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \ | ||||
|         template<typename TestType> static void TestFunc();       \ | ||||
|         namespace {\ | ||||
|         namespace INTERNAL_CATCH_MAKE_NAMESPACE(TestName){\ | ||||
|         INTERNAL_CATCH_TYPE_GEN\ | ||||
|         template<typename... Types>                               \ | ||||
|         struct TestName {                                         \ | ||||
|             void reg_tests() {                                          \ | ||||
|                 int index = 0;                                    \ | ||||
|                 using expander = int[];                           \ | ||||
|                 (void)expander{(Catch::AutoReg( Catch::makeTestInvoker( &TestFunc<Types> ), CATCH_INTERNAL_LINEINFO, Catch::StringRef(), Catch::NameAndTags{ Name " - " + std::string(INTERNAL_CATCH_STRINGIZE(TmplList)) + " - " + std::to_string(index), Tags } ), index++, 0)... };/* NOLINT */\ | ||||
|             }                                                     \ | ||||
|         };\ | ||||
|         static int INTERNAL_CATCH_UNIQUE_NAME( globalRegistrar ) = [](){ \ | ||||
|                 using TestInit = decltype(convert<TestName>(TmplList {})); \ | ||||
|                 TestInit t;                                           \ | ||||
|                 t.reg_tests();                                        \ | ||||
|                 return 0;                                             \ | ||||
|             }();                                                        \ | ||||
|         }}\ | ||||
|         CATCH_INTERNAL_UNSUPPRESS_GLOBALS_WARNINGS                    \ | ||||
|         template<typename TestType>                                   \ | ||||
|         static void TestFunc() | ||||
|  | ||||
|     #define INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE(Name, Tags, TmplList) \ | ||||
|         INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE_2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____ ), INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____F_U_N_C____ ), Name, Tags, TmplList ) | ||||
|  | ||||
|  | ||||
|     #define INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_2( TestNameClass, TestName, ClassName, Name, Tags, Signature, ... ) \ | ||||
|         CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \ | ||||
|         CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS \ | ||||
| @@ -327,5 +356,36 @@ struct AutoReg : NonCopyable { | ||||
|         INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____ ), INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____F_U_N_C____ ), ClassName, Name, Tags, Signature,__VA_ARGS__ ) ) | ||||
| #endif | ||||
|  | ||||
|     #define INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE_METHOD_2( TestNameClass, TestName, ClassName, Name, Tags, TmplList) \ | ||||
|         CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \ | ||||
|         template<typename TestType> \ | ||||
|         struct TestName : INTERNAL_CATCH_REMOVE_PARENS(ClassName <TestType>) { \ | ||||
|             void test();\ | ||||
|         };\ | ||||
|         namespace {\ | ||||
|         namespace INTERNAL_CATCH_MAKE_NAMESPACE(TestName){ \ | ||||
|             INTERNAL_CATCH_TYPE_GEN\ | ||||
|             template<typename...Types>\ | ||||
|             struct TestNameClass{\ | ||||
|                 void reg_tests(){\ | ||||
|                     int index = 0;\ | ||||
|                     using expander = int[];\ | ||||
|                     (void)expander{(Catch::AutoReg( Catch::makeTestInvoker( &TestName<Types>::test ), CATCH_INTERNAL_LINEINFO, #ClassName, Catch::NameAndTags{ Name " - " + std::string(INTERNAL_CATCH_STRINGIZE(TmplList)) + " - " + std::to_string(index), Tags } ), index++, 0)... };/* NOLINT */ \ | ||||
|                 }\ | ||||
|             };\ | ||||
|             static int INTERNAL_CATCH_UNIQUE_NAME( globalRegistrar ) = [](){\ | ||||
|                 using TestInit = decltype(convert<TestNameClass>(TmplList {}));\ | ||||
|                 TestInit t;\ | ||||
|                 t.reg_tests();\ | ||||
|                 return 0;\ | ||||
|             }(); \ | ||||
|         }}\ | ||||
|         CATCH_INTERNAL_UNSUPPRESS_GLOBALS_WARNINGS \ | ||||
|         template<typename TestType> \ | ||||
|         void TestName<TestType>::test() | ||||
|  | ||||
| #define INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE_METHOD(ClassName, Name, Tags, TmplList) \ | ||||
|         INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE_METHOD_2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____ ), INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_M_P_L_A_T_E____T_E_S_T____F_U_N_C____ ), ClassName, Name, Tags, TmplList ) | ||||
|  | ||||
|  | ||||
| #endif // TWOBLUECUBES_CATCH_TEST_REGISTRY_HPP_INCLUDED | ||||
|   | ||||
		Reference in New Issue
	
	Block a user