From c36f951eb0fd25d52a8ca9854425493231317005 Mon Sep 17 00:00:00 2001
From: Norbert Wenzel <norbert.wenzel@gmail.com>
Date: Tue, 8 Dec 2020 18:57:14 +0100
Subject: [PATCH] Add trivial tests for most test macros

For every macro only a single parameter set is used. This needs to test
all parameter combinations that are allowed for #2092.
---
 projects/CMakeLists.txt                       |  9 +--
 .../CMakeCTestRegistration.tests.cpp          | 72 +++++++++++++++++++
 2 files changed, 77 insertions(+), 4 deletions(-)
 create mode 100644 projects/SelfTest/UsageTests/CMakeCTestRegistration.tests.cpp

diff --git a/projects/CMakeLists.txt b/projects/CMakeLists.txt
index aee85974a0..94df06b311 100644
--- a/projects/CMakeLists.txt
+++ b/projects/CMakeLists.txt
@@ -32,6 +32,7 @@ set(TEST_SOURCES
         ${SELF_TEST_DIR}/UsageTests/BDD.tests.cpp
         ${SELF_TEST_DIR}/UsageTests/Benchmark.tests.cpp
         ${SELF_TEST_DIR}/UsageTests/Class.tests.cpp
+        ${SELF_TEST_DIR}/UsageTests/CMakeCTestRegistration.tests.cpp
         ${SELF_TEST_DIR}/UsageTests/Compilation.tests.cpp
         ${SELF_TEST_DIR}/UsageTests/Condition.tests.cpp
         ${SELF_TEST_DIR}/UsageTests/Decomposition.tests.cpp
@@ -379,21 +380,21 @@ set_tests_properties(RunTests PROPERTIES
 )
 
 add_test(NAME ListTests COMMAND $<TARGET_FILE:SelfTest> --list-tests --verbosity high)
-set_tests_properties(ListTests PROPERTIES 
+set_tests_properties(ListTests PROPERTIES
     PASS_REGULAR_EXPRESSION "[0-9]+ test cases"
     FAIL_REGULAR_EXPRESSION "Hidden Test"
 )
 
 add_test(NAME ListTags COMMAND $<TARGET_FILE:SelfTest> --list-tags)
-set_tests_properties(ListTags PROPERTIES 
-    PASS_REGULAR_EXPRESSION "[0-9]+ tags" 
+set_tests_properties(ListTags PROPERTIES
+    PASS_REGULAR_EXPRESSION "[0-9]+ tags"
     FAIL_REGULAR_EXPRESSION "\\[\\.\\]")
 
 add_test(NAME ListReporters COMMAND $<TARGET_FILE:SelfTest> --list-reporters)
 set_tests_properties(ListReporters PROPERTIES PASS_REGULAR_EXPRESSION "Available reporters:")
 
 add_test(NAME ListTestNamesOnly COMMAND $<TARGET_FILE:SelfTest> --list-test-names-only)
-set_tests_properties(ListTestNamesOnly PROPERTIES 
+set_tests_properties(ListTestNamesOnly PROPERTIES
     PASS_REGULAR_EXPRESSION "Regex string matcher"
     FAIL_REGULAR_EXPRESSION "Hidden Test")
 
diff --git a/projects/SelfTest/UsageTests/CMakeCTestRegistration.tests.cpp b/projects/SelfTest/UsageTests/CMakeCTestRegistration.tests.cpp
new file mode 100644
index 0000000000..9dc7606684
--- /dev/null
+++ b/projects/SelfTest/UsageTests/CMakeCTestRegistration.tests.cpp
@@ -0,0 +1,72 @@
+#include "catch.hpp"
+
+#include <tuple>
+
+namespace { namespace CMakeCTestRegistrationTests {
+
+static void testFunction(){}
+
+struct FakeFixture
+{
+    void fakeTest(){}
+};
+template<typename...> struct TemplateFixture{};
+template<int> struct FixtureWithValue{};
+
+template<typename> struct TemplateStruct{};
+template<int> struct CompileTimeValue{};
+
+using SimpleTestTypes = std::tuple<int>;
+
+
+SCENARIO("scenario", "[cmake_integration]"){}
+
+SCENARIO_METHOD(FakeFixture, "scenario_method", "[cmake_integration]"){}
+
+TEMPLATE_TEST_CASE("template_test_case", "[cmake_integration]", int){}
+
+TEMPLATE_TEST_CASE_SIG("template_test_case_sig", "[cmake_integration]", ((int V), V), 42){}
+
+TEMPLATE_TEST_CASE_METHOD(TemplateFixture, "template_test_case_method", "[cmake_integration]", int){}
+
+TEMPLATE_TEST_CASE_METHOD_SIG(FixtureWithValue,
+                              "template_test_case_method_sig",
+                              "[cmake_integration]",
+                              ((int V), V), 42)
+{}
+
+TEMPLATE_LIST_TEST_CASE("template_list_test_case", "[cmake_integration]", SimpleTestTypes){}
+
+TEMPLATE_LIST_TEST_CASE_METHOD(TemplateFixture,
+                               "template_list_test_case_method", "[cmake_integration]",
+                               SimpleTestTypes)
+{}
+
+TEMPLATE_PRODUCT_TEST_CASE("template_product_test_case", "[cmake_integration]", TemplateStruct, int){}
+
+TEMPLATE_PRODUCT_TEST_CASE_SIG("template_product_test_case_sig", "[cmake_integration]",
+                               ((int V), V), CompileTimeValue, 42)
+{}
+
+TEMPLATE_PRODUCT_TEST_CASE_METHOD(TemplateFixture,
+                                  "template_product_test_case_method",
+                                  "[cmake_integration]",
+                                  TemplateStruct, int)
+{}
+
+TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG(TemplateFixture,
+                                      "template_product_test_case_method_sig", "[cmake_integration]",
+                                      ((int V), V), CompileTimeValue, 42)
+{}
+
+TEST_CASE("test_case", "[cmake_integration]"){}
+
+TEST_CASE_METHOD(FakeFixture, "test_case_method", "[cmake_integration]"){}
+
+ANON_TEST_CASE(){}
+
+METHOD_AS_TEST_CASE(FakeFixture::fakeTest, "method_as_test_case", "[cmake_integration]")
+
+REGISTER_TEST_CASE(testFunction, "register_test_case", "[cmake_integration]")
+
+}} // namespace CMakeCTestRegistrationTests