|
1 // |reftest| skip-if(!xulRuntime.shell||!("normalize"in(String.prototype))) -- uses shell load() function, String.prototype.normalize is not enabled in all builds |
|
2 var BUGNUMBER = 918987; |
|
3 var summary = 'String.prototype.normalize'; |
|
4 |
|
5 print(BUGNUMBER + ": " + summary); |
|
6 |
|
7 /************** |
|
8 * BEGIN TEST * |
|
9 **************/ |
|
10 |
|
11 load('ecma_6/String/normalize-generateddata-input.js'); |
|
12 |
|
13 function codePointsToString(points) { |
|
14 return points.map(x => String.fromCodePoint(x)).join(""); |
|
15 } |
|
16 function stringify(points) { |
|
17 return points.map(x => x.toString(16)).join(); |
|
18 } |
|
19 |
|
20 function runTest(test) { |
|
21 var source = codePointsToString(test.source); |
|
22 var NFC = codePointsToString(test.NFC); |
|
23 var NFD = codePointsToString(test.NFD); |
|
24 var NFKC = codePointsToString(test.NFKC); |
|
25 var NFKD = codePointsToString(test.NFKD); |
|
26 var sourceStr = stringify(test.source); |
|
27 var nfcStr = stringify(test.NFC); |
|
28 var nfdStr = stringify(test.NFD); |
|
29 var nfkcStr = stringify(test.NFKC); |
|
30 var nfkdStr = stringify(test.NFKD); |
|
31 |
|
32 /* NFC */ |
|
33 assertEq(source.normalize(), NFC, "NFC of " + sourceStr); |
|
34 assertEq(NFC.normalize(), NFC, "NFC of " + nfcStr); |
|
35 assertEq(NFD.normalize(), NFC, "NFC of " + nfdStr); |
|
36 assertEq(NFKC.normalize(), NFKC, "NFC of " + nfkcStr); |
|
37 assertEq(NFKD.normalize(), NFKC, "NFC of " + nfkdStr); |
|
38 |
|
39 assertEq(source.normalize(undefined), NFC, "NFC of " + sourceStr); |
|
40 assertEq(NFC.normalize(undefined), NFC, "NFC of " + nfcStr); |
|
41 assertEq(NFD.normalize(undefined), NFC, "NFC of " + nfdStr); |
|
42 assertEq(NFKC.normalize(undefined), NFKC, "NFC of " + nfkcStr); |
|
43 assertEq(NFKD.normalize(undefined), NFKC, "NFC of " + nfkdStr); |
|
44 |
|
45 assertEq(source.normalize("NFC"), NFC, "NFC of " + sourceStr); |
|
46 assertEq(NFC.normalize("NFC"), NFC, "NFC of " + nfcStr); |
|
47 assertEq(NFD.normalize("NFC"), NFC, "NFC of " + nfdStr); |
|
48 assertEq(NFKC.normalize("NFC"), NFKC, "NFC of " + nfkcStr); |
|
49 assertEq(NFKD.normalize("NFC"), NFKC, "NFC of " + nfkdStr); |
|
50 |
|
51 /* NFD */ |
|
52 assertEq(source.normalize("NFD"), NFD, "NFD of " + sourceStr); |
|
53 assertEq(NFC.normalize("NFD"), NFD, "NFD of " + nfcStr); |
|
54 assertEq(NFD.normalize("NFD"), NFD, "NFD of " + nfdStr); |
|
55 assertEq(NFKC.normalize("NFD"), NFKD, "NFD of " + nfkcStr); |
|
56 assertEq(NFKD.normalize("NFD"), NFKD, "NFD of " + nfkdStr); |
|
57 |
|
58 /* NFKC */ |
|
59 assertEq(source.normalize("NFKC"), NFKC, "NFKC of " + sourceStr); |
|
60 assertEq(NFC.normalize("NFKC"), NFKC, "NFKC of " + nfcStr); |
|
61 assertEq(NFD.normalize("NFKC"), NFKC, "NFKC of " + nfdStr); |
|
62 assertEq(NFKC.normalize("NFKC"), NFKC, "NFKC of " + nfkcStr); |
|
63 assertEq(NFKD.normalize("NFKC"), NFKC, "NFKC of " + nfkdStr); |
|
64 |
|
65 /* NFKD */ |
|
66 assertEq(source.normalize("NFKD"), NFKD, "NFKD of " + sourceStr); |
|
67 assertEq(NFC.normalize("NFKD"), NFKD, "NFKD of " + nfcStr); |
|
68 assertEq(NFD.normalize("NFKD"), NFKD, "NFKD of " + nfdStr); |
|
69 assertEq(NFKC.normalize("NFKD"), NFKD, "NFKD of " + nfkcStr); |
|
70 assertEq(NFKD.normalize("NFKD"), NFKD, "NFKD of " + nfkdStr); |
|
71 } |
|
72 |
|
73 for (var test0 of tests_part0) { |
|
74 runTest(test0); |
|
75 } |
|
76 var part1 = new Set(); |
|
77 for (var test1 of tests_part1) { |
|
78 part1.add(test1.source[0]); |
|
79 runTest(test1); |
|
80 } |
|
81 for (var test2 of tests_part2) { |
|
82 runTest(test2); |
|
83 } |
|
84 for (var test3 of tests_part3) { |
|
85 runTest(test3); |
|
86 } |
|
87 |
|
88 /* not listed in Part 1 */ |
|
89 for (var x = 0; x <= 0x2FFFF; x++) { |
|
90 if (part1.has(x)) { |
|
91 continue; |
|
92 } |
|
93 var xstr = x.toString(16); |
|
94 var c = String.fromCodePoint(x); |
|
95 assertEq(c.normalize(), c, "NFC of " + xstr); |
|
96 assertEq(c.normalize(undefined), c, "NFC of " + xstr); |
|
97 assertEq(c.normalize("NFC"), c, "NFC of " + xstr); |
|
98 assertEq(c.normalize("NFD"), c, "NFD of " + xstr); |
|
99 assertEq(c.normalize("NFKC"), c, "NFKC of " + xstr); |
|
100 assertEq(c.normalize("NFKD"), c, "NFKD of " + xstr); |
|
101 } |
|
102 |
|
103 var myobj = {toString : (function () "a\u0301"), normalize : String.prototype.normalize}; |
|
104 assertEq(myobj.normalize(), "\u00E1"); |
|
105 |
|
106 assertThrowsInstanceOf(function() { |
|
107 "abc".normalize("NFE"); |
|
108 }, RangeError, |
|
109 "String.prototype.normalize should raise RangeError on invalid form"); |
|
110 |
|
111 assertEq("".normalize(), ""); |
|
112 |
|
113 /* JSRope test */ |
|
114 var a = ""; |
|
115 var b = ""; |
|
116 for (var i = 0; i < 100; i++) { |
|
117 a += "\u0100"; |
|
118 b += "\u0041\u0304"; |
|
119 } |
|
120 assertEq(a.normalize("NFD"), b); |
|
121 |
|
122 /******************************************************************************/ |
|
123 |
|
124 if (typeof reportCompare === "function") |
|
125 reportCompare(true, true); |
|
126 print("Tests complete"); |