blob: e8cb59bbe5b3358b3791a2d87e195a3b49567d12 [file] [log] [blame]
function shouldBe(actual, expected) {
if (actual !== expected)
throw new Error('bad value: ' + actual);
}
function shouldThrow(func, errorMessage) {
var errorThrown = false;
var error = null;
try {
func();
} catch (e) {
errorThrown = true;
error = e;
}
if (!errorThrown)
throw new Error('not thrown');
if (String(error) !== errorMessage)
throw new Error(`bad error: ${String(error)}`);
}
if ($vm.icuVersion() >= 61) {
var regionNames = new Intl.DisplayNames(['en'], {type: 'region'});
shouldThrow(() => regionNames.of(""), `RangeError: argument is not a region subtag`);
shouldThrow(() => regionNames.of("-"), `RangeError: argument is not a region subtag`);
shouldThrow(() => regionNames.of("0"), `RangeError: argument is not a region subtag`);
shouldThrow(() => regionNames.of("00"), `RangeError: argument is not a region subtag`);
shouldThrow(() => regionNames.of("0000"), `RangeError: argument is not a region subtag`);
shouldThrow(() => regionNames.of("a"), `RangeError: argument is not a region subtag`);
shouldThrow(() => regionNames.of("aaa"), `RangeError: argument is not a region subtag`);
if ($vm.icuVersion() >= 64)
shouldBe(regionNames.of("419"), `Latin America`);
shouldBe(regionNames.of("JP"), `Japan`);
shouldBe(regionNames.of("US"), `United States`);
var languageNames = new Intl.DisplayNames(['en'], {type: 'language'});
shouldThrow(() => languageNames.of(""), `RangeError: argument is not a language id`);
shouldThrow(() => languageNames.of("-"), `RangeError: argument is not a language id`);
shouldThrow(() => languageNames.of("--"), `RangeError: argument is not a language id`);
shouldThrow(() => languageNames.of("en-"), `RangeError: argument is not a language id`);
shouldBe(languageNames.of("en-US"), `American English`);
shouldThrow(() => languageNames.of("en_US"), `RangeError: argument is not a language id`);
shouldBe(languageNames.of("en-us"), `American English`);
shouldThrow(() => languageNames.of("root"), `RangeError: argument is not a language id`);
shouldThrow(() => languageNames.of("root-US"), `RangeError: argument is not a language id`);
if ($vm.icuVersion() >= 64)
shouldBe(languageNames.of("es-419"), `Latin American Spanish`);
if (languageNames.of('zh-Hant') !== `Chinese, Traditional`)
shouldBe(languageNames.of('zh-Hant'), `Traditional Chinese`);
if (languageNames.of('zh-Hans-HK') !== `Chinese, Simplified (Hong Kong)` && languageNames.of('zh-Hans-HK') !== `Simplified Chinese (Hong Kong SAR China)`)
shouldBe(languageNames.of('zh-Hans-HK'), `Simplified Chinese (Hong Kong)`);
shouldThrow(() => languageNames.of("Hant"), `RangeError: argument is not a language id`); // Script only
shouldBe(languageNames.of('sr-Latn'), `Serbian (Latin)`); // Language-Script
shouldBe(languageNames.of('sr-Cyrl'), `Serbian (Cyrillic)`); // Language-Script
shouldThrow(() => languageNames.of("zh-HK-Hans"), `RangeError: argument is not a language id`);
shouldBe(languageNames.of('sl-rozaj'), `Slovenian (Resian)`); // Language-Variant
shouldThrow(() => languageNames.of("sl_rozaj"), `RangeError: argument is not a language id`);
shouldThrow(() => languageNames.of("sl-rozaj-Cyrl"), `RangeError: argument is not a language id`);
shouldThrow(() => languageNames.of("sl-rozaj-"), `RangeError: argument is not a language id`);
shouldThrow(() => languageNames.of("sl-_rozaj"), `RangeError: argument is not a language id`);
shouldThrow(() => languageNames.of("sl-Cyrl-"), `RangeError: argument is not a language id`);
shouldThrow(() => languageNames.of("-sl-Cyrl-"), `RangeError: argument is not a language id`);
let latinItalyEasternAmerican = languageNames.of('hy-Latn-IT-arevela');
shouldBe(latinItalyEasternAmerican === `Armenian (Latin, Italy, Eastern Armenian)` || latinItalyEasternAmerican === `Armenian (Latin, Italy)`, true); // Language-Script-Region-Variant
shouldBe(languageNames.of('hy-Latn-IT'), `Armenian (Latin, Italy)`); // Language-Script-Region
let latinEasternAmerican = languageNames.of('hy-Latn-arevela');
shouldBe(latinEasternAmerican === `Armenian (Latin, Eastern Armenian)` || latinEasternAmerican === `Armenian (Latin)`, true); // Language-Script-Variant
shouldThrow(() => languageNames.of("hy-Latn-ITZ-arevela"), `RangeError: argument is not a language id`);
shouldThrow(() => languageNames.of("hy-Latn-00-arevela"), `RangeError: argument is not a language id`);
shouldThrow(() => languageNames.of("hy-Latn-arevelazzzzzzzzzzz"), `RangeError: argument is not a language id`);
shouldThrow(() => languageNames.of("hy-Latn-arevelazzzzzzzzzzz"), `RangeError: argument is not a language id`);
shouldThrow(() => languageNames.of("hyzzzzzzzzz-Latn-arevela"), `RangeError: argument is not a language id`);
var scriptNames = new Intl.DisplayNames(['en'], {type: 'script'});
shouldThrow(() => scriptNames.of(""), `RangeError: argument is not a script subtag`);
shouldThrow(() => scriptNames.of("-"), `RangeError: argument is not a script subtag`);
shouldThrow(() => scriptNames.of("Latn0"), `RangeError: argument is not a script subtag`);
shouldThrow(() => scriptNames.of("Lan0"), `RangeError: argument is not a script subtag`);
shouldThrow(() => scriptNames.of("Lan"), `RangeError: argument is not a script subtag`);
shouldBe(scriptNames.of("Latn"), `Latin`);
shouldBe(scriptNames.of("latn"), `Latin`); // Canonicalization can make it work.
var currencyNames = new Intl.DisplayNames(['en'], {type: 'currency'});
shouldThrow(() => currencyNames.of(""), `RangeError: argument is not a well-formed currency code`);
shouldThrow(() => currencyNames.of("-"), `RangeError: argument is not a well-formed currency code`);
shouldThrow(() => currencyNames.of("ab"), `RangeError: argument is not a well-formed currency code`);
shouldThrow(() => currencyNames.of("jpyx"), `RangeError: argument is not a well-formed currency code`);
shouldThrow(() => currencyNames.of("jp0"), `RangeError: argument is not a well-formed currency code`);
shouldBe(currencyNames.of("jpy"), `Japanese Yen`);
shouldBe(currencyNames.of("JPY"), `Japanese Yen`);
}