mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-08-28 05:07:35 +00:00
AK: Ensure StringBuilder encodes U+10000 as 2 UTF-16 code units
This commit is contained in:
parent
1b611fba67
commit
298ec6a12a
Notes:
github-actions[bot]
2025-08-07 00:07:09 +00:00
Author: https://github.com/trflynn89
Commit: 298ec6a12a
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/5746
Reviewed-by: https://github.com/gmta ✅
2 changed files with 22 additions and 4 deletions
|
@ -370,7 +370,7 @@ void StringBuilder::append_code_point(u32 code_point)
|
|||
if (m_mode == Mode::UTF16) {
|
||||
(void)(will_append(2));
|
||||
|
||||
if (code_point <= UnicodeUtils::FIRST_SUPPLEMENTARY_PLANE_CODE_POINT) {
|
||||
if (code_point < UnicodeUtils::FIRST_SUPPLEMENTARY_PLANE_CODE_POINT) {
|
||||
auto code_unit = static_cast<char16_t>(code_point);
|
||||
m_buffer.append(&code_unit, sizeof(code_unit));
|
||||
return;
|
||||
|
|
|
@ -343,6 +343,7 @@ TEST_CASE(formatted)
|
|||
u"ABCDEFGHIJKLMNOPQRSTUVWXYZ"sv,
|
||||
u"\xd83d\xde00"sv,
|
||||
u"abcdefghijklmnopqrstuvwxyz"sv,
|
||||
u"\xd800\xdc00"sv,
|
||||
u"ABCDEFGHIJKLMNOPQRSTUVWXYZ"sv,
|
||||
u"🍕"sv,
|
||||
u"abcdefghijklmnopqrstuvwxyz"sv,
|
||||
|
@ -354,9 +355,9 @@ TEST_CASE(formatted)
|
|||
EXPECT(!string.is_ascii());
|
||||
EXPECT(!string.has_long_ascii_storage());
|
||||
EXPECT(!string.has_short_ascii_storage());
|
||||
EXPECT_EQ(string.length_in_code_units(), 174uz);
|
||||
EXPECT_EQ(string.length_in_code_points(), 172uz);
|
||||
EXPECT_EQ(string, u"abcdefghijklmnopqrstuvwxyz--ABCDEFGHIJKLMNOPQRSTUVWXYZ--😀--abcdefghijklmnopqrstuvwxyz--ABCDEFGHIJKLMNOPQRSTUVWXYZ--🍕--abcdefghijklmnopqrstuvwxyz--ABCDEFGHIJKLMNOPQRSTUVWXYZ"sv);
|
||||
EXPECT_EQ(string.length_in_code_units(), 178uz);
|
||||
EXPECT_EQ(string.length_in_code_points(), 175uz);
|
||||
EXPECT_EQ(string, u"abcdefghijklmnopqrstuvwxyz--ABCDEFGHIJKLMNOPQRSTUVWXYZ--😀--abcdefghijklmnopqrstuvwxyz--𐀀--ABCDEFGHIJKLMNOPQRSTUVWXYZ--🍕--abcdefghijklmnopqrstuvwxyz--ABCDEFGHIJKLMNOPQRSTUVWXYZ"sv);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -415,6 +416,23 @@ TEST_CASE(repeated)
|
|||
EXPECT_DEATH("Creating a string from an invalid code point", (void)Utf16String::repeated(0xffffffff, 1));
|
||||
}
|
||||
|
||||
TEST_CASE(from_string_builder)
|
||||
{
|
||||
StringBuilder builder(StringBuilder::Mode::UTF16);
|
||||
builder.append_code_point('a');
|
||||
builder.append_code_point('b');
|
||||
builder.append_code_point(0x1f600);
|
||||
builder.append_code_point(0x10000);
|
||||
builder.append_code_point(0x1f355);
|
||||
builder.append_code_point('c');
|
||||
builder.append_code_point('d');
|
||||
|
||||
auto string = builder.to_utf16_string();
|
||||
EXPECT_EQ(string.length_in_code_units(), 10uz);
|
||||
EXPECT_EQ(string.length_in_code_points(), 7uz);
|
||||
EXPECT_EQ(string, "ab😀𐀀🍕cd"sv);
|
||||
}
|
||||
|
||||
TEST_CASE(from_ipc_stream)
|
||||
{
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue