blob: fcc424fbd1c422d2a5733fd0d7834317efb7e6da [file] [log] [blame]
// Copyright 2018 André Bargull; Igalia, S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-intl.locale
description: >
Checks error cases for the options argument to the Locale
constructor.
info: |
Intl.Locale( tag [, options] )
10. If options is undefined, then
11. Else
a. Let options be ? ToObject(options).
12. Set tag to ? ApplyOptionsToTag(tag, options).
ApplyOptionsToTag( tag, options )
...
4. If language is not undefined, then
a. If language does not match the language production, throw a RangeError exception.
...
features: [Intl.Locale]
---*/
/*
language = 2*3ALPHA ; shortest ISO 639 code
["-" extlang] ; sometimes followed by
; extended language subtags
/ 4ALPHA ; or reserved for future use
/ 5*8ALPHA ; or registered language subtag
extlang = 3ALPHA ; selected ISO 639 codes
*2("-" 3ALPHA) ; permanently reserved
*/
const invalidLanguageOptions = [
"",
"a",
"ab7",
"notalanguage",
"undefined",
// Value contains more than just the 'language' production.
"fr-Latn",
"fr-FR",
"sa-vaidika",
"fr-a-asdf",
"fr-x-private",
// Irregular grandfathered language tag.
"i-klingon",
// Regular grandfathered language tag.
"zh-min",
"zh-min-nan",
// Reserved with extended language subtag
"abcd-US",
"abcde-US",
"abcdef-US",
"abcdefg-US",
"abcdefgh-US",
7,
];
for (const language of invalidLanguageOptions) {
assert.throws(RangeError, function() {
new Intl.Locale("en", {language});
}, `new Intl.Locale("en", {language: "${language}"}) throws RangeError`);
}