From d768a467b7329918818edb3c8362e72b9426c7f2 Mon Sep 17 00:00:00 2001 From: Aaron van Geffen Date: Sat, 23 Dec 2017 13:10:48 +0100 Subject: [PATCH] Implement std::string variant of TrimStart; add tests. This also makes String::TrimStart handle all-whitespace strings. --- src/openrct2/core/String.cpp | 9 ++++++++- src/openrct2/core/String.hpp | 1 + test/tests/StringTest.cpp | 39 +++++++++++++++++++++++------------- 3 files changed, 34 insertions(+), 15 deletions(-) diff --git a/src/openrct2/core/String.cpp b/src/openrct2/core/String.cpp index 636409629c..8356866763 100644 --- a/src/openrct2/core/String.cpp +++ b/src/openrct2/core/String.cpp @@ -508,7 +508,8 @@ namespace String } ch = nextCh; } - return str; + // String is all whitespace + return ch; } utf8 * TrimStart(utf8 * buffer, size_t bufferSize, const utf8 * src) @@ -516,6 +517,12 @@ namespace String return String::Set(buffer, bufferSize, TrimStart(src)); } + std::string TrimStart(const std::string &s) + { + const utf8 * trimmed = TrimStart(s.c_str()); + return std::string(trimmed); + } + std::string Trim(const std::string &s) { codepoint_t codepoint; diff --git a/src/openrct2/core/String.hpp b/src/openrct2/core/String.hpp index 48e96066cb..84f2ac1989 100644 --- a/src/openrct2/core/String.hpp +++ b/src/openrct2/core/String.hpp @@ -98,5 +98,6 @@ namespace String utf8 * Trim(utf8 * str); const utf8 * TrimStart(const utf8 * str); utf8 * TrimStart(utf8 * buffer, size_t bufferSize, const utf8 * src); + std::string TrimStart(const std::string &s); std::string Trim(const std::string &s); } diff --git a/test/tests/StringTest.cpp b/test/tests/StringTest.cpp index fc8a147340..d0d6c0951a 100644 --- a/test/tests/StringTest.cpp +++ b/test/tests/StringTest.cpp @@ -1,29 +1,31 @@ #include #include +#include #include #include #include "AssertHelpers.hpp" -using TCase = std::tuple; +using TCase = std::tuple; class StringTest : public testing::TestWithParam { }; INSTANTIATE_TEST_CASE_P(TrimData, StringTest, testing::Values( - TCase("string", "string"), - TCase(" string", "string"), - TCase("string ", "string"), - TCase(" some string ", "some string"), - TCase(" ", ""), - TCase(" ストリング", "ストリング"), - TCase("ストリング ", "ストリング"), - TCase(" ストリング ", "ストリング"), - TCase("    ", ""), - TCase("", ""), - TCase("\n", ""), - TCase("\n\n\n\r\n", ""), - TCase("\n\n\n\r\nstring\n\n", "string") + // input after Trim after TrimStart + TCase("string", "string", "string"), + TCase(" string", "string", "string"), + TCase("string ", "string", "string "), + TCase(" some string ", "some string", "some string "), + TCase(" ", "", ""), + TCase(" ストリング", "ストリング", "ストリング"), + TCase("ストリング ", "ストリング", "ストリング "), + TCase(" ストリング ", "ストリング", "ストリング "), + TCase("    ", "", ""), + TCase("", "", ""), + TCase("\n", "", ""), + TCase("\n\n\n\r\n", "", ""), + TCase("\n\n\n\r\nstring\n\n", "string", "string\n\n") )); TEST_P(StringTest, Trim) { @@ -34,6 +36,15 @@ TEST_P(StringTest, Trim) ASSERT_EQ(expected, actual); } +TEST_P(StringTest, TrimStart) +{ + auto testCase = GetParam(); + std::string input = std::get<0>(testCase); + std::string expected = std::get<2>(testCase); + std::string actual = String::TrimStart(input); + ASSERT_EQ(expected, actual); +} + TEST_F(StringTest, Split_ByComma) { auto actual = String::Split("a,bb,ccc,dd", ",");