mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-11-04 05:59:32 +01:00 
			
		
		
		
	Fix non-default-constructible type lists used in TEMPLATE_LIST_TEST_CASE (#1697)
* Fix non-default-constructible type lists used in TEMPLATE_LIST_TEST_CASE std::tuple is not default constructible when the first type is not default-constuctible. Therefore it can not be instantiated. to circumvent this, we have to use std::declval in the unevaluate decltype context.
This commit is contained in:
		
				
					committed by
					
						
						Martin Hořeňovský
					
				
			
			
				
	
			
			
			
						parent
						
							a22b7df46c
						
					
				
				
					commit
					e7c26f09d1
				
			@@ -247,7 +247,7 @@ struct AutoReg : NonCopyable {
 | 
			
		||||
            }                                                     \
 | 
			
		||||
        };\
 | 
			
		||||
        static int INTERNAL_CATCH_UNIQUE_NAME( globalRegistrar ) = [](){ \
 | 
			
		||||
                using TestInit = decltype(convert<TestName>(TmplList {})); \
 | 
			
		||||
                using TestInit = decltype(convert<TestName>(std::declval<TmplList>())); \
 | 
			
		||||
                TestInit t;                                           \
 | 
			
		||||
                t.reg_tests();                                        \
 | 
			
		||||
                return 0;                                             \
 | 
			
		||||
@@ -374,7 +374,7 @@ struct AutoReg : NonCopyable {
 | 
			
		||||
                }\
 | 
			
		||||
            };\
 | 
			
		||||
            static int INTERNAL_CATCH_UNIQUE_NAME( globalRegistrar ) = [](){\
 | 
			
		||||
                using TestInit = decltype(convert<TestNameClass>(TmplList {}));\
 | 
			
		||||
                using TestInit = decltype(convert<TestNameClass>(std::declval<TmplList>()));\
 | 
			
		||||
                TestInit t;\
 | 
			
		||||
                t.reg_tests();\
 | 
			
		||||
                return 0;\
 | 
			
		||||
 
 | 
			
		||||
@@ -1084,6 +1084,9 @@ Tag.tests.cpp:<line number>: passed: registry.add( "[@no square bracket at end",
 | 
			
		||||
Class.tests.cpp:<line number>: passed: Template_Fixture<TestType>::m_a == 1 for: 1 == 1
 | 
			
		||||
Class.tests.cpp:<line number>: passed: Template_Fixture<TestType>::m_a == 1 for: 1 == 1
 | 
			
		||||
Class.tests.cpp:<line number>: passed: Template_Fixture<TestType>::m_a == 1 for: 1.0 == 1
 | 
			
		||||
Misc.tests.cpp:<line number>: passed: sizeof(TestType) > 0 for: 1 > 0
 | 
			
		||||
Misc.tests.cpp:<line number>: passed: sizeof(TestType) > 0 for: 1 > 0
 | 
			
		||||
Misc.tests.cpp:<line number>: passed: sizeof(TestType) > 0 for: 4 > 0
 | 
			
		||||
Misc.tests.cpp:<line number>: passed: sizeof(TestType) > 0 for: 4 > 0
 | 
			
		||||
Misc.tests.cpp:<line number>: passed: sizeof(TestType) > 0 for: 1 > 0
 | 
			
		||||
Misc.tests.cpp:<line number>: passed: sizeof(TestType) > 0 for: 4 > 0
 | 
			
		||||
 
 | 
			
		||||
@@ -1380,6 +1380,6 @@ due to unexpected exception with message:
 | 
			
		||||
  Why would you throw a std::string?
 | 
			
		||||
 | 
			
		||||
===============================================================================
 | 
			
		||||
test cases:  295 |  221 passed |  70 failed |  4 failed as expected
 | 
			
		||||
assertions: 1550 | 1398 passed | 131 failed | 21 failed as expected
 | 
			
		||||
test cases:  298 |  224 passed |  70 failed |  4 failed as expected
 | 
			
		||||
assertions: 1553 | 1401 passed | 131 failed | 21 failed as expected
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -8022,6 +8022,42 @@ Class.tests.cpp:<line number>: PASSED:
 | 
			
		||||
with expansion:
 | 
			
		||||
  1.0 == 1
 | 
			
		||||
 | 
			
		||||
-------------------------------------------------------------------------------
 | 
			
		||||
Template test case with test types specified inside non-default-constructible
 | 
			
		||||
std::tuple - MyNonDefaultConstructibleTypes - 0
 | 
			
		||||
-------------------------------------------------------------------------------
 | 
			
		||||
Misc.tests.cpp:<line number>
 | 
			
		||||
...............................................................................
 | 
			
		||||
 | 
			
		||||
Misc.tests.cpp:<line number>: PASSED:
 | 
			
		||||
  REQUIRE( sizeof(TestType) > 0 )
 | 
			
		||||
with expansion:
 | 
			
		||||
  1 > 0
 | 
			
		||||
 | 
			
		||||
-------------------------------------------------------------------------------
 | 
			
		||||
Template test case with test types specified inside non-default-constructible
 | 
			
		||||
std::tuple - MyNonDefaultConstructibleTypes - 1
 | 
			
		||||
-------------------------------------------------------------------------------
 | 
			
		||||
Misc.tests.cpp:<line number>
 | 
			
		||||
...............................................................................
 | 
			
		||||
 | 
			
		||||
Misc.tests.cpp:<line number>: PASSED:
 | 
			
		||||
  REQUIRE( sizeof(TestType) > 0 )
 | 
			
		||||
with expansion:
 | 
			
		||||
  1 > 0
 | 
			
		||||
 | 
			
		||||
-------------------------------------------------------------------------------
 | 
			
		||||
Template test case with test types specified inside non-default-constructible
 | 
			
		||||
std::tuple - MyNonDefaultConstructibleTypes - 2
 | 
			
		||||
-------------------------------------------------------------------------------
 | 
			
		||||
Misc.tests.cpp:<line number>
 | 
			
		||||
...............................................................................
 | 
			
		||||
 | 
			
		||||
Misc.tests.cpp:<line number>: PASSED:
 | 
			
		||||
  REQUIRE( sizeof(TestType) > 0 )
 | 
			
		||||
with expansion:
 | 
			
		||||
  4 > 0
 | 
			
		||||
 | 
			
		||||
-------------------------------------------------------------------------------
 | 
			
		||||
Template test case with test types specified inside std::tuple - MyTypes - 0
 | 
			
		||||
-------------------------------------------------------------------------------
 | 
			
		||||
@@ -12373,6 +12409,6 @@ Misc.tests.cpp:<line number>
 | 
			
		||||
Misc.tests.cpp:<line number>: PASSED:
 | 
			
		||||
 | 
			
		||||
===============================================================================
 | 
			
		||||
test cases:  295 |  205 passed |  86 failed |  4 failed as expected
 | 
			
		||||
assertions: 1567 | 1398 passed | 148 failed | 21 failed as expected
 | 
			
		||||
test cases:  298 |  208 passed |  86 failed |  4 failed as expected
 | 
			
		||||
assertions: 1570 | 1401 passed | 148 failed | 21 failed as expected
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<testsuitesloose text artifact
 | 
			
		||||
>
 | 
			
		||||
  <testsuite name="<exe-name>" errors="17" failures="132" tests="1568" hostname="tbd" time="{duration}" timestamp="{iso8601-timestamp}">
 | 
			
		||||
  <testsuite name="<exe-name>" errors="17" failures="132" tests="1571" hostname="tbd" time="{duration}" timestamp="{iso8601-timestamp}">
 | 
			
		||||
    <properties>
 | 
			
		||||
      <property name="filters" value="~[!nonportable]~[!benchmark]~[approvals]"/>
 | 
			
		||||
      <property name="random-seed" value="1"/>
 | 
			
		||||
@@ -750,6 +750,9 @@ Misc.tests.cpp:<line number>
 | 
			
		||||
    <testcase classname="<exe-name>.Template_Fixture" name="Template test case method with test types specified inside std::tuple - MyTypes - 0" time="{duration}"/>
 | 
			
		||||
    <testcase classname="<exe-name>.Template_Fixture" name="Template test case method with test types specified inside std::tuple - MyTypes - 1" time="{duration}"/>
 | 
			
		||||
    <testcase classname="<exe-name>.Template_Fixture" name="Template test case method with test types specified inside std::tuple - MyTypes - 2" time="{duration}"/>
 | 
			
		||||
    <testcase classname="<exe-name>.global" name="Template test case with test types specified inside non-default-constructible std::tuple - MyNonDefaultConstructibleTypes - 0" time="{duration}"/>
 | 
			
		||||
    <testcase classname="<exe-name>.global" name="Template test case with test types specified inside non-default-constructible std::tuple - MyNonDefaultConstructibleTypes - 1" time="{duration}"/>
 | 
			
		||||
    <testcase classname="<exe-name>.global" name="Template test case with test types specified inside non-default-constructible std::tuple - MyNonDefaultConstructibleTypes - 2" time="{duration}"/>
 | 
			
		||||
    <testcase classname="<exe-name>.global" name="Template test case with test types specified inside std::tuple - MyTypes - 0" time="{duration}"/>
 | 
			
		||||
    <testcase classname="<exe-name>.global" name="Template test case with test types specified inside std::tuple - MyTypes - 1" time="{duration}"/>
 | 
			
		||||
    <testcase classname="<exe-name>.global" name="Template test case with test types specified inside std::tuple - MyTypes - 2" time="{duration}"/>
 | 
			
		||||
 
 | 
			
		||||
@@ -9895,6 +9895,39 @@ Message from section two
 | 
			
		||||
      </Expression>
 | 
			
		||||
      <OverallResult success="true"/>
 | 
			
		||||
    </TestCase>
 | 
			
		||||
    <TestCase name="Template test case with test types specified inside non-default-constructible std::tuple - MyNonDefaultConstructibleTypes - 0" tags="[list][template]" filename="projects/<exe-name>/UsageTests/Misc.tests.cpp" >
 | 
			
		||||
      <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/UsageTests/Misc.tests.cpp" >
 | 
			
		||||
        <Original>
 | 
			
		||||
          sizeof(TestType) > 0
 | 
			
		||||
        </Original>
 | 
			
		||||
        <Expanded>
 | 
			
		||||
          1 > 0
 | 
			
		||||
        </Expanded>
 | 
			
		||||
      </Expression>
 | 
			
		||||
      <OverallResult success="true"/>
 | 
			
		||||
    </TestCase>
 | 
			
		||||
    <TestCase name="Template test case with test types specified inside non-default-constructible std::tuple - MyNonDefaultConstructibleTypes - 1" tags="[list][template]" filename="projects/<exe-name>/UsageTests/Misc.tests.cpp" >
 | 
			
		||||
      <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/UsageTests/Misc.tests.cpp" >
 | 
			
		||||
        <Original>
 | 
			
		||||
          sizeof(TestType) > 0
 | 
			
		||||
        </Original>
 | 
			
		||||
        <Expanded>
 | 
			
		||||
          1 > 0
 | 
			
		||||
        </Expanded>
 | 
			
		||||
      </Expression>
 | 
			
		||||
      <OverallResult success="true"/>
 | 
			
		||||
    </TestCase>
 | 
			
		||||
    <TestCase name="Template test case with test types specified inside non-default-constructible std::tuple - MyNonDefaultConstructibleTypes - 2" tags="[list][template]" filename="projects/<exe-name>/UsageTests/Misc.tests.cpp" >
 | 
			
		||||
      <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/UsageTests/Misc.tests.cpp" >
 | 
			
		||||
        <Original>
 | 
			
		||||
          sizeof(TestType) > 0
 | 
			
		||||
        </Original>
 | 
			
		||||
        <Expanded>
 | 
			
		||||
          4 > 0
 | 
			
		||||
        </Expanded>
 | 
			
		||||
      </Expression>
 | 
			
		||||
      <OverallResult success="true"/>
 | 
			
		||||
    </TestCase>
 | 
			
		||||
    <TestCase name="Template test case with test types specified inside std::tuple - MyTypes - 0" tags="[list][template]" filename="projects/<exe-name>/UsageTests/Misc.tests.cpp" >
 | 
			
		||||
      <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/UsageTests/Misc.tests.cpp" >
 | 
			
		||||
        <Original>
 | 
			
		||||
@@ -14734,7 +14767,7 @@ loose text artifact
 | 
			
		||||
      </Section>
 | 
			
		||||
      <OverallResult success="true"/>
 | 
			
		||||
    </TestCase>
 | 
			
		||||
    <OverallResults successes="1398" failures="149" expectedFailures="21"/>
 | 
			
		||||
    <OverallResults successes="1401" failures="149" expectedFailures="21"/>
 | 
			
		||||
  </Group>
 | 
			
		||||
  <OverallResults successes="1398" failures="148" expectedFailures="21"/>
 | 
			
		||||
  <OverallResults successes="1401" failures="148" expectedFailures="21"/>
 | 
			
		||||
</Catch>
 | 
			
		||||
 
 | 
			
		||||
@@ -371,6 +371,16 @@ TEMPLATE_LIST_TEST_CASE("Template test case with test types specified inside std
 | 
			
		||||
    REQUIRE(sizeof(TestType) > 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
struct NonDefaultConstructibleType {
 | 
			
		||||
    NonDefaultConstructibleType() = delete;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
using MyNonDefaultConstructibleTypes = std::tuple<NonDefaultConstructibleType, char, float>;
 | 
			
		||||
TEMPLATE_LIST_TEST_CASE("Template test case with test types specified inside non-default-constructible std::tuple", "[template][list]", MyNonDefaultConstructibleTypes)
 | 
			
		||||
{
 | 
			
		||||
    REQUIRE(sizeof(TestType) > 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// https://github.com/philsquared/Catch/issues/166
 | 
			
		||||
TEST_CASE("A couple of nested sections followed by a failure", "[failing][.]") {
 | 
			
		||||
    SECTION("Outer")
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user