1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 07:58:11 +00:00

AK: Add a String factory to create a string from a single code point

This commit is contained in:
Timothy Flynn 2023-01-21 12:34:01 -05:00 committed by Linus Groh
parent 8aca8e82cb
commit 12c8bc3e85
2 changed files with 43 additions and 1 deletions

View file

@ -4,9 +4,12 @@
* SPDX-License-Identifier: BSD-2-Clause
*/
// This is included first on purpose. We specifically do not want LibTest to override VERIFY here so
// that we can actually test that some String factory methods cause a crash with invalid input.
#include <AK/String.h>
#include <LibTest/TestCase.h>
#include <AK/String.h>
#include <AK/StringBuilder.h>
#include <AK/Try.h>
#include <AK/Utf8View.h>
@ -64,6 +67,26 @@ TEST_CASE(long_strings)
EXPECT_EQ(string.bytes_as_string_view(), "abcdefgh"sv);
}
TEST_CASE(from_code_points)
{
for (u32 code_point = 0; code_point < 0x80; ++code_point) {
auto string = String::from_code_point(code_point);
auto ch = static_cast<char>(code_point);
StringView view { &ch, 1 };
EXPECT_EQ(string, view);
}
auto string = String::from_code_point(0x10ffff);
EXPECT_EQ(string, "\xF4\x8F\xBF\xBF"sv);
EXPECT_CRASH("Creating a string from an invalid code point", [] {
String::from_code_point(0xffffffff);
return Test::Crash::Failure::DidNotCrash;
});
}
TEST_CASE(substring)
{
auto superstring = MUST(String::from_utf8("Hello I am a long string"sv));