1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-02-02 19:56:13 +01:00

Implement std::string variant of TrimStart; add tests.

This also makes String::TrimStart handle all-whitespace strings.
This commit is contained in:
Aaron van Geffen
2017-12-23 13:10:48 +01:00
committed by Michael Steenbeek
parent 4bc2ad18c4
commit d768a467b7
3 changed files with 34 additions and 15 deletions

View File

@@ -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;

View File

@@ -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);
}

View File

@@ -1,29 +1,31 @@
#include <string>
#include <tuple>
#include <utility>
#include <gtest/gtest.h>
#include <openrct2/core/String.hpp>
#include "AssertHelpers.hpp"
using TCase = std::tuple<std::string, std::string>;
using TCase = std::tuple<std::string, std::string, std::string>;
class StringTest : public testing::TestWithParam<TCase>
{
};
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", ",");