Source code

Revision control

Copy as Markdown

Other Tools

// Copyright (C) 2020 André Bargull. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-intl.getcanonicallocales
description: >
No RangeError is thrown when a language tag includes a valid transformed extension subtag.
info: |
8.2.1 Intl.getCanonicalLocales (locales)
1. Let ll be ? CanonicalizeLocaleList(locales).
2. Return CreateArrayFromList(ll).
9.2.1 CanonicalizeLocaleList (locales)
...
7. Repeat, while k < len
...
c. If kPresent is true, then
...
v. If IsStructurallyValidLanguageTag(tag) is false, throw a RangeError exception.
vi. Let canonicalizedTag be CanonicalizeUnicodeLocaleId(tag).
...
includes: [testIntl.js]
---*/
const valid = [
// tlang with unicode_language_subtag.
"en-t-en",
// tlang with unicode_script_subtag.
"en-t-en-latn",
// tlang with unicode_region_subtag.
"en-t-en-ca",
// tlang with unicode_script_subtag and unicode_region_subtag.
"en-t-en-latn-ca",
// tlang with unicode_variant_subtag.
"en-t-en-emodeng",
// tlang with unicode_script_subtag and unicode_variant_subtag.
"en-t-en-latn-emodeng",
// tlang with unicode_script_subtag and unicode_variant_subtag.
"en-t-en-ca-emodeng",
// tlang with unicode_script_subtag, unicode_region_subtag, and unicode_variant_subtag.
"en-t-en-latn-ca-emodeng",
// No tlang. (Must contain at least one tfield.)
"en-t-d0-ascii",
];
const extraFields = [
// No extra tfield
"",
// tfield with a tvalue consisting of a single subtag.
"-i0-handwrit",
// tfield with a tvalue consisting of two subtags.
"-s0-accents-publish",
];
for (let tag of valid) {
for (let extra of extraFields) {
let actualTag = tag + extra;
// Make sure the test data is correct.
assert(isCanonicalizedStructurallyValidLanguageTag(actualTag),
"\"" + actualTag + "\" is a canonical and structurally valid language tag.");
let result = Intl.getCanonicalLocales(actualTag);
assert.sameValue(result.length, 1);
assert.sameValue(result[0], actualTag);
}
}
reportCompare(0, 0);