// 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}`); }