|
245 | 245 | INTERNAL_CATCH_EXPAND_VARGS( INTERNAL_CATCH_TEMPLATE_TEST_CASE_METHOD_2( INTERNAL_CATCH_UNIQUE_NAME( CATCH2_INTERNAL_TEMPLATE_TEST_CLASS_ ), INTERNAL_CATCH_UNIQUE_NAME( CATCH2_INTERNAL_TEMPLATE_TEST_ ) , ClassName, Name, Tags, Signature, __VA_ARGS__ ) ) |
246 | 246 | #endif |
247 | 247 |
|
248 | | - #define INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_2(TestNameClass, TestName, ClassName, Name, Tags, Signature, TmplTypes, TypesList)\ |
249 | | - CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \ |
250 | | - CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \ |
251 | | - CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS \ |
252 | | - CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS \ |
253 | | - CATCH_INTERNAL_SUPPRESS_UNUSED_VARIABLE_WARNINGS \ |
254 | | - template<typename TestType> \ |
255 | | - struct TestName : INTERNAL_CATCH_REMOVE_PARENS(ClassName <TestType>) { \ |
256 | | - void test();\ |
257 | | - };\ |
258 | | - namespace {\ |
259 | | - namespace INTERNAL_CATCH_MAKE_NAMESPACE(TestNameClass) {\ |
260 | | - INTERNAL_CATCH_TYPE_GEN \ |
261 | | - INTERNAL_CATCH_NTTP_GEN(INTERNAL_CATCH_REMOVE_PARENS(Signature))\ |
262 | | - template<typename...Types>\ |
263 | | - struct TestNameClass{\ |
264 | | - void reg_tests(){\ |
265 | | - std::size_t index = 0;\ |
266 | | - using expander = std::size_t[];\ |
267 | | - constexpr char const* tmpl_types[] = {CATCH_REC_LIST(INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS, INTERNAL_CATCH_REMOVE_PARENS(TmplTypes))};\ |
268 | | - constexpr char const* types_list[] = {CATCH_REC_LIST(INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS, INTERNAL_CATCH_REMOVE_PARENS(TypesList))};\ |
269 | | - constexpr auto num_types = sizeof(types_list) / sizeof(types_list[0]);\ |
270 | | - (void)expander{(Catch::AutoReg( Catch::makeTestInvoker( &TestName<Types>::test ), CATCH_INTERNAL_LINEINFO, #ClassName, Catch::NameAndTags{ Name " - " + std::string(tmpl_types[index / num_types]) + '<' + types_list[index % num_types] + '>', Tags } ), index++)... };/* NOLINT */ \ |
271 | | - }\ |
272 | | - };\ |
273 | | - static const int INTERNAL_CATCH_UNIQUE_NAME( globalRegistrar ) = [](){\ |
274 | | - using TestInit = typename create<TestNameClass, decltype(get_wrapper<INTERNAL_CATCH_REMOVE_PARENS(TmplTypes)>(Catch::Detail::priority_tag<1>{})), TypeList<INTERNAL_CATCH_MAKE_TYPE_LISTS_FROM_TYPES(INTERNAL_CATCH_REMOVE_PARENS(TypesList))>>::type;\ |
275 | | - TestInit t;\ |
276 | | - t.reg_tests();\ |
277 | | - return 0;\ |
278 | | - }(); \ |
279 | | - }\ |
280 | | - }\ |
281 | | - CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION \ |
| 248 | +#define INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD_2(TestNameClass, TestName, ClassName, Name, Tags, Signature, TmplTypes, TypesList)\ |
| 249 | + CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \ |
| 250 | + CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \ |
| 251 | + CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS \ |
| 252 | + CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS \ |
| 253 | + CATCH_INTERNAL_SUPPRESS_UNUSED_VARIABLE_WARNINGS \ |
| 254 | + namespace {\ |
282 | 255 | template<typename TestType> \ |
283 | | - void TestName<TestType>::test() |
| 256 | + struct TestName : INTERNAL_CATCH_REMOVE_PARENS(ClassName <TestType>) { \ |
| 257 | + void test();\ |
| 258 | + };\ |
| 259 | + namespace INTERNAL_CATCH_MAKE_NAMESPACE(TestNameClass) {\ |
| 260 | + INTERNAL_CATCH_TYPE_GEN \ |
| 261 | + INTERNAL_CATCH_NTTP_GEN(INTERNAL_CATCH_REMOVE_PARENS(Signature))\ |
| 262 | + template<typename...Types>\ |
| 263 | + struct TestNameClass{\ |
| 264 | + void reg_tests(){\ |
| 265 | + std::size_t index = 0;\ |
| 266 | + using expander = std::size_t[];\ |
| 267 | + constexpr char const* tmpl_types[] = {CATCH_REC_LIST(INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS, INTERNAL_CATCH_REMOVE_PARENS(TmplTypes))};\ |
| 268 | + constexpr char const* types_list[] = {CATCH_REC_LIST(INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS, INTERNAL_CATCH_REMOVE_PARENS(TypesList))};\ |
| 269 | + constexpr auto num_types = sizeof(types_list) / sizeof(types_list[0]);\ |
| 270 | + (void)expander{(Catch::AutoReg( Catch::makeTestInvoker( &TestName<Types>::test ), CATCH_INTERNAL_LINEINFO, #ClassName, Catch::NameAndTags{ Name " - " + std::string(tmpl_types[index / num_types]) + '<' + types_list[index % num_types] + '>', Tags } ), index++)... };/* NOLINT */ \ |
| 271 | + }\ |
| 272 | + };\ |
| 273 | + static const int INTERNAL_CATCH_UNIQUE_NAME( globalRegistrar ) = [](){\ |
| 274 | + using TestInit = typename create<TestNameClass, decltype(get_wrapper<INTERNAL_CATCH_REMOVE_PARENS(TmplTypes)>(Catch::Detail::priority_tag<1>{})), TypeList<INTERNAL_CATCH_MAKE_TYPE_LISTS_FROM_TYPES(INTERNAL_CATCH_REMOVE_PARENS(TypesList))>>::type;\ |
| 275 | + TestInit t;\ |
| 276 | + t.reg_tests();\ |
| 277 | + return 0;\ |
| 278 | + }(); \ |
| 279 | + }\ |
| 280 | + }\ |
| 281 | + CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION \ |
| 282 | + template<typename TestType> \ |
| 283 | + void TestName<TestType>::test() |
284 | 284 |
|
285 | 285 | #ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR |
286 | 286 | #define INTERNAL_CATCH_TEMPLATE_PRODUCT_TEST_CASE_METHOD( ClassName, Name, Tags, ... )\ |
|
0 commit comments