Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(421)

Side by Side Diff: third_party/WebKit/Source/platform/fonts/CharacterTest.cpp

Issue 1847853004: Move Character.h from platform/fonts to platform/text (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase again Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698