OLD | NEW |
1 // Copyright 2016 the V8 project authors. All rights reserved. | 1 // Copyright 2016 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Flags: --icu_case_mapping | 5 // Flags: --icu_case_mapping |
6 | 6 |
7 // Some edge cases that unibrow got wrong | 7 // Some edge cases that unibrow got wrong |
8 | 8 |
9 assertEquals("๐", "๐".toUpperCase()); | 9 assertEquals("๐", "๐".toUpperCase()); |
10 assertEquals("๐", "๐".toLowerCase()); | 10 assertEquals("๐", "๐".toLowerCase()); |
(...skipping 118 matching lines...) Loading... |
129 assertEquals("\u{1D400}\u{1D41A}", "\u{1D400}\u{1D41A}".toUpperCase()); | 129 assertEquals("\u{1D400}\u{1D41A}", "\u{1D400}\u{1D41A}".toUpperCase()); |
130 assertEquals("\u{1D400}\u{1D41A}", "\u{1D400}\u{1D41A}".toLowerCase()); | 130 assertEquals("\u{1D400}\u{1D41A}", "\u{1D400}\u{1D41A}".toLowerCase()); |
131 // Plane 1; New characters in Unicode 8.0 | 131 // Plane 1; New characters in Unicode 8.0 |
132 assertEquals("\u{10C80}", "\u{10CC0}".toUpperCase()); | 132 assertEquals("\u{10C80}", "\u{10CC0}".toUpperCase()); |
133 assertEquals("\u{10CC0}", "\u{10C80}".toLowerCase()); | 133 assertEquals("\u{10CC0}", "\u{10C80}".toLowerCase()); |
134 assertEquals("\u{10C80}", "\u{10CC0}".toLocaleUpperCase()); | 134 assertEquals("\u{10C80}", "\u{10CC0}".toLocaleUpperCase()); |
135 assertEquals("\u{10CC0}", "\u{10C80}".toLocaleLowerCase()); | 135 assertEquals("\u{10CC0}", "\u{10C80}".toLocaleLowerCase()); |
136 assertEquals("\u{10C80}", "\u{10CC0}".toLocaleUpperCase(["tr"])); | 136 assertEquals("\u{10C80}", "\u{10CC0}".toLocaleUpperCase(["tr"])); |
137 assertEquals("\u{10C80}", "\u{10CC0}".toLocaleUpperCase(["tr"])); | 137 assertEquals("\u{10C80}", "\u{10CC0}".toLocaleUpperCase(["tr"])); |
138 assertEquals("\u{10CC0}", "\u{10C80}".toLocaleLowerCase()); | 138 assertEquals("\u{10CC0}", "\u{10C80}".toLocaleLowerCase()); |
139 | |
140 // If the result of case mapping is longer than the max string length | |
141 // (1<<28 - 16), it should throw a range error instead of crashing. | |
142 var invalidValues = [ | |
143 { c: "\u0390", opType: 0 }, | |
144 { c: "ร", opType: 0 }, | |
145 { c: "\uFB01", opType: 0 }, // fi ligature | |
146 { c: "\uFB04", opType: 0 }, // ffl ligature | |
147 { c: "\u0390", opType: 1, locale: "und" }, | |
148 { c: "\u00CC", opType: 2, locale: "lt" }, | |
149 { c: "\u0130", opType: 2, locale: "en" }, | |
150 ]; | |
151 | |
152 for (var {c, opType, locale} of invalidValues) { | |
153 var s = c.repeat(1<<27); | |
154 switch (opType) { | |
155 case 0: | |
156 assertThrows(() => s.toUpperCase(), RangeError); | |
157 break; | |
158 case 1: | |
159 assertThrows(() => s.toLocaleUpperCase(locale), RangeError); | |
160 break; | |
161 case 2: | |
162 assertThrows(() => s.toLocaleLowerCase(locale), RangeError); | |
163 break; | |
164 } | |
165 } | |
OLD | NEW |