| // Copyright 2019 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| // |
| // Test NumberFormat will accept Intl.Locale as first parameter, or |
| // as in the array. |
| |
| let tag = "zh-Hant-TW-u-nu-thai" |
| let l = new Intl.Locale(tag); |
| |
| var nf; |
| // Test with String |
| assertDoesNotThrow(() => nf = new Intl.NumberFormat(tag)); |
| assertEquals(tag, nf.resolvedOptions().locale); |
| |
| // Test with Array with one String |
| assertDoesNotThrow(() => nf = new Intl.NumberFormat([tag])); |
| assertEquals(tag, nf.resolvedOptions().locale); |
| |
| // Test with Array with two String |
| assertDoesNotThrow(() => nf = new Intl.NumberFormat([tag, "en"])); |
| assertEquals(tag, nf.resolvedOptions().locale); |
| |
| // Test with a Locale |
| assertDoesNotThrow(() => nf = new Intl.NumberFormat(l)); |
| assertEquals(tag, nf.resolvedOptions().locale); |
| |
| // Test with a Array of one Locale |
| assertDoesNotThrow(() => nf = new Intl.NumberFormat([l])); |
| assertEquals(tag, nf.resolvedOptions().locale); |
| |
| // Test with a Array of one Locale and a Sring |
| assertDoesNotThrow(() => nf = new Intl.NumberFormat([l, "en"])); |
| assertEquals(tag, nf.resolvedOptions().locale); |
| |
| // Test DateTimeFormat |
| var df; |
| assertDoesNotThrow(() => df = new Intl.DateTimeFormat(tag)); |
| assertEquals(tag, df.resolvedOptions().locale); |
| assertDoesNotThrow(() => df = new Intl.DateTimeFormat([tag])); |
| assertEquals(tag, df.resolvedOptions().locale); |
| |
| // Test RelativeTimeFormat |
| var rtf; |
| assertDoesNotThrow(() => rtf = new Intl.RelativeTimeFormat(tag)); |
| assertEquals(tag, rtf.resolvedOptions().locale); |
| assertDoesNotThrow(() => rtf = new Intl.RelativeTimeFormat([tag])); |
| assertEquals(tag, rtf.resolvedOptions().locale); |
| |
| // Test ListFormat |
| tag = "zh-Hant-TW" |
| var lf; |
| assertDoesNotThrow(() => lf = new Intl.ListFormat(tag)); |
| assertEquals(tag, lf.resolvedOptions().locale); |
| assertDoesNotThrow(() => lf = new Intl.ListFormat([tag])); |
| assertEquals(tag, lf.resolvedOptions().locale); |
| |
| // Test Collator |
| var col; |
| assertDoesNotThrow(() => col = new Intl.Collator(tag)); |
| assertEquals(tag, lf.resolvedOptions().locale); |
| assertDoesNotThrow(() => col = new Intl.Collator([tag])); |
| assertEquals(tag, lf.resolvedOptions().locale); |
| |
| // Test monkey patching won't impact the result. |
| |
| class MyLocale extends Intl.Locale { |
| constructor(tag, options) { |
| super(tag, options); |
| } |
| toString() { |
| // this should not get called. |
| fail("toString should not be called") |
| } |
| } |
| |
| let myLocale = new MyLocale(tag); |
| |
| // Test with a Locale |
| assertDoesNotThrow(() => nf = new Intl.NumberFormat(myLocale)); |
| assertEquals(tag, nf.resolvedOptions().locale); |
| |
| // Test with a Array of one Locale |
| assertDoesNotThrow(() => nf = new Intl.NumberFormat([myLocale])); |
| assertEquals(tag, nf.resolvedOptions().locale); |
| |
| var res = Intl.getCanonicalLocales(myLocale); |
| assertEquals(1, res.length); |
| assertEquals(tag, res[0]); |
| |
| res = Intl.getCanonicalLocales([myLocale, "fr"]); |
| assertEquals(2, res.length); |
| assertEquals(tag, res[0]); |
| assertEquals("fr", res[1]); |
| |
| res = Intl.getCanonicalLocales(["fr", myLocale]); |
| assertEquals(2, res.length); |
| assertEquals("fr", res[0]); |
| assertEquals(tag, res[1]); |