|
| 1 | +//------------------------------------------------------------------------------------------------------- |
| 2 | +// Copyright (C) Microsoft. All rights reserved. |
| 3 | +// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. |
| 4 | +//------------------------------------------------------------------------------------------------------- |
| 5 | + |
| 6 | +WScript.LoadScriptFile("..\\UnitTestFramework\\UnitTestFramework.js"); |
| 7 | + |
| 8 | +testRunner.runTests([ |
| 9 | + { |
| 10 | + name: "Basic functionality", |
| 11 | + body() { |
| 12 | + assert.areEqual("Locale", Intl.Locale.name); |
| 13 | + const locale = new Intl.Locale("en"); |
| 14 | + assert.areEqual("en", locale.toString()); |
| 15 | + assert.areEqual("[object Intl.Locale]", Object.prototype.toString.call(locale)); |
| 16 | + }, |
| 17 | + }, |
| 18 | + { |
| 19 | + name: "Applying options", |
| 20 | + body() { |
| 21 | + function test(expected, langtag, options) { |
| 22 | + const locale = new Intl.Locale(langtag, options); |
| 23 | + assert.areEqual(expected, locale.toString()); |
| 24 | + } |
| 25 | + |
| 26 | + test("es", "es"); |
| 27 | + test("de", "en", { language: "de" }); |
| 28 | + test("de-Latn-DE-u-ca-chinese", "en", { language: "de", script: "Latn", region: "DE", calendar: "chinese" }); |
| 29 | + test("ar-u-co-unihan", "ar-u-co-unihan"); |
| 30 | + test("ar-u-co-unihan", "ar", { collation: "unihan" }); |
| 31 | + } |
| 32 | + }, |
| 33 | + { |
| 34 | + name: "Using an existing Locale object for the langtag argument", |
| 35 | + body() { |
| 36 | + const enUS = new Intl.Locale("en-US"); |
| 37 | + assert.areEqual("en", enUS.language); |
| 38 | + assert.areEqual("US", enUS.region); |
| 39 | + |
| 40 | + const enGB = new Intl.Locale(enUS, { region: "GB" }); |
| 41 | + assert.areEqual("en", enGB.language); |
| 42 | + assert.areEqual("GB", enGB.region); |
| 43 | + |
| 44 | + const deGB = new Intl.Locale(enGB, { language: "de" }); |
| 45 | + assert.areEqual("de", deGB.language); |
| 46 | + assert.areEqual("GB", deGB.region); |
| 47 | + |
| 48 | + const deLatnGB = new Intl.Locale(deGB, { script: "Latn" }); |
| 49 | + assert.areEqual("de", deLatnGB.language); |
| 50 | + assert.areEqual("GB", deLatnGB.region); |
| 51 | + assert.areEqual("Latn", deLatnGB.script); |
| 52 | + |
| 53 | + const dePhonebk = new Intl.Locale("de-u-co-phonebk"); |
| 54 | + assert.areEqual("de", dePhonebk.language); |
| 55 | + assert.areEqual("phonebk", dePhonebk.collation); |
| 56 | + |
| 57 | + const deUnihan = new Intl.Locale(dePhonebk, { collation: "unihan" }); |
| 58 | + assert.areEqual("de", deUnihan.language); |
| 59 | + assert.areEqual("unihan", deUnihan.collation); |
| 60 | + |
| 61 | + const esUnihanH24 = new Intl.Locale(deUnihan, { language: "es", hourCycle: "h24" }); |
| 62 | + assert.areEqual("es", esUnihanH24.language); |
| 63 | + assert.areEqual("unihan", esUnihanH24.collation); |
| 64 | + assert.areEqual("h24", esUnihanH24.hourCycle); |
| 65 | + } |
| 66 | + }, |
| 67 | + { |
| 68 | + name: "Maximizing and minimizing", |
| 69 | + body() { |
| 70 | + function test(input, expected, minimal, maximal) { |
| 71 | + const locale = new Intl.Locale(input); |
| 72 | + assert.areEqual(expected, locale.toString(), `Incorrect canonicalization of ${input}`); |
| 73 | + assert.areEqual(minimal, locale.minimize().toString(), `Incorrect minimization of ${input}`); |
| 74 | + assert.areEqual(maximal, locale.maximize().toString(), `Incorrect maximization of ${input}`); |
| 75 | + } |
| 76 | + |
| 77 | + test("en", "en", "en", "en-Latn-US"); |
| 78 | + test("DE-de", "de-DE", "de", "de-Latn-DE"); |
| 79 | + |
| 80 | + // cases inspired by the examples in https://www.unicode.org/reports/tr35/#Likely_Subtags |
| 81 | + test("zh", "zh", "zh", "zh-Hans-CN"); |
| 82 | + test("zh-HanT", "zh-Hant", "zh-Hant", "zh-Hant-TW"); |
| 83 | + test("zh-MO", "zh-MO", "zh-MO", "zh-Hant-MO"); |
| 84 | + test("ZH-Hant-TW", "zh-Hant-TW", "zh-TW", "zh-Hant-TW"); |
| 85 | + test("und-Hant", "und-Hant", "und-Hant", "zh-Hant-TW"); |
| 86 | + |
| 87 | + // the UTS35 example says the maximized version should be fa-Arab-AF? |
| 88 | + test("und-Arab-AF", "und-Arab-AF", "und-Arab-AF", "ar-Arab-AF"); |
| 89 | + |
| 90 | + // Chakra performs incorrect canonicalization, so the following cases don't pass. |
| 91 | + // test("sh-Arab-AQ", "sr-Arab-AQ", "sr-Arab-AQ", "sr-Arab-AQ"); |
| 92 | + // test("ZH-ZZZZ-SG", "zh-SG", "zh-SG", "zh-Hans-SG"); |
| 93 | + } |
| 94 | + }, |
| 95 | +], { verbose: false }) |
0 commit comments