mirror of https://github.com/tc39/test262.git
79 lines
1.9 KiB
JavaScript
79 lines
1.9 KiB
JavaScript
// 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: >
|
|
A RangeError is thrown when a language tag includes an invalid 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.
|
|
...
|
|
|
|
includes: [testIntl.js]
|
|
---*/
|
|
|
|
const invalid = [
|
|
// empty
|
|
"en-t",
|
|
"en-t-a",
|
|
"en-t-x",
|
|
"en-t-0",
|
|
|
|
// incomplete
|
|
"en-t-",
|
|
"en-t-en-",
|
|
"en-t-0x-",
|
|
|
|
// tlang: unicode_language_subtag must be 2-3 or 5-8 characters and mustn't
|
|
// contain extlang subtags.
|
|
"en-t-root",
|
|
"en-t-abcdefghi",
|
|
"en-t-ar-aao",
|
|
|
|
// tlang: unicode_script_subtag must be 4 alphabetical characters, can't
|
|
// be repeated.
|
|
"en-t-en-lat0",
|
|
"en-t-en-latn-latn",
|
|
|
|
// tlang: unicode_region_subtag must either be 2 alpha characters or a three
|
|
// digit code.
|
|
"en-t-en-0",
|
|
"en-t-en-00",
|
|
"en-t-en-0x",
|
|
"en-t-en-x0",
|
|
"en-t-en-latn-0",
|
|
"en-t-en-latn-00",
|
|
"en-t-en-latn-xyz",
|
|
|
|
// tlang: unicode_variant_subtag is either 5-8 alphanum characters or 4
|
|
// characters starting with a digit.
|
|
"en-t-en-abcdefghi",
|
|
"en-t-en-latn-gb-ab",
|
|
"en-t-en-latn-gb-abc",
|
|
"en-t-en-latn-gb-abcd",
|
|
"en-t-en-latn-gb-abcdefghi",
|
|
|
|
// tkey must be followed by tvalue.
|
|
"en-t-d0",
|
|
"en-t-d0-m0",
|
|
"en-t-d0-x-private",
|
|
];
|
|
|
|
for (let tag of invalid) {
|
|
// Make sure the test data is correct.
|
|
assert.sameValue(isCanonicalizedStructurallyValidLanguageTag(tag), false,
|
|
"\"" + tag + "\" isn't a structurally valid language tag.");
|
|
|
|
assert.throws(RangeError, () => Intl.getCanonicalLocales(tag), `${tag}`);
|
|
}
|