Source code

Revision control

Copy as Markdown

Other Tools

// Copyright 2020 Mozilla Corporation. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-resolvelocale
description: >
Values provided as properties of the options-argument to the Locale
constructor are converted to canonical form.
info: |
ResolveLocale ( availableLocales, requestedLocales, options, relevantExtensionKeys, localeData )
...
9.i.iii.1. Let optionsValue be the string optionsValue after performing the algorithm steps to transform Unicode extension values to canonical syntax per Unicode Technical Standard #35 LDML § 3.2.1 Canonical Unicode Locale Identifiers, treating key as ukey and optionsValue as uvalue productions.
9.i.iii.2. Let optionsValue be the string optionsValue after performing the algorithm steps to replace Unicode extension values with their canonical form per Unicode Technical Standard #35 LDML § 3.2.1 Canonical Unicode Locale Identifiers, treating key as ukey and optionsValue as uvalue productions.
...
features: [Intl.Locale]
---*/
const keyValueTests = [
{
key: "ca",
option: "calendar",
tests: [
["islamicc", "islamic-civil"],
["ethiopic-amete-alem", "ethioaa"],
],
},
];
for (const { key, option, tests } of keyValueTests) {
for (const [noncanonical, canonical] of tests) {
let canonicalInLocale =
new Intl.Locale(`en-u-${key}-${canonical}`);
assert.sameValue(
canonicalInLocale[option],
canonical,
`new Intl.Locale("en-u-${key}-${canonical}").${option} returns ${canonical}`
);
let canonicalInOption =
new Intl.Locale(`en`, { [option]: canonical });
assert.sameValue(
canonicalInOption[option],
canonical,
`new Intl.Locale("en", { ${option}: "${canonical}" }).${option} returns ${canonical}`
);
let noncanonicalInLocale =
new Intl.Locale(`en-u-${key}-${noncanonical}`);
assert.sameValue(
noncanonicalInLocale[option],
canonical,
`new Intl.Locale("en-u-${key}-${noncanonical}").${option} returns ${canonical}`
);
let noncanonicalInOption =
new Intl.Locale(`en`, { [option]: noncanonical });
assert.sameValue(
noncanonicalInOption[option],
canonical,
`new Intl.Locale("en", { ${option}: "${noncanonical}" }).${option} returns ${canonical}`
);
}
}
reportCompare(0, 0);