mirror of
https://github.com/catchorg/Catch2.git
synced 2024-12-23 03:43:28 +01:00
Add trim for StringRef
This commit is contained in:
parent
b77ab74b72
commit
f2c2711bdc
@ -53,6 +53,18 @@ namespace Catch {
|
||||
return start != std::string::npos ? str.substr( start, 1+end-start ) : std::string();
|
||||
}
|
||||
|
||||
StringRef trim(StringRef ref) {
|
||||
const auto is_ws = [](char c) {
|
||||
return c == ' ' || c == '\t' || c == '\n' || c == '\r';
|
||||
};
|
||||
size_t real_begin = 0;
|
||||
while (real_begin < ref.size() && is_ws(ref[real_begin])) { ++real_begin; }
|
||||
size_t real_end = ref.size();
|
||||
while (real_end > real_begin && is_ws(ref[real_end - 1])) { --real_end; }
|
||||
|
||||
return ref.substr(real_begin, real_end - real_begin);
|
||||
}
|
||||
|
||||
bool replaceInPlace( std::string& str, std::string const& replaceThis, std::string const& withThis ) {
|
||||
bool replaced = false;
|
||||
std::size_t i = str.find( replaceThis );
|
||||
|
@ -22,7 +22,10 @@ namespace Catch {
|
||||
bool contains( std::string const& s, std::string const& infix );
|
||||
void toLowerInPlace( std::string& s );
|
||||
std::string toLower( std::string const& s );
|
||||
//! Returns a new string without whitespace at the start/end
|
||||
std::string trim( std::string const& str );
|
||||
//! Returns a substring of the original ref without whitespace. Beware lifetimes!
|
||||
StringRef trim(StringRef ref);
|
||||
|
||||
// !!! Be aware, returns refs into original string - make sure original string outlives them
|
||||
std::vector<StringRef> splitStringRef( StringRef str, char delimiter );
|
||||
|
@ -1311,6 +1311,18 @@ StringManip.tests.cpp:<line number>: passed: trim(std::string(trailing_whitespac
|
||||
StringManip.tests.cpp:<line number>: passed: trim(std::string(whitespace_at_both_ends)) == no_whitespace for: "There is no extra whitespace here"
|
||||
==
|
||||
"There is no extra whitespace here"
|
||||
StringManip.tests.cpp:<line number>: passed: trim(StringRef(no_whitespace)) == StringRef(no_whitespace) for: There is no extra whitespace here
|
||||
==
|
||||
There is no extra whitespace here
|
||||
StringManip.tests.cpp:<line number>: passed: trim(StringRef(leading_whitespace)) == StringRef(no_whitespace) for: There is no extra whitespace here
|
||||
==
|
||||
There is no extra whitespace here
|
||||
StringManip.tests.cpp:<line number>: passed: trim(StringRef(trailing_whitespace)) == StringRef(no_whitespace) for: There is no extra whitespace here
|
||||
==
|
||||
There is no extra whitespace here
|
||||
StringManip.tests.cpp:<line number>: passed: trim(StringRef(whitespace_at_both_ends)) == StringRef(no_whitespace) for: There is no extra whitespace here
|
||||
==
|
||||
There is no extra whitespace here
|
||||
Exception.tests.cpp:<line number>: failed: unexpected exception with message: '3.14'
|
||||
Approx.tests.cpp:<line number>: passed: d == approx( 1.23 ) for: 1.23 == Approx( 1.23 )
|
||||
Approx.tests.cpp:<line number>: passed: d == approx( 1.22 ) for: 1.23 == Approx( 1.22 )
|
||||
|
@ -1381,5 +1381,5 @@ due to unexpected exception with message:
|
||||
|
||||
===============================================================================
|
||||
test cases: 300 | 226 passed | 70 failed | 4 failed as expected
|
||||
assertions: 1558 | 1406 passed | 131 failed | 21 failed as expected
|
||||
assertions: 1562 | 1410 passed | 131 failed | 21 failed as expected
|
||||
|
||||
|
@ -9813,6 +9813,34 @@ with expansion:
|
||||
==
|
||||
"There is no extra whitespace here"
|
||||
|
||||
StringManip.tests.cpp:<line number>: PASSED:
|
||||
REQUIRE( trim(StringRef(no_whitespace)) == StringRef(no_whitespace) )
|
||||
with expansion:
|
||||
There is no extra whitespace here
|
||||
==
|
||||
There is no extra whitespace here
|
||||
|
||||
StringManip.tests.cpp:<line number>: PASSED:
|
||||
REQUIRE( trim(StringRef(leading_whitespace)) == StringRef(no_whitespace) )
|
||||
with expansion:
|
||||
There is no extra whitespace here
|
||||
==
|
||||
There is no extra whitespace here
|
||||
|
||||
StringManip.tests.cpp:<line number>: PASSED:
|
||||
REQUIRE( trim(StringRef(trailing_whitespace)) == StringRef(no_whitespace) )
|
||||
with expansion:
|
||||
There is no extra whitespace here
|
||||
==
|
||||
There is no extra whitespace here
|
||||
|
||||
StringManip.tests.cpp:<line number>: PASSED:
|
||||
REQUIRE( trim(StringRef(whitespace_at_both_ends)) == StringRef(no_whitespace) )
|
||||
with expansion:
|
||||
There is no extra whitespace here
|
||||
==
|
||||
There is no extra whitespace here
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
Unexpected exceptions can be translated
|
||||
-------------------------------------------------------------------------------
|
||||
@ -12456,5 +12484,5 @@ Misc.tests.cpp:<line number>: PASSED:
|
||||
|
||||
===============================================================================
|
||||
test cases: 300 | 210 passed | 86 failed | 4 failed as expected
|
||||
assertions: 1575 | 1406 passed | 148 failed | 21 failed as expected
|
||||
assertions: 1579 | 1410 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="1576" hostname="tbd" time="{duration}" timestamp="{iso8601-timestamp}">
|
||||
<testsuite name="<exe-name>" errors="17" failures="132" tests="1580" hostname="tbd" time="{duration}" timestamp="{iso8601-timestamp}">
|
||||
<properties>
|
||||
<property name="filters" value="~[!nonportable]~[!benchmark]~[approvals]"/>
|
||||
<property name="random-seed" value="1"/>
|
||||
|
@ -11854,6 +11854,46 @@ Message from section two
|
||||
"There is no extra whitespace here"
|
||||
</Expanded>
|
||||
</Expression>
|
||||
<Expression success="true" type="REQUIRE" filename="projects/<exe-name>/IntrospectiveTests/StringManip.tests.cpp" >
|
||||
<Original>
|
||||
trim(StringRef(no_whitespace)) == StringRef(no_whitespace)
|
||||
</Original>
|
||||
<Expanded>
|
||||
There is no extra whitespace here
|
||||
==
|
||||
There is no extra whitespace here
|
||||
</Expanded>
|
||||
</Expression>
|
||||
<Expression success="true" type="REQUIRE" filename="projects/<exe-name>/IntrospectiveTests/StringManip.tests.cpp" >
|
||||
<Original>
|
||||
trim(StringRef(leading_whitespace)) == StringRef(no_whitespace)
|
||||
</Original>
|
||||
<Expanded>
|
||||
There is no extra whitespace here
|
||||
==
|
||||
There is no extra whitespace here
|
||||
</Expanded>
|
||||
</Expression>
|
||||
<Expression success="true" type="REQUIRE" filename="projects/<exe-name>/IntrospectiveTests/StringManip.tests.cpp" >
|
||||
<Original>
|
||||
trim(StringRef(trailing_whitespace)) == StringRef(no_whitespace)
|
||||
</Original>
|
||||
<Expanded>
|
||||
There is no extra whitespace here
|
||||
==
|
||||
There is no extra whitespace here
|
||||
</Expanded>
|
||||
</Expression>
|
||||
<Expression success="true" type="REQUIRE" filename="projects/<exe-name>/IntrospectiveTests/StringManip.tests.cpp" >
|
||||
<Original>
|
||||
trim(StringRef(whitespace_at_both_ends)) == StringRef(no_whitespace)
|
||||
</Original>
|
||||
<Expanded>
|
||||
There is no extra whitespace here
|
||||
==
|
||||
There is no extra whitespace here
|
||||
</Expanded>
|
||||
</Expression>
|
||||
<OverallResult success="true"/>
|
||||
</TestCase>
|
||||
<TestCase name="Unexpected exceptions can be translated" tags="[!throws][.][failing]" filename="projects/<exe-name>/UsageTests/Exception.tests.cpp" >
|
||||
@ -14821,7 +14861,7 @@ loose text artifact
|
||||
</Section>
|
||||
<OverallResult success="true"/>
|
||||
</TestCase>
|
||||
<OverallResults successes="1406" failures="149" expectedFailures="21"/>
|
||||
<OverallResults successes="1410" failures="149" expectedFailures="21"/>
|
||||
</Group>
|
||||
<OverallResults successes="1406" failures="148" expectedFailures="21"/>
|
||||
<OverallResults successes="1410" failures="148" expectedFailures="21"/>
|
||||
</Catch>
|
||||
|
@ -10,9 +10,15 @@ static const char * const whitespace_at_both_ends = " \r\n \t There is no extra
|
||||
TEST_CASE("Trim strings", "[string-manip]") {
|
||||
using Catch::trim; using Catch::StringRef;
|
||||
static_assert(std::is_same<std::string, decltype(trim(std::string{}))>::value, "Trimming std::string should return std::string");
|
||||
static_assert(std::is_same<StringRef, decltype(trim(StringRef{}))>::value, "Trimming StringRef should return StringRef");
|
||||
|
||||
REQUIRE(trim(std::string(no_whitespace)) == no_whitespace);
|
||||
REQUIRE(trim(std::string(leading_whitespace)) == no_whitespace);
|
||||
REQUIRE(trim(std::string(trailing_whitespace)) == no_whitespace);
|
||||
REQUIRE(trim(std::string(whitespace_at_both_ends)) == no_whitespace);
|
||||
|
||||
REQUIRE(trim(StringRef(no_whitespace)) == StringRef(no_whitespace));
|
||||
REQUIRE(trim(StringRef(leading_whitespace)) == StringRef(no_whitespace));
|
||||
REQUIRE(trim(StringRef(trailing_whitespace)) == StringRef(no_whitespace));
|
||||
REQUIRE(trim(StringRef(whitespace_at_both_ends)) == StringRef(no_whitespace));
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user