TestScript.cpp (2469B)
1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 #include "gtest/gtest.h" 5 6 #include "mozilla/intl/UnicodeProperties.h" 7 #include "mozilla/intl/UnicodeScriptCodes.h" 8 9 namespace mozilla::intl { 10 TEST(IntlScript, GetExtensions) 11 { 12 UnicodeProperties::ScriptExtensionVector extensions; 13 14 // 0x0000..0x0040 are Common. 15 for (char32_t ch = 0; ch < 0x0041; ch++) { 16 ASSERT_TRUE(UnicodeProperties::GetExtensions(ch, extensions).isOk()); 17 ASSERT_EQ(extensions.length(), 1u); 18 ASSERT_EQ(Script(extensions[0]), Script::COMMON); 19 } 20 21 // 0x0332..0x0341 are Inherited. 22 for (char32_t ch = 0x332; ch < 0x0342; ch++) { 23 ASSERT_TRUE(UnicodeProperties::GetExtensions(ch, extensions).isOk()); 24 ASSERT_EQ(extensions.length(), 1u); 25 ASSERT_EQ(Script(extensions[0]), Script::INHERITED); 26 } 27 28 // 0x1cf7's script code is Common, but its script extension is Beng. 29 ASSERT_TRUE(UnicodeProperties::GetExtensions(0x1cf7, extensions).isOk()); 30 ASSERT_EQ(extensions.length(), 1u); 31 ASSERT_EQ(Script(extensions[0]), Script::BENGALI); 32 33 // ؿ 34 // https://unicode-table.com/en/063F/ 35 // This character doesn't have any script extension, so the script code is 36 // returned. 37 ASSERT_TRUE(UnicodeProperties::GetExtensions(0x063f, extensions).isOk()); 38 ASSERT_EQ(extensions.length(), 1u); 39 ASSERT_EQ(Script(extensions[0]), Script::ARABIC); 40 41 // 0xff65 is the unicode character '・', see https://unicode-table.com/en/FF65/ 42 // Halfwidth Katakana Middle Dot. 43 ASSERT_TRUE(UnicodeProperties::GetExtensions(0xff65, extensions).isOk()); 44 45 // 0xff65 should have the following script extensions: 46 // Bopo Hang Hani Hira Kana Yiii. 47 ASSERT_EQ(extensions.length(), 6u); 48 49 ASSERT_EQ(Script(extensions[0]), Script::BOPOMOFO); 50 ASSERT_EQ(Script(extensions[1]), Script::HAN); 51 ASSERT_EQ(Script(extensions[2]), Script::HANGUL); 52 ASSERT_EQ(Script(extensions[3]), Script::HIRAGANA); 53 ASSERT_EQ(Script(extensions[4]), Script::KATAKANA); 54 ASSERT_EQ(Script(extensions[5]), Script::YI); 55 56 // The max code point is 0x10ffff, so 0x110000 should be invalid. 57 // Script::UNKNOWN should be returned for an invalid code point. 58 ASSERT_TRUE(UnicodeProperties::GetExtensions(0x110000, extensions).isOk()); 59 ASSERT_EQ(extensions.length(), 1u); 60 ASSERT_EQ(Script(extensions[0]), Script::UNKNOWN); 61 } 62 } // namespace mozilla::intl