Serenity Operating System
at master 60 lines 2.0 kB view raw
1/* 2 * Copyright (c) 2022, the SerenityOS developers. 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#include <AK/String.h> 8#include <AK/Vector.h> 9#include <LibTest/TestCase.h> 10#include <LibTextCodec/Decoder.h> 11 12TEST_CASE(test_utf8_decode) 13{ 14 auto decoder = TextCodec::UTF8Decoder(); 15 // Bytes for U+1F600 GRINNING FACE 16 auto test_string = "\xf0\x9f\x98\x80"sv; 17 18 Vector<u32> processed_code_points; 19 MUST(decoder.process(test_string, [&](u32 code_point) { 20 return processed_code_points.try_append(code_point); 21 })); 22 EXPECT(processed_code_points.size() == 1); 23 EXPECT(processed_code_points[0] == 0x1F600); 24 25 EXPECT(MUST(decoder.to_utf8(test_string)) == test_string); 26} 27 28TEST_CASE(test_utf16be_decode) 29{ 30 auto decoder = TextCodec::UTF16BEDecoder(); 31 // This is the output of `python3 -c "print('säk😀'.encode('utf-16be'))"`. 32 auto test_string = "\x00s\x00\xe4\x00k\xd8=\xde\x00"sv; 33 34 Vector<u32> processed_code_points; 35 MUST(decoder.process(test_string, [&](u32 code_point) { 36 return processed_code_points.try_append(code_point); 37 })); 38 EXPECT(processed_code_points.size() == 4); 39 EXPECT(processed_code_points[0] == 0x73); 40 EXPECT(processed_code_points[1] == 0xE4); 41 EXPECT(processed_code_points[2] == 0x6B); 42 EXPECT(processed_code_points[3] == 0x1F600); 43} 44 45TEST_CASE(test_utf16le_decode) 46{ 47 auto decoder = TextCodec::UTF16LEDecoder(); 48 // This is the output of `python3 -c "print('säk😀'.encode('utf-16le'))"`. 49 auto test_string = "s\x00\xe4\x00k\x00=\xd8\x00\xde"sv; 50 51 Vector<u32> processed_code_points; 52 MUST(decoder.process(test_string, [&](u32 code_point) { 53 return processed_code_points.try_append(code_point); 54 })); 55 EXPECT(processed_code_points.size() == 4); 56 EXPECT(processed_code_points[0] == 0x73); 57 EXPECT(processed_code_points[1] == 0xE4); 58 EXPECT(processed_code_points[2] == 0x6B); 59 EXPECT(processed_code_points[3] == 0x1F600); 60}