| // |reftest| skip-if(!this.hasOwnProperty("Intl")) |
| /* This Source Code Form is subject to the terms of the Mozilla Public |
| * License, v. 2.0. If a copy of the MPL was not distributed with this |
| * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
| |
| // Tests the compare function with a diverse set of locales and options. |
| |
| var input = [ |
| "Argentina", |
| "Oerlikon", |
| "Offenbach", |
| "Sverige", |
| "Vaticano", |
| "Zimbabwe", |
| "la France", |
| "¡viva España!", |
| "Österreich", |
| "中国", |
| "日本", |
| "한국", |
| ]; |
| |
| var collator, expected; |
| |
| function assertEqualArray(actual, expected, collator) { |
| var description = JSON.stringify(collator.resolvedOptions()); |
| assertEq(actual.length, expected.length, "array length, " + description); |
| for (var i = 0; i < actual.length; i++) { |
| assertEq(actual[i], expected[i], "element " + i + ", " + description); |
| } |
| } |
| |
| |
| // Locale en-US; default options. |
| collator = new Intl.Collator("en-US"); |
| expected = [ |
| "¡viva España!", |
| "Argentina", |
| "la France", |
| "Oerlikon", |
| "Offenbach", |
| "Österreich", |
| "Sverige", |
| "Vaticano", |
| "Zimbabwe", |
| "한국", |
| "中国", |
| "日本", |
| ]; |
| assertEqualArray(input.sort(collator.compare), expected, collator); |
| |
| // Locale sv-SE; default options. |
| // Swedish treats "Ö" as a separate character, which sorts after "Z". |
| collator = new Intl.Collator("sv-SE"); |
| expected = [ |
| "¡viva España!", |
| "Argentina", |
| "la France", |
| "Oerlikon", |
| "Offenbach", |
| "Sverige", |
| "Vaticano", |
| "Zimbabwe", |
| "Österreich", |
| "한국", |
| "中国", |
| "日本", |
| ]; |
| assertEqualArray(input.sort(collator.compare), expected, collator); |
| |
| // Locale sv-SE; ignore punctuation. |
| collator = new Intl.Collator("sv-SE", {ignorePunctuation: true}); |
| expected = [ |
| "Argentina", |
| "la France", |
| "Oerlikon", |
| "Offenbach", |
| "Sverige", |
| "Vaticano", |
| "¡viva España!", |
| "Zimbabwe", |
| "Österreich", |
| "한국", |
| "中国", |
| "日本", |
| ]; |
| assertEqualArray(input.sort(collator.compare), expected, collator); |
| |
| // Locale de-DE; default options. |
| // In German standard sorting, umlauted characters are treated as variants |
| // of their base characters: ä ≅ a, ö ≅ o, ü ≅ u. |
| collator = new Intl.Collator("de-DE"); |
| expected = [ |
| "¡viva España!", |
| "Argentina", |
| "la France", |
| "Oerlikon", |
| "Offenbach", |
| "Österreich", |
| "Sverige", |
| "Vaticano", |
| "Zimbabwe", |
| "한국", |
| "中国", |
| "日本", |
| ]; |
| assertEqualArray(input.sort(collator.compare), expected, collator); |
| |
| // Locale de-DE; phonebook sort order. |
| // In German phonebook sorting, umlauted characters are expanded to two-vowel |
| // sequences: ä → ae, ö → oe, ü → ue. |
| collator = new Intl.Collator("de-DE-u-co-phonebk"); |
| expected = [ |
| "¡viva España!", |
| "Argentina", |
| "la France", |
| "Oerlikon", |
| "Österreich", |
| "Offenbach", |
| "Sverige", |
| "Vaticano", |
| "Zimbabwe", |
| "한국", |
| "中国", |
| "日本", |
| ]; |
| assertEqualArray(input.sort(collator.compare), expected, collator); |
| |
| reportCompare(0, 0, 'ok'); |