Tests/LibTextCodec: Do not refer to concrete encoders/decoders
Which allows for their removal from the header file once the implementation is ported to rust.
This commit is contained in:
parent
c982385ffe
commit
73ec316214
2 changed files with 20 additions and 23 deletions
|
|
@ -33,16 +33,13 @@ static Vector<u32> process_code_points(TextCodec::Decoder& decoder, StringView i
|
|||
|
||||
TEST_CASE(test_utf8_decode)
|
||||
{
|
||||
auto decoder = TextCodec::UTF8Decoder();
|
||||
auto& decoder = decoder_for("UTF-8"sv);
|
||||
// Bytes for U+1F600 GRINNING FACE
|
||||
auto test_string = "\xf0\x9f\x98\x80"sv;
|
||||
|
||||
EXPECT(decoder.validate(test_string));
|
||||
|
||||
Vector<u32> processed_code_points;
|
||||
MUST(decoder.process(test_string, [&](u32 code_point) {
|
||||
return processed_code_points.try_append(code_point);
|
||||
}));
|
||||
auto processed_code_points = process_code_points(decoder, test_string);
|
||||
EXPECT(processed_code_points.size() == 1);
|
||||
EXPECT(processed_code_points[0] == 0x1F600);
|
||||
|
||||
|
|
@ -51,7 +48,7 @@ TEST_CASE(test_utf8_decode)
|
|||
|
||||
TEST_CASE(test_utf8_process_code_points)
|
||||
{
|
||||
auto decoder = TextCodec::UTF8Decoder();
|
||||
auto& decoder = decoder_for("UTF-8"sv);
|
||||
auto test_string = "A\xf0\x9f\x98\x80"sv;
|
||||
|
||||
EXPECT_EQ(process_code_points(decoder, test_string), (Vector<u32> { 0x41, 0x1F600 }));
|
||||
|
|
@ -59,7 +56,7 @@ TEST_CASE(test_utf8_process_code_points)
|
|||
|
||||
TEST_CASE(test_utf8_process_code_points_replaces_surrogates)
|
||||
{
|
||||
auto decoder = TextCodec::UTF8Decoder();
|
||||
auto& decoder = decoder_for("UTF-8"sv);
|
||||
auto utf8_encoded_surrogate_bytes = Vector<u8> { 0xed, 0xa0, 0x80 };
|
||||
auto utf8_encoded_surrogate = StringView(bytes(utf8_encoded_surrogate_bytes));
|
||||
|
||||
|
|
@ -70,7 +67,7 @@ TEST_CASE(test_utf8_process_code_points_replaces_surrogates)
|
|||
|
||||
TEST_CASE(test_utf8_process_code_points_replaces_truncated_tail_as_single_error)
|
||||
{
|
||||
auto decoder = TextCodec::UTF8Decoder();
|
||||
auto& decoder = decoder_for("UTF-8"sv);
|
||||
auto truncated_tail_bytes = Vector<u8> { 0xf0, 0x9f, 0x98 };
|
||||
auto truncated_tail = StringView(bytes(truncated_tail_bytes));
|
||||
|
||||
|
|
@ -81,7 +78,7 @@ TEST_CASE(test_utf8_process_code_points_replaces_truncated_tail_as_single_error)
|
|||
|
||||
TEST_CASE(test_utf8_process_code_points_replaces_overlong_sequences)
|
||||
{
|
||||
auto decoder = TextCodec::UTF8Decoder();
|
||||
auto& decoder = decoder_for("UTF-8"sv);
|
||||
auto overlong_null_bytes = Vector<u8> { 0xc0, 0x80 };
|
||||
auto overlong_null = StringView(bytes(overlong_null_bytes));
|
||||
|
||||
|
|
@ -92,7 +89,7 @@ TEST_CASE(test_utf8_process_code_points_replaces_overlong_sequences)
|
|||
|
||||
TEST_CASE(test_utf8_process_code_points_restores_invalid_second_byte)
|
||||
{
|
||||
auto decoder = TextCodec::UTF8Decoder();
|
||||
auto& decoder = decoder_for("UTF-8"sv);
|
||||
auto overlong_three_byte_sequence_bytes = Vector<u8> { 0xe0, 0x80, 0x80 };
|
||||
auto overlong_three_byte_sequence = StringView(bytes(overlong_three_byte_sequence_bytes));
|
||||
auto out_of_range_four_byte_sequence_bytes = Vector<u8> { 0xf4, 0x90, 0x80, 0x80 };
|
||||
|
|
@ -109,7 +106,7 @@ TEST_CASE(test_utf8_process_code_points_restores_invalid_second_byte)
|
|||
|
||||
TEST_CASE(test_utf16be_decode)
|
||||
{
|
||||
auto decoder = TextCodec::UTF16BEDecoder();
|
||||
auto& decoder = decoder_for("UTF-16BE"sv);
|
||||
// This is the output of `python3 -c "print('säk😀'.encode('utf-16be'))"`.
|
||||
auto test_string = "\x00s\x00\xe4\x00k\xd8=\xde\x00"sv;
|
||||
|
||||
|
|
@ -120,7 +117,7 @@ TEST_CASE(test_utf16be_decode)
|
|||
|
||||
TEST_CASE(test_utf16be_process_code_points)
|
||||
{
|
||||
auto decoder = TextCodec::UTF16BEDecoder();
|
||||
auto& decoder = decoder_for("UTF-16BE"sv);
|
||||
|
||||
EXPECT_EQ(process_code_points(decoder, StringView(bytes({ 0xfe, 0xff, 0x00, 'A', 0xd8, 0x3d, 0xde, 0x00 }))), (Vector<u32> { 0x41, 0x1F600 }));
|
||||
EXPECT_EQ(process_code_points(decoder, StringView(bytes({ 0xd8, 0x3d, 0x00, 'A', 0xde, 0x00 }))), (Vector<u32> { 0xfffd, 0x41, 0xfffd }));
|
||||
|
|
@ -241,7 +238,7 @@ TEST_CASE(test_streaming_decoder_shift_jis_tail)
|
|||
|
||||
TEST_CASE(test_utf16le_decode)
|
||||
{
|
||||
auto decoder = TextCodec::UTF16LEDecoder();
|
||||
auto& decoder = decoder_for("UTF-16LE"sv);
|
||||
// This is the output of `python3 -c "print('säk😀'.encode('utf-16le'))"`.
|
||||
auto test_string = "s\x00\xe4\x00k\x00=\xd8\x00\xde"sv;
|
||||
|
||||
|
|
@ -252,7 +249,7 @@ TEST_CASE(test_utf16le_decode)
|
|||
|
||||
TEST_CASE(test_utf16le_process_code_points)
|
||||
{
|
||||
auto decoder = TextCodec::UTF16LEDecoder();
|
||||
auto& decoder = decoder_for("UTF-16LE"sv);
|
||||
|
||||
EXPECT_EQ(process_code_points(decoder, StringView(bytes({ 0xff, 0xfe, 'A', 0x00, 0x3d, 0xd8, 0x00, 0xde }))), (Vector<u32> { 0x41, 0x1F600 }));
|
||||
EXPECT_EQ(process_code_points(decoder, StringView(bytes({ 0x3d, 0xd8, 'A', 0x00, 0x00, 0xde }))), (Vector<u32> { 0xfffd, 0x41, 0xfffd }));
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
|
||||
TEST_CASE(test_utf8_encode)
|
||||
{
|
||||
TextCodec::UTF8Encoder encoder;
|
||||
auto& encoder = TextCodec::encoder_for_exact_name("UTF-8"sv).value();
|
||||
// Unicode character U+1F600 GRINNING FACE
|
||||
auto test_string = "\U0001F600"sv;
|
||||
|
||||
|
|
@ -27,7 +27,7 @@ TEST_CASE(test_utf8_encode)
|
|||
|
||||
TEST_CASE(test_euc_jp_encoder)
|
||||
{
|
||||
TextCodec::EUCJPEncoder encoder;
|
||||
auto& encoder = TextCodec::encoder_for_exact_name("EUC-JP"sv).value();
|
||||
// U+A5 Yen Sign
|
||||
// U+3088 Hiragana Letter Yo
|
||||
// U+30C4 Katakana Letter Tu
|
||||
|
|
@ -48,7 +48,7 @@ TEST_CASE(test_euc_jp_encoder)
|
|||
|
||||
TEST_CASE(test_iso_2022_jp_encoder)
|
||||
{
|
||||
TextCodec::ISO2022JPEncoder encoder;
|
||||
auto& encoder = TextCodec::encoder_for_exact_name("ISO-2022-JP"sv).value();
|
||||
// U+A5 Yen Sign
|
||||
// U+3088 Hiragana Letter Yo
|
||||
// U+30C4 Katakana Letter Tu
|
||||
|
|
@ -78,7 +78,7 @@ TEST_CASE(test_iso_2022_jp_encoder)
|
|||
|
||||
TEST_CASE(test_shift_jis_encoder)
|
||||
{
|
||||
TextCodec::ShiftJISEncoder encoder;
|
||||
auto& encoder = TextCodec::encoder_for_exact_name("Shift_JIS"sv).value();
|
||||
// U+A5 Yen Sign
|
||||
// U+3088 Hiragana Letter Yo
|
||||
// U+30C4 Katakana Letter Tu
|
||||
|
|
@ -99,7 +99,7 @@ TEST_CASE(test_shift_jis_encoder)
|
|||
|
||||
TEST_CASE(test_euc_kr_encoder)
|
||||
{
|
||||
TextCodec::EUCKREncoder encoder;
|
||||
auto& encoder = TextCodec::encoder_for_exact_name("EUC-KR"sv).value();
|
||||
// U+B29F Hangul Syllable Neulh
|
||||
// U+7C97 CJK Unified Ideograph-7C97
|
||||
auto test_string = "\U0000B29F\U00007C97"sv;
|
||||
|
|
@ -118,7 +118,7 @@ TEST_CASE(test_euc_kr_encoder)
|
|||
|
||||
TEST_CASE(test_big5_encoder)
|
||||
{
|
||||
TextCodec::Big5Encoder encoder;
|
||||
auto& encoder = TextCodec::encoder_for_exact_name("Big5"sv).value();
|
||||
// U+A7 Section Sign
|
||||
// U+70D7 CJK Unified Ideograph-70D7
|
||||
auto test_string = "\U000000A7\U000070D7"sv;
|
||||
|
|
@ -137,7 +137,7 @@ TEST_CASE(test_big5_encoder)
|
|||
|
||||
TEST_CASE(test_gb18030_encoder)
|
||||
{
|
||||
TextCodec::GB18030Encoder encoder;
|
||||
auto& encoder = TextCodec::encoder_for_exact_name("gb18030"sv).value();
|
||||
// U+20AC Euro Sign
|
||||
// U+E4C5 Private Use Area
|
||||
auto test_string = "\U000020AC\U0000E4C5"sv;
|
||||
|
|
@ -156,10 +156,10 @@ TEST_CASE(test_gb18030_encoder)
|
|||
|
||||
TEST_CASE(test_windows1252_encoder)
|
||||
{
|
||||
auto encoder = TextCodec::encoder_for_exact_name("windows-1252"sv);
|
||||
auto& encoder = TextCodec::encoder_for_exact_name("windows-1252"sv).value();
|
||||
auto test_string = "ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏfoo€"sv;
|
||||
Vector<u8> processed_bytes;
|
||||
MUST(encoder.value().process(
|
||||
MUST(encoder.process(
|
||||
Utf8View(test_string),
|
||||
[&](u8 byte) { dbgln("{}", processed_bytes.size()); return processed_bytes.try_append(byte); },
|
||||
[&](u32) -> ErrorOr<void> { EXPECT(false); return {}; }));
|
||||
|
|
|
|||
Loading…
Reference in a new issue