1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 15:07:45 +00:00

AK: Make String::substring() return non-null for 0-length strings

This also makes String::split() give non-null strings when keep_empty is
true.
This commit is contained in:
Peter Elliott 2020-07-25 21:09:33 -06:00 committed by Andreas Kling
parent 9dcbb263f1
commit e57a432118
2 changed files with 26 additions and 1 deletions

View file

@ -125,7 +125,7 @@ String String::isolated_copy() const
String String::substring(size_t start, size_t length) const String String::substring(size_t start, size_t length) const
{ {
if (!length) if (!length)
return {}; return "";
ASSERT(m_impl); ASSERT(m_impl);
ASSERT(start + length <= m_impl->length()); ASSERT(start + length <= m_impl->length());
// FIXME: This needs some input bounds checking. // FIXME: This needs some input bounds checking.

View file

@ -188,6 +188,16 @@ TEST_CASE(replace)
EXPECT(test_string == "111._.|||._.|||"); EXPECT(test_string == "111._.|||._.|||");
} }
TEST_CASE(substring)
{
String test = "abcdef";
EXPECT_EQ(test.substring(0, 6), test);
EXPECT_EQ(test.substring(0, 3), "abc");
EXPECT_EQ(test.substring(3, 3), "def");
EXPECT_EQ(test.substring(3, 0), "");
EXPECT_EQ(test.substring(6, 0), "");
}
TEST_CASE(split) TEST_CASE(split)
{ {
String test = "foo bar baz"; String test = "foo bar baz";
@ -200,6 +210,21 @@ TEST_CASE(split)
EXPECT_EQ(parts[0].characters()[3], '\0'); EXPECT_EQ(parts[0].characters()[3], '\0');
EXPECT_EQ(parts[1].characters()[3], '\0'); EXPECT_EQ(parts[1].characters()[3], '\0');
EXPECT_EQ(parts[2].characters()[3], '\0'); EXPECT_EQ(parts[2].characters()[3], '\0');
test = "a b";
parts = test.split(' ');
EXPECT_EQ(parts.size(), 2u);
EXPECT_EQ(parts[0], "a");
EXPECT_EQ(parts[1], "b");
parts = test.split(' ', true);
EXPECT_EQ(parts.size(), 5u);
EXPECT_EQ(parts[0], "a");
EXPECT_EQ(parts[1], "");
EXPECT_EQ(parts[2], "");
EXPECT_EQ(parts[3], "");
EXPECT_EQ(parts[4], "b");
} }
TEST_CASE(builder_zero_initial_capacity) TEST_CASE(builder_zero_initial_capacity)