| OLD | NEW |
| (Empty) |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "platform/fonts/Character.h" | |
| 6 | |
| 7 #include "platform/Logging.h" | |
| 8 #include "testing/gtest/include/gtest/gtest.h" | |
| 9 #include "wtf/text/CharacterNames.h" | |
| 10 | |
| 11 namespace blink { | |
| 12 | |
| 13 static void TestSpecificUCharRange(UChar rangeStart, UChar rangeEnd) | |
| 14 { | |
| 15 UChar below[1]; | |
| 16 UChar start[1]; | |
| 17 UChar midway[1]; | |
| 18 UChar end[1]; | |
| 19 UChar above[1]; | |
| 20 | |
| 21 below[0] = rangeStart - 1; | |
| 22 start[0] = rangeStart; | |
| 23 midway[0] = ((int)rangeStart + (int)rangeEnd) / 2; | |
| 24 end[0] = rangeEnd; | |
| 25 above[0] = rangeEnd + 1; | |
| 26 | |
| 27 EXPECT_EQ(SimplePath, Character::characterRangeCodePath(below, 1)); | |
| 28 EXPECT_EQ(ComplexPath, Character::characterRangeCodePath(start, 1)); | |
| 29 EXPECT_EQ(ComplexPath, Character::characterRangeCodePath(midway, 1)); | |
| 30 EXPECT_EQ(ComplexPath, Character::characterRangeCodePath(end, 1)); | |
| 31 EXPECT_EQ(SimplePath, Character::characterRangeCodePath(above, 1)); | |
| 32 } | |
| 33 | |
| 34 TEST(CharacterTest, TestCharacterRangeCodePath) | |
| 35 { | |
| 36 static UChar c1[] = { 0x0 }; | |
| 37 EXPECT_EQ(SimplePath, Character::characterRangeCodePath(c1, 1)); | |
| 38 | |
| 39 TestSpecificUCharRange(0x2E5, 0x2E9); | |
| 40 TestSpecificUCharRange(0x300, 0x36F); | |
| 41 TestSpecificUCharRange(0x0591, 0x05BD); | |
| 42 TestSpecificUCharRange(0x05BF, 0x05CF); | |
| 43 TestSpecificUCharRange(0x0600, 0x109F); | |
| 44 TestSpecificUCharRange(0x1100, 0x11FF); | |
| 45 TestSpecificUCharRange(0x135D, 0x135F); | |
| 46 TestSpecificUCharRange(0x1700, 0x18AF); | |
| 47 TestSpecificUCharRange(0x1900, 0x194F); | |
| 48 TestSpecificUCharRange(0x1980, 0x19DF); | |
| 49 TestSpecificUCharRange(0x1A00, 0x1CFF); | |
| 50 | |
| 51 static UChar c2[] = { 0x1DBF }; | |
| 52 EXPECT_EQ(SimplePath, Character::characterRangeCodePath(c2, 1)); | |
| 53 static UChar c3[] = { 0x1DC0 }; | |
| 54 EXPECT_EQ(ComplexPath, Character::characterRangeCodePath(c3, 1)); | |
| 55 static UChar c4[] = { 0x1DD0 }; | |
| 56 EXPECT_EQ(ComplexPath, Character::characterRangeCodePath(c4, 1)); | |
| 57 static UChar c5[] = { 0x1DFF }; | |
| 58 EXPECT_EQ(ComplexPath, Character::characterRangeCodePath(c5, 1)); | |
| 59 static UChar c6[] = { 0x1E00 }; | |
| 60 EXPECT_EQ(SimplePath, Character::characterRangeCodePath(c6, 1)); | |
| 61 static UChar c7[] = { 0x2000 }; | |
| 62 EXPECT_EQ(SimplePath, Character::characterRangeCodePath(c7, 1)); | |
| 63 static UChar c8[] = { 0x2001 }; | |
| 64 EXPECT_EQ(SimplePath, Character::characterRangeCodePath(c8, 1)); | |
| 65 | |
| 66 TestSpecificUCharRange(0x20D0, 0x20FF); | |
| 67 TestSpecificUCharRange(0x2CEF, 0x2CF1); | |
| 68 TestSpecificUCharRange(0x302A, 0x302F); | |
| 69 | |
| 70 TestSpecificUCharRange(0xA67C, 0xA67D); | |
| 71 TestSpecificUCharRange(0xA6F0, 0xA6F1); | |
| 72 TestSpecificUCharRange(0xA800, 0xABFF); | |
| 73 | |
| 74 TestSpecificUCharRange(0xD7B0, 0xD7FF); | |
| 75 TestSpecificUCharRange(0xFE00, 0xFE0F); | |
| 76 TestSpecificUCharRange(0xFE20, 0xFE2F); | |
| 77 } | |
| 78 | |
| 79 TEST(CharacterTest, TestCharacterRangeCodePathSurrogate1) | |
| 80 { | |
| 81 /* To be surrogate ... */ | |
| 82 /* 1st character must be 0xD800 .. 0xDBFF */ | |
| 83 /* 2nd character must be 0xdc00 .. 0xdfff */ | |
| 84 | |
| 85 /* The following 5 should all be Simple because they are not surrogate. */ | |
| 86 static UChar c1[] = { 0xD800, 0xDBFE }; | |
| 87 EXPECT_EQ(SimplePath, Character::characterRangeCodePath(c1, 2)); | |
| 88 static UChar c2[] = { 0xD800, 0xE000 }; | |
| 89 EXPECT_EQ(SimplePath, Character::characterRangeCodePath(c2, 2)); | |
| 90 static UChar c3[] = { 0xDBFF, 0xDBFE }; | |
| 91 EXPECT_EQ(SimplePath, Character::characterRangeCodePath(c3, 2)); | |
| 92 static UChar c4[] = { 0xDBFF, 0xE000 }; | |
| 93 EXPECT_EQ(SimplePath, Character::characterRangeCodePath(c4, 2)); | |
| 94 static UChar c5[] = { 0xDC00, 0xDBFF }; | |
| 95 EXPECT_EQ(SimplePath, Character::characterRangeCodePath(c5, 2)); | |
| 96 | |
| 97 /* To be Complex, the Supplementary Character must be in either */ | |
| 98 /* U+1F1E6 through U+1F1FF or U+E0100 through U+E01EF. */ | |
| 99 /* That is, a lead of 0xD83C with trail 0xDDE6 .. 0xDDFF or */ | |
| 100 /* a lead of 0xDB40 with trail 0xDD00 .. 0xDDEF. */ | |
| 101 static UChar c6[] = { 0xD83C, 0xDDE5 }; | |
| 102 EXPECT_EQ(SimplePath, Character::characterRangeCodePath(c6, 2)); | |
| 103 static UChar c7[] = { 0xD83C, 0xDDE6 }; | |
| 104 EXPECT_EQ(ComplexPath, Character::characterRangeCodePath(c7, 2)); | |
| 105 static UChar c8[] = { 0xD83C, 0xDDF0 }; | |
| 106 EXPECT_EQ(ComplexPath, Character::characterRangeCodePath(c8, 2)); | |
| 107 static UChar c9[] = { 0xD83C, 0xDDFF }; | |
| 108 EXPECT_EQ(ComplexPath, Character::characterRangeCodePath(c9, 2)); | |
| 109 static UChar c10[] = { 0xD83C, 0xDE00 }; | |
| 110 EXPECT_EQ(SimplePath, Character::characterRangeCodePath(c10, 2)); | |
| 111 | |
| 112 static UChar c11[] = { 0xDB40, 0xDCFF }; | |
| 113 EXPECT_EQ(SimplePath, Character::characterRangeCodePath(c11, 2)); | |
| 114 static UChar c12[] = { 0xDB40, 0xDD00 }; | |
| 115 EXPECT_EQ(ComplexPath, Character::characterRangeCodePath(c12, 2)); | |
| 116 static UChar c13[] = { 0xDB40, 0xDDED }; | |
| 117 EXPECT_EQ(ComplexPath, Character::characterRangeCodePath(c13, 2)); | |
| 118 static UChar c14[] = { 0xDB40, 0xDDEF }; | |
| 119 EXPECT_EQ(ComplexPath, Character::characterRangeCodePath(c14, 2)); | |
| 120 static UChar c15[] = { 0xDB40, 0xDDF0 }; | |
| 121 EXPECT_EQ(SimplePath, Character::characterRangeCodePath(c15, 2)); | |
| 122 | |
| 123 // Eye + Speech Bubble | |
| 124 static UChar c16[] = { 0xD83D, 0xDC40 }; | |
| 125 EXPECT_EQ(SimplePath, Character::characterRangeCodePath(c16, 2)); | |
| 126 static UChar c17[] = { 0xD83D, 0xDC41 }; | |
| 127 EXPECT_EQ(ComplexPath, Character::characterRangeCodePath(c17, 2)); | |
| 128 static UChar c18[] = { 0xD83D, 0xDC42 }; | |
| 129 EXPECT_EQ(SimplePath, Character::characterRangeCodePath(c18, 2)); | |
| 130 static UChar c19[] = { 0xD83D, 0xDDE7 }; | |
| 131 EXPECT_EQ(SimplePath, Character::characterRangeCodePath(c19, 2)); | |
| 132 static UChar c20[] = { 0xD83D, 0xDDE8 }; | |
| 133 EXPECT_EQ(ComplexPath, Character::characterRangeCodePath(c20, 2)); | |
| 134 static UChar c21[] = { 0xD83D, 0xDDE9 }; | |
| 135 EXPECT_EQ(SimplePath, Character::characterRangeCodePath(c21, 2)); | |
| 136 } | |
| 137 | |
| 138 TEST(CharacterTest, TestCharacterRangeCodePathString) | |
| 139 { | |
| 140 // Simple-Simple is still simple | |
| 141 static UChar c1[] = { 0x2FF, 0x2FF }; | |
| 142 EXPECT_EQ(SimplePath, Character::characterRangeCodePath(c1, 2)); | |
| 143 // Complex-Simple is Complex | |
| 144 static UChar c2[] = { 0x300, 0x2FF }; | |
| 145 EXPECT_EQ(ComplexPath, Character::characterRangeCodePath(c2, 2)); | |
| 146 // Simple-Complex is Complex | |
| 147 static UChar c3[] = { 0x2FF, 0x330 }; | |
| 148 EXPECT_EQ(ComplexPath, Character::characterRangeCodePath(c3, 2)); | |
| 149 // Complex-Complex is Complex | |
| 150 static UChar c4[] = { 0x36F, 0x330 }; | |
| 151 EXPECT_EQ(ComplexPath, Character::characterRangeCodePath(c4, 2)); | |
| 152 // Surrogate-Complex is Complex | |
| 153 static UChar c5[] = { 0xD83C, 0xDDE5, 0x330 }; | |
| 154 EXPECT_EQ(ComplexPath, Character::characterRangeCodePath(c5, 3)); | |
| 155 // Complex-Surrogate is Complex | |
| 156 static UChar c6[] = { 0x330, 0xD83C, 0xDDE5 }; | |
| 157 EXPECT_EQ(ComplexPath, Character::characterRangeCodePath(c6, 3)); | |
| 158 } | |
| 159 | |
| 160 static void TestSpecificUChar32RangeIdeograph(UChar32 rangeStart, | |
| 161 UChar32 rangeEnd, | |
| 162 bool before = true) | |
| 163 { | |
| 164 if (before) | |
| 165 EXPECT_FALSE(Character::isCJKIdeographOrSymbol(rangeStart - 1)); | |
| 166 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(rangeStart)); | |
| 167 EXPECT_TRUE(Character::isCJKIdeographOrSymbol( | |
| 168 (UChar32)((uint64_t)rangeStart + (uint64_t)rangeEnd) / 2)); | |
| 169 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(rangeEnd)); | |
| 170 EXPECT_FALSE(Character::isCJKIdeographOrSymbol(rangeEnd + 1)); | |
| 171 } | |
| 172 | |
| 173 TEST(CharacterTest, TestIsCJKIdeograph) | |
| 174 { | |
| 175 // The basic CJK Unified Ideographs block. | |
| 176 TestSpecificUChar32RangeIdeograph(0x4E00, 0x9FFF); | |
| 177 // CJK Unified Ideographs Extension A. | |
| 178 TestSpecificUChar32RangeIdeograph(0x3400, 0x4DBF, false); | |
| 179 // CJK Unified Ideographs Extension A and Kangxi Radicals. | |
| 180 TestSpecificUChar32RangeIdeograph(0x2E80, 0x2FDF); | |
| 181 // CJK Strokes. | |
| 182 TestSpecificUChar32RangeIdeograph(0x31C0, 0x31EF, false); | |
| 183 // CJK Compatibility Ideographs. | |
| 184 TestSpecificUChar32RangeIdeograph(0xF900, 0xFAFF); | |
| 185 // CJK Unified Ideographs Extension B. | |
| 186 TestSpecificUChar32RangeIdeograph(0x20000, 0x2A6DF); | |
| 187 // CJK Unified Ideographs Extension C. | |
| 188 // CJK Unified Ideographs Extension D. | |
| 189 TestSpecificUChar32RangeIdeograph(0x2A700, 0x2B81F); | |
| 190 // CJK Compatibility Ideographs Supplement. | |
| 191 TestSpecificUChar32RangeIdeograph(0x2F800, 0x2FA1F); | |
| 192 } | |
| 193 | |
| 194 static void TestSpecificUChar32RangeIdeographSymbol(UChar32 rangeStart, UChar32
rangeEnd) | |
| 195 { | |
| 196 EXPECT_FALSE(Character::isCJKIdeographOrSymbol(rangeStart - 1)); | |
| 197 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(rangeStart)); | |
| 198 EXPECT_TRUE(Character::isCJKIdeographOrSymbol((UChar32)((uint64_t)rangeStart
+ (uint64_t)rangeEnd) / 2)); | |
| 199 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(rangeEnd)); | |
| 200 EXPECT_FALSE(Character::isCJKIdeographOrSymbol(rangeEnd + 1)); | |
| 201 } | |
| 202 | |
| 203 TEST(CharacterTest, TestIsCJKIdeographOrSymbol) | |
| 204 { | |
| 205 // CJK Compatibility Ideographs Supplement. | |
| 206 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x2C7)); | |
| 207 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x2CA)); | |
| 208 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x2CB)); | |
| 209 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x2D9)); | |
| 210 | |
| 211 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x2020)); | |
| 212 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x2021)); | |
| 213 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x2030)); | |
| 214 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x203B)); | |
| 215 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x203C)); | |
| 216 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x2042)); | |
| 217 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x2047)); | |
| 218 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x2048)); | |
| 219 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x2049)); | |
| 220 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x2051)); | |
| 221 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x20DD)); | |
| 222 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x20DE)); | |
| 223 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x2100)); | |
| 224 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x2103)); | |
| 225 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x2105)); | |
| 226 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x2109)); | |
| 227 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x210A)); | |
| 228 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x2113)); | |
| 229 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x2116)); | |
| 230 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x2121)); | |
| 231 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x212B)); | |
| 232 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x213B)); | |
| 233 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x2150)); | |
| 234 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x2151)); | |
| 235 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x2152)); | |
| 236 | |
| 237 TestSpecificUChar32RangeIdeographSymbol(0x2156, 0x215A); | |
| 238 TestSpecificUChar32RangeIdeographSymbol(0x2160, 0x216B); | |
| 239 TestSpecificUChar32RangeIdeographSymbol(0x2170, 0x217B); | |
| 240 | |
| 241 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x217F)); | |
| 242 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x2189)); | |
| 243 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x2307)); | |
| 244 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x2312)); | |
| 245 | |
| 246 EXPECT_FALSE(Character::isCJKIdeographOrSymbol(0x23BD)); | |
| 247 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x23BE)); | |
| 248 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x23C4)); | |
| 249 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x23CC)); | |
| 250 EXPECT_FALSE(Character::isCJKIdeographOrSymbol(0x23CD)); | |
| 251 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x23CE)); | |
| 252 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x2423)); | |
| 253 | |
| 254 TestSpecificUChar32RangeIdeographSymbol(0x2460, 0x2492); | |
| 255 TestSpecificUChar32RangeIdeographSymbol(0x249C, 0x24FF); | |
| 256 | |
| 257 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x25A0)); | |
| 258 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x25A1)); | |
| 259 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x25A2)); | |
| 260 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x25AA)); | |
| 261 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x25AB)); | |
| 262 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x25B1)); | |
| 263 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x25B2)); | |
| 264 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x25B3)); | |
| 265 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x25B6)); | |
| 266 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x25B7)); | |
| 267 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x25BC)); | |
| 268 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x25BD)); | |
| 269 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x25C0)); | |
| 270 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x25C1)); | |
| 271 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x25C6)); | |
| 272 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x25C7)); | |
| 273 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x25C9)); | |
| 274 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x25CB)); | |
| 275 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x25CC)); | |
| 276 | |
| 277 TestSpecificUChar32RangeIdeographSymbol(0x25CE, 0x25D3); | |
| 278 TestSpecificUChar32RangeIdeographSymbol(0x25E2, 0x25E6); | |
| 279 | |
| 280 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x25EF)); | |
| 281 | |
| 282 TestSpecificUChar32RangeIdeographSymbol(0x2600, 0x2603); | |
| 283 | |
| 284 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x2605)); | |
| 285 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x2606)); | |
| 286 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x260E)); | |
| 287 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x2616)); | |
| 288 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x2617)); | |
| 289 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x2640)); | |
| 290 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x2642)); | |
| 291 | |
| 292 TestSpecificUChar32RangeIdeographSymbol(0x2660, 0x266F); | |
| 293 TestSpecificUChar32RangeIdeographSymbol(0x2672, 0x267D); | |
| 294 | |
| 295 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x26A0)); | |
| 296 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x26BD)); | |
| 297 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x26BE)); | |
| 298 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x2713)); | |
| 299 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x271A)); | |
| 300 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x273F)); | |
| 301 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x2740)); | |
| 302 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x2756)); | |
| 303 | |
| 304 TestSpecificUChar32RangeIdeographSymbol(0x2763, 0x2764); | |
| 305 TestSpecificUChar32RangeIdeographSymbol(0x2776, 0x277F); | |
| 306 | |
| 307 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x2B1A)); | |
| 308 | |
| 309 TestSpecificUChar32RangeIdeographSymbol(0x2FF0, 0x302D); | |
| 310 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x3031)); | |
| 311 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x312F)); | |
| 312 EXPECT_FALSE(Character::isCJKIdeographOrSymbol(0x3130)); | |
| 313 | |
| 314 EXPECT_FALSE(Character::isCJKIdeographOrSymbol(0x318F)); | |
| 315 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x3190)); | |
| 316 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x319F)); | |
| 317 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x31BF)); | |
| 318 | |
| 319 EXPECT_FALSE(Character::isCJKIdeographOrSymbol(0x31FF)); | |
| 320 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x3200)); | |
| 321 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x3300)); | |
| 322 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x33FF)); | |
| 323 | |
| 324 TestSpecificUChar32RangeIdeographSymbol(0xF860, 0xF862); | |
| 325 TestSpecificUChar32RangeIdeographSymbol(0xFE30, 0xFE6F); | |
| 326 | |
| 327 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0xFE10)); | |
| 328 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0xFE11)); | |
| 329 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0xFE12)); | |
| 330 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0xFE19)); | |
| 331 | |
| 332 EXPECT_FALSE(Character::isCJKIdeographOrSymbol(0xFF0D)); | |
| 333 EXPECT_FALSE(Character::isCJKIdeographOrSymbol(0xFF1B)); | |
| 334 EXPECT_FALSE(Character::isCJKIdeographOrSymbol(0xFF1C)); | |
| 335 EXPECT_FALSE(Character::isCJKIdeographOrSymbol(0xFF1E)); | |
| 336 | |
| 337 TestSpecificUChar32RangeIdeographSymbol(0xFF00, 0xFFEF); | |
| 338 | |
| 339 EXPECT_TRUE(Character::isCJKIdeographOrSymbol(0x1F100)); | |
| 340 | |
| 341 TestSpecificUChar32RangeIdeographSymbol(0x1F110, 0x1F129); | |
| 342 TestSpecificUChar32RangeIdeographSymbol(0x1F130, 0x1F149); | |
| 343 TestSpecificUChar32RangeIdeographSymbol(0x1F150, 0x1F169); | |
| 344 TestSpecificUChar32RangeIdeographSymbol(0x1F170, 0x1F189); | |
| 345 TestSpecificUChar32RangeIdeographSymbol(0x1F200, 0x1F6FF); | |
| 346 } | |
| 347 | |
| 348 TEST(CharacterTest, TestEmojiTextDefault) | |
| 349 { | |
| 350 // Text-default emoji, i.e. | |
| 351 // Emoji=Yes and EmojiPresentation=No | |
| 352 EXPECT_TRUE(Character::isEmojiTextDefault(0x0023)); | |
| 353 EXPECT_TRUE(Character::isEmojiTextDefault(0x2744)); | |
| 354 EXPECT_TRUE(Character::isEmojiTextDefault(0x1F6F3)); | |
| 355 | |
| 356 // Non-emoji | |
| 357 EXPECT_FALSE(Character::isEmojiTextDefault('A')); | |
| 358 EXPECT_FALSE(Character::isEmojiTextDefault(0x2713)); | |
| 359 | |
| 360 // Emoji=Yes and EmojiPresentation=Yes | |
| 361 EXPECT_FALSE(Character::isEmojiTextDefault(0x1F9C0)); | |
| 362 EXPECT_FALSE(Character::isEmojiTextDefault(0x26BD)); | |
| 363 EXPECT_FALSE(Character::isEmojiTextDefault(0x26BE)); | |
| 364 } | |
| 365 | |
| 366 TEST(CharacterTest, TestEmojiEmojiDefault) | |
| 367 { | |
| 368 // Emoji=Yes and EmojiPresentation=Yes | |
| 369 EXPECT_TRUE(Character::isEmojiEmojiDefault(0x231A)); | |
| 370 EXPECT_TRUE(Character::isEmojiEmojiDefault(0x1F191)); | |
| 371 EXPECT_TRUE(Character::isEmojiEmojiDefault(0x1F19A)); | |
| 372 EXPECT_TRUE(Character::isEmojiEmojiDefault(0x1F9C0)); | |
| 373 // Kiss | |
| 374 EXPECT_TRUE(Character::isEmojiEmojiDefault(0x1F48F)); | |
| 375 // Couple with heart | |
| 376 EXPECT_TRUE(Character::isEmojiEmojiDefault(0x1F491)); | |
| 377 EXPECT_TRUE(Character::isEmojiEmojiDefault(0x1F46A)); | |
| 378 | |
| 379 // Non-emoji | |
| 380 EXPECT_FALSE(Character::isEmojiEmojiDefault('A')); | |
| 381 | |
| 382 // Emoji=Yes and EmojiPresentation=No | |
| 383 EXPECT_FALSE(Character::isEmojiEmojiDefault(0x1F202)); | |
| 384 } | |
| 385 | |
| 386 TEST(CharacterTest, TestEmojiModifierBase) | |
| 387 { | |
| 388 EXPECT_TRUE(Character::isEmojiModifierBase(0x261D)); | |
| 389 EXPECT_TRUE(Character::isEmojiModifierBase(0x1F470)); | |
| 390 EXPECT_TRUE(Character::isEmojiModifierBase(0x1F478)); | |
| 391 EXPECT_TRUE(Character::isEmojiModifierBase(0x1F918)); | |
| 392 EXPECT_FALSE(Character::isEmojiModifierBase('A')); | |
| 393 EXPECT_FALSE(Character::isEmojiModifierBase(0x1F47D)); | |
| 394 } | |
| 395 | |
| 396 TEST(CharacterTest, LineBreakAndQuoteNotEmoji) | |
| 397 { | |
| 398 EXPECT_FALSE(Character::isEmojiTextDefault('\n')); | |
| 399 EXPECT_FALSE(Character::isEmojiTextDefault('"')); | |
| 400 } | |
| 401 | |
| 402 TEST(CharacterTest, Truncation) | |
| 403 { | |
| 404 const UChar32 base = 0x90000; | |
| 405 UChar32 testChar = 0; | |
| 406 | |
| 407 testChar = base + spaceCharacter; | |
| 408 EXPECT_FALSE(Character::treatAsSpace(testChar)); | |
| 409 testChar = base + noBreakSpaceCharacter; | |
| 410 EXPECT_FALSE(Character::treatAsSpace(testChar)); | |
| 411 | |
| 412 testChar = base + zeroWidthNonJoinerCharacter; | |
| 413 EXPECT_FALSE(Character::treatAsZeroWidthSpace(testChar)); | |
| 414 testChar = base + zeroWidthJoinerCharacter; | |
| 415 EXPECT_FALSE(Character::treatAsZeroWidthSpace(testChar)); | |
| 416 | |
| 417 testChar = base + 0x12; | |
| 418 EXPECT_FALSE(Character::treatAsZeroWidthSpaceInComplexScript(testChar)); | |
| 419 EXPECT_FALSE(Character::treatAsZeroWidthSpaceInComplexScript(testChar)); | |
| 420 testChar = base + objectReplacementCharacter; | |
| 421 EXPECT_FALSE(Character::treatAsZeroWidthSpaceInComplexScript(testChar)); | |
| 422 | |
| 423 testChar = base + 0xA; | |
| 424 EXPECT_FALSE(Character::isNormalizedCanvasSpaceCharacter(testChar)); | |
| 425 testChar = base + 0x9; | |
| 426 EXPECT_FALSE(Character::isNormalizedCanvasSpaceCharacter(testChar)); | |
| 427 | |
| 428 } | |
| 429 | |
| 430 } // namespace blink | |
| OLD | NEW |