mirror of
https://github.com/catchorg/Catch2.git
synced 2024-11-26 23:36:11 +01:00
Support sentinel-based ranges in default stringify (#2004)
This commit is contained in:
parent
2b34b5c7d0
commit
284672cc84
@ -309,8 +309,8 @@ namespace Catch {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
namespace Detail {
|
namespace Detail {
|
||||||
template<typename InputIterator>
|
template<typename InputIterator, typename Sentinel = InputIterator>
|
||||||
std::string rangeToString(InputIterator first, InputIterator last) {
|
std::string rangeToString(InputIterator first, Sentinel last) {
|
||||||
ReusableStringStream rss;
|
ReusableStringStream rss;
|
||||||
rss << "{ ";
|
rss << "{ ";
|
||||||
if (first != last) {
|
if (first != last) {
|
||||||
|
@ -1203,6 +1203,7 @@ CmdLine.tests.cpp:<line number>: passed: config.benchmarkWarmupTime == 10 for: 1
|
|||||||
Misc.tests.cpp:<line number>: passed: std::tuple_size<TestType>::value >= 1 for: 3 >= 1
|
Misc.tests.cpp:<line number>: passed: std::tuple_size<TestType>::value >= 1 for: 3 >= 1
|
||||||
Misc.tests.cpp:<line number>: passed: std::tuple_size<TestType>::value >= 1 for: 2 >= 1
|
Misc.tests.cpp:<line number>: passed: std::tuple_size<TestType>::value >= 1 for: 2 >= 1
|
||||||
Misc.tests.cpp:<line number>: passed: std::tuple_size<TestType>::value >= 1 for: 1 >= 1
|
Misc.tests.cpp:<line number>: passed: std::tuple_size<TestType>::value >= 1 for: 1 >= 1
|
||||||
|
ToString.tests.cpp:<line number>: passed: Catch::Detail::stringify(UsesSentinel{}) == "{ }" for: "{ }" == "{ }"
|
||||||
Decomposition.tests.cpp:<line number>: failed: truthy(false) for: Hey, its truthy!
|
Decomposition.tests.cpp:<line number>: failed: truthy(false) for: Hey, its truthy!
|
||||||
Matchers.tests.cpp:<line number>: failed: testStringForMatching(), Matches("this STRING contains 'abc' as a substring") for: "this string contains 'abc' as a substring" matches "this STRING contains 'abc' as a substring" case sensitively
|
Matchers.tests.cpp:<line number>: failed: testStringForMatching(), Matches("this STRING contains 'abc' as a substring") for: "this string contains 'abc' as a substring" matches "this STRING contains 'abc' as a substring" case sensitively
|
||||||
Matchers.tests.cpp:<line number>: failed: testStringForMatching(), Matches("contains 'abc' as a substring") for: "this string contains 'abc' as a substring" matches "contains 'abc' as a substring" case sensitively
|
Matchers.tests.cpp:<line number>: failed: testStringForMatching(), Matches("contains 'abc' as a substring") for: "this string contains 'abc' as a substring" matches "contains 'abc' as a substring" case sensitively
|
||||||
|
@ -1380,6 +1380,6 @@ due to unexpected exception with message:
|
|||||||
Why would you throw a std::string?
|
Why would you throw a std::string?
|
||||||
|
|
||||||
===============================================================================
|
===============================================================================
|
||||||
test cases: 321 | 247 passed | 70 failed | 4 failed as expected
|
test cases: 322 | 248 passed | 70 failed | 4 failed as expected
|
||||||
assertions: 1758 | 1606 passed | 131 failed | 21 failed as expected
|
assertions: 1759 | 1607 passed | 131 failed | 21 failed as expected
|
||||||
|
|
||||||
|
@ -8895,6 +8895,17 @@ Misc.tests.cpp:<line number>: PASSED:
|
|||||||
with expansion:
|
with expansion:
|
||||||
1 >= 1
|
1 >= 1
|
||||||
|
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
Range type with sentinel
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
ToString.tests.cpp:<line number>
|
||||||
|
...............................................................................
|
||||||
|
|
||||||
|
ToString.tests.cpp:<line number>: PASSED:
|
||||||
|
CHECK( Catch::Detail::stringify(UsesSentinel{}) == "{ }" )
|
||||||
|
with expansion:
|
||||||
|
"{ }" == "{ }"
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Reconstruction should be based on stringification: #914
|
Reconstruction should be based on stringification: #914
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
@ -14127,6 +14138,6 @@ Misc.tests.cpp:<line number>
|
|||||||
Misc.tests.cpp:<line number>: PASSED:
|
Misc.tests.cpp:<line number>: PASSED:
|
||||||
|
|
||||||
===============================================================================
|
===============================================================================
|
||||||
test cases: 321 | 231 passed | 86 failed | 4 failed as expected
|
test cases: 322 | 232 passed | 86 failed | 4 failed as expected
|
||||||
assertions: 1775 | 1606 passed | 148 failed | 21 failed as expected
|
assertions: 1776 | 1607 passed | 148 failed | 21 failed as expected
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<testsuitesloose text artifact
|
<testsuitesloose text artifact
|
||||||
>
|
>
|
||||||
<testsuite name="<exe-name>" errors="17" failures="132" tests="1776" hostname="tbd" time="{duration}" timestamp="{iso8601-timestamp}">
|
<testsuite name="<exe-name>" errors="17" failures="132" tests="1777" hostname="tbd" time="{duration}" timestamp="{iso8601-timestamp}">
|
||||||
<properties>
|
<properties>
|
||||||
<property name="filters" value="~[!nonportable]~[!benchmark]~[approvals]"/>
|
<property name="filters" value="~[!nonportable]~[!benchmark]~[approvals]"/>
|
||||||
<property name="random-seed" value="1"/>
|
<property name="random-seed" value="1"/>
|
||||||
@ -1045,6 +1045,7 @@ Message.tests.cpp:<line number>
|
|||||||
<testcase classname="<exe-name>.global" name="Product with differing arities - std::tuple<int, double, float>" time="{duration}" status="run"/>
|
<testcase classname="<exe-name>.global" name="Product with differing arities - std::tuple<int, double, float>" time="{duration}" status="run"/>
|
||||||
<testcase classname="<exe-name>.global" name="Product with differing arities - std::tuple<int, double>" time="{duration}" status="run"/>
|
<testcase classname="<exe-name>.global" name="Product with differing arities - std::tuple<int, double>" time="{duration}" status="run"/>
|
||||||
<testcase classname="<exe-name>.global" name="Product with differing arities - std::tuple<int>" time="{duration}" status="run"/>
|
<testcase classname="<exe-name>.global" name="Product with differing arities - std::tuple<int>" time="{duration}" status="run"/>
|
||||||
|
<testcase classname="<exe-name>.global" name="Range type with sentinel" time="{duration}" status="run"/>
|
||||||
<testcase classname="<exe-name>.global" name="Reconstruction should be based on stringification: #914" time="{duration}" status="run">
|
<testcase classname="<exe-name>.global" name="Reconstruction should be based on stringification: #914" time="{duration}" status="run">
|
||||||
<failure message="truthy(false)" type="CHECK">
|
<failure message="truthy(false)" type="CHECK">
|
||||||
FAILED:
|
FAILED:
|
||||||
|
@ -162,6 +162,7 @@
|
|||||||
</file>
|
</file>
|
||||||
<file path="projects/<exe-name>/IntrospectiveTests/ToString.tests.cpp">
|
<file path="projects/<exe-name>/IntrospectiveTests/ToString.tests.cpp">
|
||||||
<testCase name="Directly creating an EnumInfo" duration="{duration}"/>
|
<testCase name="Directly creating an EnumInfo" duration="{duration}"/>
|
||||||
|
<testCase name="Range type with sentinel" duration="{duration}"/>
|
||||||
<testCase name="parseEnums/No enums" duration="{duration}"/>
|
<testCase name="parseEnums/No enums" duration="{duration}"/>
|
||||||
<testCase name="parseEnums/One enum value" duration="{duration}"/>
|
<testCase name="parseEnums/One enum value" duration="{duration}"/>
|
||||||
<testCase name="parseEnums/Multiple enum values" duration="{duration}"/>
|
<testCase name="parseEnums/Multiple enum values" duration="{duration}"/>
|
||||||
|
@ -10962,6 +10962,17 @@ Nor would this
|
|||||||
</Expression>
|
</Expression>
|
||||||
<OverallResult success="true"/>
|
<OverallResult success="true"/>
|
||||||
</TestCase>
|
</TestCase>
|
||||||
|
<TestCase name="Range type with sentinel" filename="projects/<exe-name>/IntrospectiveTests/ToString.tests.cpp" >
|
||||||
|
<Expression success="true" type="CHECK" filename="projects/<exe-name>/IntrospectiveTests/ToString.tests.cpp" >
|
||||||
|
<Original>
|
||||||
|
Catch::Detail::stringify(UsesSentinel{}) == "{ }"
|
||||||
|
</Original>
|
||||||
|
<Expanded>
|
||||||
|
"{ }" == "{ }"
|
||||||
|
</Expanded>
|
||||||
|
</Expression>
|
||||||
|
<OverallResult success="true"/>
|
||||||
|
</TestCase>
|
||||||
<TestCase name="Reconstruction should be based on stringification: #914" tags="[!hide][.][Decomposition][failing]" filename="projects/<exe-name>/UsageTests/Decomposition.tests.cpp" >
|
<TestCase name="Reconstruction should be based on stringification: #914" tags="[!hide][.][Decomposition][failing]" filename="projects/<exe-name>/UsageTests/Decomposition.tests.cpp" >
|
||||||
<Expression success="false" type="CHECK" filename="projects/<exe-name>/UsageTests/Decomposition.tests.cpp" >
|
<Expression success="false" type="CHECK" filename="projects/<exe-name>/UsageTests/Decomposition.tests.cpp" >
|
||||||
<Original>
|
<Original>
|
||||||
@ -16711,9 +16722,9 @@ loose text artifact
|
|||||||
</Section>
|
</Section>
|
||||||
<OverallResult success="true"/>
|
<OverallResult success="true"/>
|
||||||
</TestCase>
|
</TestCase>
|
||||||
<OverallResults successes="1606" failures="149" expectedFailures="21"/>
|
<OverallResults successes="1607" failures="149" expectedFailures="21"/>
|
||||||
<OverallResultsCases successes="231" failures="86" expectedFailures="4"/>
|
<OverallResultsCases successes="232" failures="86" expectedFailures="4"/>
|
||||||
</Group>
|
</Group>
|
||||||
<OverallResults successes="1606" failures="148" expectedFailures="21"/>
|
<OverallResults successes="1607" failures="148" expectedFailures="21"/>
|
||||||
<OverallResultsCases successes="231" failures="86" expectedFailures="4"/>
|
<OverallResultsCases successes="232" failures="86" expectedFailures="4"/>
|
||||||
</Catch>
|
</Catch>
|
||||||
|
@ -4,6 +4,13 @@
|
|||||||
|
|
||||||
enum class EnumClass3 { Value1, Value2, Value3, Value4 };
|
enum class EnumClass3 { Value1, Value2, Value3, Value4 };
|
||||||
|
|
||||||
|
struct UsesSentinel {
|
||||||
|
using const_iterator = int const*;
|
||||||
|
using const_sentinel = std::nullptr_t;
|
||||||
|
|
||||||
|
const_iterator begin() const { return nullptr; }
|
||||||
|
const_iterator end() const { return nullptr; }
|
||||||
|
};
|
||||||
|
|
||||||
TEST_CASE( "parseEnums", "[Strings][enums]" ) {
|
TEST_CASE( "parseEnums", "[Strings][enums]" ) {
|
||||||
using namespace Catch::Matchers;
|
using namespace Catch::Matchers;
|
||||||
@ -40,3 +47,7 @@ TEST_CASE( "Directly creating an EnumInfo" ) {
|
|||||||
CHECK( enumInfo->lookup(1) == "Value2" );
|
CHECK( enumInfo->lookup(1) == "Value2" );
|
||||||
CHECK( enumInfo->lookup(3) == "{** unexpected enum value **}" );
|
CHECK( enumInfo->lookup(3) == "{** unexpected enum value **}" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_CASE("Range type with sentinel") {
|
||||||
|
CHECK( Catch::Detail::stringify(UsesSentinel{}) == "{ }" );
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user