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: >
Test Unicode extension subtags where the ukey subtag contains a digit.
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]
---*/
// Unicode locale extension sequences don't allow keys with a digit as their
// second character.
const invalidCases = [
"en-u-c0",
"en-u-00",
];
// The first character is allowed to be a digit.
const validCases = [
"en-u-0c",
];
for (let invalid of invalidCases) {
// Make sure the test data is correct.
assert.sameValue(isCanonicalizedStructurallyValidLanguageTag(invalid), false,
"\"" + invalid + "\" isn't a structurally valid language tag.");
assert.throws(RangeError, () => Intl.getCanonicalLocales(invalid));
}
for (let valid of validCases) {
// Make sure the test data is correct.
assert(isCanonicalizedStructurallyValidLanguageTag(valid),
"\"" + valid + "\" is a canonical and structurally valid language tag.");
let result = Intl.getCanonicalLocales(valid);
assert.sameValue(result.length, 1);
assert.sameValue(result[0], valid);
}
reportCompare(0, 0);