Add STATIC_REQUIRE assertion

By default, it expands into a `static_assert` + `SUCCEED` pair, but
it can also be deferred to runtime by defining
`CATCH_CONFIG_RUNTIME_STATIC_REQUIRE`, which causes it to expand
into plain old `REQUIRE`.

Closes #1362
Closes #1356
This commit is contained in:
Martin Hořeňovský
2018-10-13 21:29:59 +02:00
parent 0144ae9ad2
commit 054d356332
8 changed files with 75 additions and 18 deletions

View File

@@ -496,6 +496,8 @@ Exception.tests.cpp:<line number>: failed: unexpected exception with message: 'c
Tricky.tests.cpp:<line number>: passed: True for: {?}
Tricky.tests.cpp:<line number>: passed: !False for: true
Tricky.tests.cpp:<line number>: passed: !(False) for: !{?}
Compilation.tests.cpp:<line number>: passed: with 1 message: 'std::is_void<void>::value'
Compilation.tests.cpp:<line number>: passed: with 1 message: '!(std::is_void<int>::value)'
Condition.tests.cpp:<line number>: failed: data.int_seven > 7 for: 7 > 7
Condition.tests.cpp:<line number>: failed: data.int_seven < 7 for: 7 < 7
Condition.tests.cpp:<line number>: failed: data.int_seven > 8 for: 7 > 8

View File

@@ -1098,6 +1098,6 @@ due to unexpected exception with message:
Why would you throw a std::string?
===============================================================================
test cases: 214 | 161 passed | 49 failed | 4 failed as expected
assertions: 1229 | 1100 passed | 108 failed | 21 failed as expected
test cases: 215 | 162 passed | 49 failed | 4 failed as expected
assertions: 1231 | 1102 passed | 108 failed | 21 failed as expected

View File

@@ -4411,6 +4411,22 @@ PASSED:
with expansion:
!{?}
-------------------------------------------------------------------------------
Optionally static assertions
-------------------------------------------------------------------------------
Compilation.tests.cpp:<line number>
...............................................................................
Compilation.tests.cpp:<line number>:
PASSED:
with message:
std::is_void<void>::value
Compilation.tests.cpp:<line number>:
PASSED:
with message:
!(std::is_void<int>::value)
-------------------------------------------------------------------------------
Ordering comparison checks that should fail
-------------------------------------------------------------------------------
@@ -10848,6 +10864,6 @@ Misc.tests.cpp:<line number>:
PASSED:
===============================================================================
test cases: 214 | 148 passed | 62 failed | 4 failed as expected
assertions: 1243 | 1100 passed | 122 failed | 21 failed as expected
test cases: 215 | 149 passed | 62 failed | 4 failed as expected
assertions: 1245 | 1102 passed | 122 failed | 21 failed as expected

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<testsuitesloose text artifact
>
<testsuite name="<exe-name>" errors="17" failures="106" tests="1244" hostname="tbd" time="{duration}" timestamp="{iso8601-timestamp}">
<testsuite name="<exe-name>" errors="17" failures="106" tests="1246" hostname="tbd" time="{duration}" timestamp="{iso8601-timestamp}">
<testcase classname="<exe-name>.global" name="# A test name that starts with a #" time="{duration}"/>
<testcase classname="<exe-name>.global" name="#1005: Comparing pointer to int and long (NULL can be either on various systems)" time="{duration}"/>
<testcase classname="<exe-name>.global" name="#1027" time="{duration}"/>
@@ -375,6 +375,7 @@ Exception.tests.cpp:<line number>
</error>
</testcase>
<testcase classname="<exe-name>.global" name="Objects that evaluated in boolean contexts can be checked" time="{duration}"/>
<testcase classname="<exe-name>.global" name="Optionally static assertions" time="{duration}"/>
<testcase classname="<exe-name>.global" name="Ordering comparison checks that should fail" time="{duration}">
<failure message="7 > 7" type="CHECK">
Condition.tests.cpp:<line number>

View File

@@ -4409,6 +4409,9 @@
</Expression>
<OverallResult success="true"/>
</TestCase>
<TestCase name="Optionally static assertions" tags="[compilation]" filename="projects/<exe-name>/UsageTests/Compilation.tests.cpp" >
<OverallResult success="true"/>
</TestCase>
<TestCase name="Ordering comparison checks that should fail" tags="[.][failing]" filename="projects/<exe-name>/UsageTests/Condition.tests.cpp" >
<Expression success="false" type="CHECK" filename="projects/<exe-name>/UsageTests/Condition.tests.cpp" >
<Original>
@@ -11333,7 +11336,7 @@ loose text artifact
</Section>
<OverallResult success="true"/>
</TestCase>
<OverallResults successes="1100" failures="123" expectedFailures="21"/>
<OverallResults successes="1102" failures="123" expectedFailures="21"/>
</Group>
<OverallResults successes="1100" failures="122" expectedFailures="21"/>
<OverallResults successes="1102" failures="122" expectedFailures="21"/>
</Catch>