compare.js (3342B)
1 // |reftest| skip-if(!this.hasOwnProperty("Intl")) 2 /* This Source Code Form is subject to the terms of the Mozilla Public 3 * License, v. 2.0. If a copy of the MPL was not distributed with this 4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 5 6 // Tests the compare function with a diverse set of locales and options. 7 8 var input = [ 9 "Argentina", 10 "Oerlikon", 11 "Offenbach", 12 "Sverige", 13 "Vaticano", 14 "Zimbabwe", 15 "la France", 16 "¡viva España!", 17 "Österreich", 18 "中国", 19 "日本", 20 "한국", 21 ]; 22 23 var collator, expected; 24 25 function assertEqualArray(actual, expected, collator) { 26 var description = JSON.stringify(collator.resolvedOptions()); 27 assertEq(actual.length, expected.length, "array length, " + description); 28 for (var i = 0; i < actual.length; i++) { 29 assertEq(actual[i], expected[i], "element " + i + ", " + description); 30 } 31 } 32 33 34 // Locale en-US; default options. 35 collator = new Intl.Collator("en-US"); 36 expected = [ 37 "¡viva España!", 38 "Argentina", 39 "la France", 40 "Oerlikon", 41 "Offenbach", 42 "Österreich", 43 "Sverige", 44 "Vaticano", 45 "Zimbabwe", 46 "한국", 47 "中国", 48 "日本", 49 ]; 50 assertEqualArray(input.sort(collator.compare), expected, collator); 51 52 // Locale sv-SE; default options. 53 // Swedish treats "Ö" as a separate character, which sorts after "Z". 54 collator = new Intl.Collator("sv-SE"); 55 expected = [ 56 "¡viva España!", 57 "Argentina", 58 "la France", 59 "Oerlikon", 60 "Offenbach", 61 "Sverige", 62 "Vaticano", 63 "Zimbabwe", 64 "Österreich", 65 "한국", 66 "中国", 67 "日本", 68 ]; 69 assertEqualArray(input.sort(collator.compare), expected, collator); 70 71 // Locale sv-SE; ignore punctuation. 72 collator = new Intl.Collator("sv-SE", {ignorePunctuation: true}); 73 expected = [ 74 "Argentina", 75 "la France", 76 "Oerlikon", 77 "Offenbach", 78 "Sverige", 79 "Vaticano", 80 "¡viva España!", 81 "Zimbabwe", 82 "Österreich", 83 "한국", 84 "中国", 85 "日本", 86 ]; 87 assertEqualArray(input.sort(collator.compare), expected, collator); 88 89 // Locale de-DE; default options. 90 // In German standard sorting, umlauted characters are treated as variants 91 // of their base characters: ä ≅ a, ö ≅ o, ü ≅ u. 92 collator = new Intl.Collator("de-DE"); 93 expected = [ 94 "¡viva España!", 95 "Argentina", 96 "la France", 97 "Oerlikon", 98 "Offenbach", 99 "Österreich", 100 "Sverige", 101 "Vaticano", 102 "Zimbabwe", 103 "한국", 104 "中国", 105 "日本", 106 ]; 107 assertEqualArray(input.sort(collator.compare), expected, collator); 108 109 // Locale de-DE; phonebook sort order. 110 // In German phonebook sorting, umlauted characters are expanded to two-vowel 111 // sequences: ä → ae, ö → oe, ü → ue. 112 collator = new Intl.Collator("de-DE-u-co-phonebk"); 113 expected = [ 114 "¡viva España!", 115 "Argentina", 116 "la France", 117 "Oerlikon", 118 "Österreich", 119 "Offenbach", 120 "Sverige", 121 "Vaticano", 122 "Zimbabwe", 123 "한국", 124 "中国", 125 "日本", 126 ]; 127 assertEqualArray(input.sort(collator.compare), expected, collator); 128 129 130 // Test the .name property of the "compare" getter. 131 var desc = Object.getOwnPropertyDescriptor(Intl.Collator.prototype, "compare"); 132 assertEq(desc !== undefined, true); 133 assertEq(typeof desc.get, "function"); 134 assertEq(desc.get.name, "get compare"); 135 136 137 reportCompare(0, 0, 'ok');