summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--AK/StringUtils.cpp4
-rw-r--r--Tests/AK/TestStringUtils.cpp11
2 files changed, 13 insertions, 2 deletions
diff --git a/AK/StringUtils.cpp b/AK/StringUtils.cpp
index bc2ae22e7a..e283df0ce3 100644
--- a/AK/StringUtils.cpp
+++ b/AK/StringUtils.cpp
@@ -338,10 +338,10 @@ StringView trim(StringView str, StringView characters, TrimMode mode)
}
if (mode == TrimMode::Right || mode == TrimMode::Both) {
- for (size_t i = str.length() - 1; i > 0; --i) {
+ for (size_t i = str.length(); i > 0; --i) {
if (substring_length == 0)
return ""sv;
- if (!characters.contains(str[i]))
+ if (!characters.contains(str[i - 1]))
break;
--substring_length;
}
diff --git a/Tests/AK/TestStringUtils.cpp b/Tests/AK/TestStringUtils.cpp
index 356024ce07..a06227c137 100644
--- a/Tests/AK/TestStringUtils.cpp
+++ b/Tests/AK/TestStringUtils.cpp
@@ -338,6 +338,17 @@ TEST_CASE(is_whitespace)
EXPECT(!AK::StringUtils::is_whitespace("a\t"sv));
}
+TEST_CASE(trim)
+{
+ EXPECT_EQ(AK::StringUtils::trim("aaa.a."sv, "."sv, TrimMode::Right), "aaa.a"sv);
+ EXPECT_EQ(AK::StringUtils::trim("...aaa"sv, "."sv, TrimMode::Left), "aaa"sv);
+ EXPECT_EQ(AK::StringUtils::trim("...aaa.a..."sv, "."sv, TrimMode::Both), "aaa.a"sv);
+ EXPECT_EQ(AK::StringUtils::trim("."sv, "."sv, TrimMode::Right), ""sv);
+ EXPECT_EQ(AK::StringUtils::trim("."sv, "."sv, TrimMode::Left), ""sv);
+ EXPECT_EQ(AK::StringUtils::trim("."sv, "."sv, TrimMode::Both), ""sv);
+ EXPECT_EQ(AK::StringUtils::trim("..."sv, "."sv, TrimMode::Both), ""sv);
+}
+
TEST_CASE(find)
{
String test_string = "1234567";