tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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