OLD | NEW |
| (Empty) |
1 // Copyright 2014 the V8 project 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 "src/char-predicates.h" | |
6 #include "src/unicode.h" | |
7 #include "testing/gtest/include/gtest/gtest.h" | |
8 | |
9 namespace v8 { | |
10 namespace internal { | |
11 | |
12 TEST(UnicodePredicatesTest, WhiteSpace) { | |
13 // As of Unicode 6.3.0, \u180E is no longer a white space. We still consider | |
14 // it to be one though, since JS recognizes all white spaces in Unicode 5.1. | |
15 EXPECT_TRUE(WhiteSpace::Is(0x0009)); | |
16 EXPECT_TRUE(WhiteSpace::Is(0x000B)); | |
17 EXPECT_TRUE(WhiteSpace::Is(0x000C)); | |
18 EXPECT_TRUE(WhiteSpace::Is(' ')); | |
19 EXPECT_TRUE(WhiteSpace::Is(0x00A0)); | |
20 EXPECT_TRUE(WhiteSpace::Is(0x180E)); | |
21 EXPECT_TRUE(WhiteSpace::Is(0xFEFF)); | |
22 } | |
23 | |
24 | |
25 TEST(UnicodePredicatesTest, WhiteSpaceOrLineTerminator) { | |
26 // As of Unicode 6.3.0, \u180E is no longer a white space. We still consider | |
27 // it to be one though, since JS recognizes all white spaces in Unicode 5.1. | |
28 // White spaces | |
29 EXPECT_TRUE(WhiteSpaceOrLineTerminator::Is(0x0009)); | |
30 EXPECT_TRUE(WhiteSpaceOrLineTerminator::Is(0x000B)); | |
31 EXPECT_TRUE(WhiteSpaceOrLineTerminator::Is(0x000C)); | |
32 EXPECT_TRUE(WhiteSpaceOrLineTerminator::Is(' ')); | |
33 EXPECT_TRUE(WhiteSpaceOrLineTerminator::Is(0x00A0)); | |
34 EXPECT_TRUE(WhiteSpaceOrLineTerminator::Is(0x180E)); | |
35 EXPECT_TRUE(WhiteSpaceOrLineTerminator::Is(0xFEFF)); | |
36 // Line terminators | |
37 EXPECT_TRUE(WhiteSpaceOrLineTerminator::Is(0x000A)); | |
38 EXPECT_TRUE(WhiteSpaceOrLineTerminator::Is(0x000D)); | |
39 EXPECT_TRUE(WhiteSpaceOrLineTerminator::Is(0x2028)); | |
40 EXPECT_TRUE(WhiteSpaceOrLineTerminator::Is(0x2029)); | |
41 } | |
42 | |
43 | |
44 TEST(UnicodePredicatesTest, IdentifierStart) { | |
45 EXPECT_TRUE(IdentifierStart::Is('$')); | |
46 EXPECT_TRUE(IdentifierStart::Is('_')); | |
47 EXPECT_TRUE(IdentifierStart::Is('\\')); | |
48 | |
49 // http://www.unicode.org/reports/tr31/ | |
50 // Other_ID_Start | |
51 EXPECT_TRUE(IdentifierStart::Is(0x2118)); | |
52 EXPECT_TRUE(IdentifierStart::Is(0x212E)); | |
53 EXPECT_TRUE(IdentifierStart::Is(0x309B)); | |
54 EXPECT_TRUE(IdentifierStart::Is(0x309C)); | |
55 | |
56 // Issue 2892: | |
57 // \u2E2F has the Pattern_Syntax property, excluding it from ID_Start. | |
58 EXPECT_FALSE(unibrow::ID_Start::Is(0x2E2F)); | |
59 } | |
60 | |
61 | |
62 TEST(UnicodePredicatesTest, IdentifierPart) { | |
63 EXPECT_TRUE(IdentifierPart::Is('$')); | |
64 EXPECT_TRUE(IdentifierPart::Is('_')); | |
65 EXPECT_TRUE(IdentifierPart::Is('\\')); | |
66 EXPECT_TRUE(IdentifierPart::Is(0x200C)); | |
67 EXPECT_TRUE(IdentifierPart::Is(0x200D)); | |
68 | |
69 // http://www.unicode.org/reports/tr31/ | |
70 // Other_ID_Start | |
71 EXPECT_TRUE(IdentifierPart::Is(0x2118)); | |
72 EXPECT_TRUE(IdentifierPart::Is(0x212E)); | |
73 EXPECT_TRUE(IdentifierPart::Is(0x309B)); | |
74 EXPECT_TRUE(IdentifierPart::Is(0x309C)); | |
75 | |
76 // Other_ID_Continue | |
77 EXPECT_TRUE(IdentifierPart::Is(0x00B7)); | |
78 EXPECT_TRUE(IdentifierPart::Is(0x0387)); | |
79 EXPECT_TRUE(IdentifierPart::Is(0x1369)); | |
80 EXPECT_TRUE(IdentifierPart::Is(0x1370)); | |
81 EXPECT_TRUE(IdentifierPart::Is(0x1371)); | |
82 EXPECT_TRUE(IdentifierPart::Is(0x19DA)); | |
83 | |
84 // Issue 2892: | |
85 // \u2E2F has the Pattern_Syntax property, excluding it from ID_Start. | |
86 EXPECT_FALSE(IdentifierPart::Is(0x2E2F)); | |
87 } | |
88 | |
89 | |
90 #ifdef V8_I18N_SUPPORT | |
91 TEST(UnicodePredicatesTest, SupplementaryPlaneIdentifiers) { | |
92 // Both ID_Start and ID_Continue. | |
93 EXPECT_TRUE(IdentifierStart::Is(0x10403)); // Category Lu | |
94 EXPECT_TRUE(IdentifierPart::Is(0x10403)); | |
95 EXPECT_TRUE(IdentifierStart::Is(0x1043C)); // Category Ll | |
96 EXPECT_TRUE(IdentifierPart::Is(0x1043C)); | |
97 EXPECT_TRUE(IdentifierStart::Is(0x16F9C)); // Category Lm | |
98 EXPECT_TRUE(IdentifierPart::Is(0x16F9C)); | |
99 EXPECT_TRUE(IdentifierStart::Is(0x10048)); // Category Lo | |
100 EXPECT_TRUE(IdentifierPart::Is(0x10048)); | |
101 EXPECT_TRUE(IdentifierStart::Is(0x1014D)); // Category Nl | |
102 EXPECT_TRUE(IdentifierPart::Is(0x1014D)); | |
103 | |
104 // Only ID_Continue. | |
105 EXPECT_FALSE(IdentifierStart::Is(0x101FD)); // Category Mn | |
106 EXPECT_TRUE(IdentifierPart::Is(0x101FD)); | |
107 EXPECT_FALSE(IdentifierStart::Is(0x11002)); // Category Mc | |
108 EXPECT_TRUE(IdentifierPart::Is(0x11002)); | |
109 EXPECT_FALSE(IdentifierStart::Is(0x104A9)); // Category Nd | |
110 EXPECT_TRUE(IdentifierPart::Is(0x104A9)); | |
111 | |
112 // Neither. | |
113 EXPECT_FALSE(IdentifierStart::Is(0x10111)); // Category No | |
114 EXPECT_FALSE(IdentifierPart::Is(0x10111)); | |
115 EXPECT_FALSE(IdentifierStart::Is(0x1F4A9)); // Category So | |
116 EXPECT_FALSE(IdentifierPart::Is(0x1F4A9)); | |
117 } | |
118 #endif // V8_I18N_SUPPORT | |
119 | |
120 } // namespace internal | |
121 } // namespace v8 | |
OLD | NEW |