75 lines
2.9 KiB
C++
75 lines
2.9 KiB
C++
#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<const char16_t*>(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<const char16_t*>(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<const char16_t*>(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<const char16_t*>(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);
|
|
}
|
|
}
|