#include "document_test_helpers.hpp" namespace pdfengine { TEST(UtfConversionTest, EmojiSurrogatePairs) { std::string utf8_grinning = "\xF0\x9F\x98\x80"; auto utf16 = pdfengine::parser::utf8_to_utf16le(utf8_grinning); ASSERT_EQ(utf16.size(), 3); EXPECT_EQ(utf16[0], 0xD83D); EXPECT_EQ(utf16[1], 0xDE00); EXPECT_EQ(utf16[2], 0x0000); std::string utf8_out = pdfengine::parser::utf16le_to_utf8(reinterpret_cast(utf16.data()), utf16.size() - 1); EXPECT_EQ(utf8_out, utf8_grinning); std::string utf8_rocket = "\xF0\x9F\x9A\x80"; utf16 = pdfengine::parser::utf8_to_utf16le(utf8_rocket); ASSERT_EQ(utf16.size(), 3); EXPECT_EQ(utf16[0], 0xD83D); EXPECT_EQ(utf16[1], 0xDE80); EXPECT_EQ(utf16[2], 0x0000); utf8_out = pdfengine::parser::utf16le_to_utf8(reinterpret_cast(utf16.data()), utf16.size() - 1); EXPECT_EQ(utf8_out, utf8_rocket); } TEST(UtfConversionTest, CJKExtensionB) { std::string utf8_cjk = "\xF0\xA0\x80\x80"; auto utf16 = pdfengine::parser::utf8_to_utf16le(utf8_cjk); ASSERT_EQ(utf16.size(), 3); EXPECT_EQ(utf16[0], 0xD840); EXPECT_EQ(utf16[1], 0xDC00); EXPECT_EQ(utf16[2], 0x0000); std::string utf8_out = pdfengine::parser::utf16le_to_utf8(reinterpret_cast(utf16.data()), utf16.size() - 1); EXPECT_EQ(utf8_out, utf8_cjk); } TEST(UtfConversionTest, RoundtripMixed) { std::string mixed = "A\xF0\x9F\x98\x80""B\xF0\xA0\x80\x80""C"; auto utf16 = pdfengine::parser::utf8_to_utf16le(mixed); std::string mixed_out = pdfengine::parser::utf16le_to_utf8(reinterpret_cast(utf16.data()), utf16.size() - 1); EXPECT_EQ(mixed_out, mixed); } TEST(CjkResolutionTest, AdobeCNS1) { using pdfengine::fonts::pdf_fonts::CjkCollectionDB; EXPECT_EQ(CjkCollectionDB::resolveCID("Adobe-CNS1", 100), 0x4E00); EXPECT_EQ(CjkCollectionDB::resolveCID("Adobe-CNS1", 112), 0x4E2D); EXPECT_EQ(CjkCollectionDB::resolveCID("Adobe-CNS1", 130), 0x4ED7); EXPECT_EQ(CjkCollectionDB::resolveCID("Adobe-CNS1", 131), 0x4ED8); EXPECT_EQ(CjkCollectionDB::resolveCID("Adobe-CNS1", 135), 0x4EDF); EXPECT_EQ(CjkCollectionDB::resolveCID("Adobe-CNS1", 140), 0x4F01); EXPECT_EQ(CjkCollectionDB::resolveCID("Identity-H-CNS1", 137), 0x4EE3); } TEST(CjkResolutionTest, AdobeKorea1) { using pdfengine::fonts::pdf_fonts::CjkCollectionDB; EXPECT_EQ(CjkCollectionDB::resolveCID("Adobe-Korea1", 101), 0xAC00); EXPECT_EQ(CjkCollectionDB::resolveCID("Adobe-Korea1", 119), 0xAC1C); EXPECT_EQ(CjkCollectionDB::resolveCID("Adobe-Korea1", 150), 0xAC90); EXPECT_EQ(CjkCollectionDB::resolveCID("Adobe-Korea1", 151), 0xAC94); EXPECT_EQ(CjkCollectionDB::resolveCID("Adobe-Korea1", 156), 0xACA9); EXPECT_EQ(CjkCollectionDB::resolveCID("Adobe-Korea1", 160), 0xACBD); EXPECT_EQ(CjkCollectionDB::resolveCID("UniKS-UTF16-H-Korea1", 153), 0xACA0); } }