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