@@ -232,6 +232,35 @@ struct AutoReg : NonCopyable {
232
232
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__ ) )
233
233
#endif
234
234
235
+ #define INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE_2 (TestName, TestFunc, Name, Tags, TmplList )\
236
+ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
237
+ template <typename TestType> static void TestFunc (); \
238
+ namespace {\
239
+ namespace INTERNAL_CATCH_MAKE_NAMESPACE ( TestName){\
240
+ INTERNAL_CATCH_TYPE_GEN\
241
+ template <typename ... Types> \
242
+ struct TestName { \
243
+ void reg_tests () { \
244
+ int index = 0 ; \
245
+ using expander = int []; \
246
+ (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 */ \
247
+ } \
248
+ };\
249
+ static int INTERNAL_CATCH_UNIQUE_NAME ( globalRegistrar ) = [](){ \
250
+ using TestInit = decltype (convert<TestName>(TmplList {})); \
251
+ TestInit t; \
252
+ t.reg_tests (); \
253
+ return 0 ; \
254
+ }(); \
255
+ }}\
256
+ CATCH_INTERNAL_UNSUPPRESS_GLOBALS_WARNINGS \
257
+ template <typename TestType> \
258
+ static void TestFunc ()
259
+
260
+ #define INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE (Name, Tags, TmplList) \
261
+ 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 )
262
+
263
+
235
264
#define INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_2 ( TestNameClass, TestName, ClassName, Name, Tags, Signature, ... ) \
236
265
CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
237
266
CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS \
@@ -327,5 +356,36 @@ struct AutoReg : NonCopyable {
327
356
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__ ) )
328
357
#endif
329
358
359
+ #define INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE_METHOD_2 ( TestNameClass, TestName, ClassName, Name, Tags, TmplList ) \
360
+ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \
361
+ template <typename TestType> \
362
+ struct TestName : INTERNAL_CATCH_REMOVE_PARENS(ClassName <TestType>) { \
363
+ void test ();\
364
+ };\
365
+ namespace {\
366
+ namespace INTERNAL_CATCH_MAKE_NAMESPACE ( TestName){ \
367
+ INTERNAL_CATCH_TYPE_GEN\
368
+ template <typename ...Types >\
369
+ struct TestNameClass {\
370
+ void reg_tests (){\
371
+ int index = 0 ;\
372
+ using expander = int [];\
373
+ (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 */ \
374
+ }\
375
+ };\
376
+ static int INTERNAL_CATCH_UNIQUE_NAME ( globalRegistrar ) = [](){\
377
+ using TestInit = decltype (convert<TestNameClass>(TmplList {}));\
378
+ TestInit t;\
379
+ t.reg_tests ();\
380
+ return 0 ;\
381
+ }(); \
382
+ }}\
383
+ CATCH_INTERNAL_UNSUPPRESS_GLOBALS_WARNINGS \
384
+ template <typename TestType> \
385
+ void TestName<TestType>::test()
386
+
387
+ #define INTERNAL_CATCH_TEMPLATE_LIST_TEST_CASE_METHOD (ClassName, Name, Tags, TmplList ) \
388
+ 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 )
389
+
330
390
331
391
#endif // TWOBLUECUBES_CATCH_TEST_REGISTRY_HPP_INCLUDED
0 commit comments