blob: 7be029a34e3f4e1e0036a9d571bb4d6e0029290d [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) {
shouldBe(Intl.DisplayNames.length, 2);
shouldThrow(() => new Intl.DisplayNames, `TypeError: type must not be undefined`);
// Get display names of region in English
var regionNames = new Intl.DisplayNames(['en'], {type: 'region'});
if ($vm.icuVersion() >= 64) {
shouldBe(regionNames.of('419'), "Latin America");
shouldBe(regionNames.of('BZ'), "Belize");
}
shouldBe(regionNames.of('US'), "United States");
shouldBe(regionNames.of('BA'), "Bosnia & Herzegovina");
shouldBe(regionNames.of('MM'), "Myanmar (Burma)");
// Get display names of region in Traditional Chinese
regionNames = new Intl.DisplayNames(['zh-Hant'], {type: 'region'});
if ($vm.icuVersion() >= 64) {
shouldBe(regionNames.of('419'), "拉丁美洲");
shouldBe(regionNames.of('BZ'), "貝里斯");
}
shouldBe(regionNames.of('US'), "美國");
shouldBe(regionNames.of('BA'), "波士尼亞與赫塞哥維納");
shouldBe(regionNames.of('MM'), "緬甸");
regionNames = new Intl.DisplayNames(['en'], {type: 'region', style: 'short'});
if ($vm.icuVersion() >= 64) {
shouldBe(regionNames.of('419'), "Latin America");
shouldBe(regionNames.of('BZ'), "Belize");
}
shouldBe(regionNames.of('US'), "US");
shouldBe(regionNames.of('BA'), "Bosnia");
shouldBe(regionNames.of('MM'), "Myanmar");
regionNames = new Intl.DisplayNames(['en'], {type: 'region', style: 'narrow'});
if ($vm.icuVersion() >= 64) {
shouldBe(regionNames.of('419'), "Latin America");
shouldBe(regionNames.of('BZ'), "Belize");
}
shouldBe(regionNames.of('US'), "US");
shouldBe(regionNames.of('BA'), "Bosnia");
shouldBe(regionNames.of('MM'), "Myanmar");
// Get display names of language in English
var languageNames = new Intl.DisplayNames(['en'], {type: 'language'});
shouldBe(languageNames.of('fr'), "French");
shouldBe(languageNames.of('de'), "German");
shouldBe(languageNames.of('fr-CA'), "Canadian French");
if (languageNames.of('zh-Hant') !== "Chinese, Traditional")
shouldBe(languageNames.of('zh-Hant'), "Traditional Chinese");
shouldBe(languageNames.of('en-US'), "American English");
shouldBe(languageNames.of('zh-TW'), "Chinese (Taiwan)");
// Get display names of language in Traditional Chinese
languageNames = new Intl.DisplayNames(['zh-Hant'], {type: 'language'});
shouldBe(languageNames.of('fr'), "法文");
shouldBe(languageNames.of('zh'), "中文");
shouldBe(languageNames.of('de'), "德文");
languageNames = new Intl.DisplayNames(['en'], {type: 'language', style: 'short'});
shouldBe(languageNames.of('fr'), "French");
shouldBe(languageNames.of('de'), "German");
shouldBe(languageNames.of('fr-CA'), "Canadian French");
if (languageNames.of('zh-Hant') !== "Chinese, Traditional")
shouldBe(languageNames.of('zh-Hant'), "Traditional Chinese");
shouldBe(languageNames.of('en-US'), "US English");
if (languageNames.of('zh-TW') !== "Chinese (TW)")
shouldBe(languageNames.of('zh-TW'), "Chinese (Taiwan)");
languageNames = new Intl.DisplayNames(['en'], {type: 'language', style: 'narrow'});
shouldBe(languageNames.of('fr'), "French");
shouldBe(languageNames.of('de'), "German");
shouldBe(languageNames.of('fr-CA'), "Canadian French");
if (languageNames.of('zh-Hant') !== "Chinese, Traditional")
shouldBe(languageNames.of('zh-Hant'), "Traditional Chinese");
shouldBe(languageNames.of('en-US'), "US English");
if (languageNames.of('zh-TW') !== "Chinese (TW)")
shouldBe(languageNames.of('zh-TW'), "Chinese (Taiwan)");
// Get display names of script in English
var scriptNames = new Intl.DisplayNames(['en'], {type: 'script'});
// Get script names
if ($vm.icuVersion() >= 64)
shouldBe(scriptNames.of('Latn'), "Latin");
shouldBe(scriptNames.of('Arab'), "Arabic");
shouldBe(scriptNames.of('Kana'), "Katakana");
// Get display names of script in Traditional Chinese
scriptNames = new Intl.DisplayNames(['zh-Hant'], {type: 'script'});
shouldBe(scriptNames.of('Latn'), "拉丁文");
shouldBe(scriptNames.of('Arab'), "阿拉伯文");
shouldBe(scriptNames.of('Kana'), "片假名");
if ($vm.icuVersion() >= 64) {
scriptNames = new Intl.DisplayNames(['en'], {type: 'script', style: 'short'});
shouldBe(scriptNames.of('Latn'), "Latin");
shouldBe(scriptNames.of('Arab'), "Arabic");
shouldBe(scriptNames.of('Kana'), "Katakana");
scriptNames = new Intl.DisplayNames(['en'], {type: 'script', style: 'narrow'});
shouldBe(scriptNames.of('Latn'), "Latin");
shouldBe(scriptNames.of('Arab'), "Arabic");
shouldBe(scriptNames.of('Kana'), "Katakana");
}
// Get display names of currency code in English
var currencyNames = new Intl.DisplayNames(['en'], {type: 'currency'});
// Get currency names
shouldBe(currencyNames.of('USD'), "US Dollar");
shouldBe(currencyNames.of('EUR'), "Euro");
shouldBe(currencyNames.of('TWD'), "New Taiwan Dollar");
shouldBe(currencyNames.of('CNY'), "Chinese Yuan");
shouldBe(currencyNames.of('JPY'), "Japanese Yen");
// Get display names of currency code in Traditional Chinese
currencyNames = new Intl.DisplayNames(['zh-Hant'], {type: 'currency'});
shouldBe(currencyNames.of('USD'), "美元");
shouldBe(currencyNames.of('EUR'), "歐元");
shouldBe(currencyNames.of('TWD'), "新台幣");
shouldBe(currencyNames.of('CNY'), "人民幣");
shouldBe(currencyNames.of('JPY'), "日圓");
// Get display names of currency code in English in short
currencyNames = new Intl.DisplayNames(['en'], {type: 'currency', style: 'short' });
shouldBe(currencyNames.of('USD'), "$");
shouldBe(currencyNames.of('EUR'), "€");
shouldBe(currencyNames.of('TWD'), "NT$");
shouldBe(currencyNames.of('CNY'), "CN¥");
shouldBe(currencyNames.of('JPY'), "¥");
// Get display names of currency code in English in narrow
currencyNames = new Intl.DisplayNames(['en'], {type: 'currency', style: 'narrow' });
shouldBe(currencyNames.of('USD'), "$");
shouldBe(currencyNames.of('EUR'), "€");
shouldBe(currencyNames.of('TWD'), "$");
shouldBe(currencyNames.of('CNY'), "¥");
shouldBe(currencyNames.of('JPY'), "¥");
shouldBe(currencyNames.of('JPZ'), "JPZ"); // Fallback code
shouldBe(JSON.stringify(currencyNames.resolvedOptions()), `{"locale":"en","style":"narrow","type":"currency","fallback":"code"}`);
currencyNames = new Intl.DisplayNames(['en'], {type: 'currency', style: 'narrow', fallback: 'none' });
shouldBe(currencyNames.of('JPZ'), undefined); // Fallback none
shouldBe(JSON.stringify(currencyNames.resolvedOptions()), `{"locale":"en","style":"narrow","type":"currency","fallback":"none"}`);
regionNames = new Intl.DisplayNames(['en'], {type: 'region'});
shouldBe(regionNames.of('999'), "999");
shouldBe(JSON.stringify(regionNames.resolvedOptions()), `{"locale":"en","style":"long","type":"region","fallback":"code"}`);
regionNames = new Intl.DisplayNames(['en'], {type: 'region', fallback:'none'});
if ($vm.icuVersion() > 64)
shouldBe(regionNames.of('999'), undefined);
shouldBe(JSON.stringify(regionNames.resolvedOptions()), `{"locale":"en","style":"long","type":"region","fallback":"none"}`);
languageNames = new Intl.DisplayNames(['en'], {type: 'language'});
if ($vm.icuVersion() > 64) {
shouldBe(languageNames.of('en-AA'), "en-AA");
var object = {
toString() {
return 'en-AA';
}
};
shouldBe(languageNames.of(object), 'en-AA');
}
languageNames = new Intl.DisplayNames(['en'], {type: 'language', fallback: 'none'});
if ($vm.icuVersion() > 64) {
shouldBe(languageNames.of('en-AA'), undefined);
shouldBe(languageNames.of(object), undefined);
}
shouldBe(Intl.DisplayNames.prototype[Symbol.toStringTag], `Intl.DisplayNames`);
shouldBe(JSON.stringify(Intl.DisplayNames.supportedLocalesOf("en")), `["en"]`);
shouldBe(JSON.stringify(Intl.DisplayNames.supportedLocalesOf("ja-JP")), `["ja-JP"]`);
shouldBe(JSON.stringify(Intl.DisplayNames.supportedLocalesOf({ length: 4, 1: 'en', 0: 'es', 3: 'de' })), '["es","en","de"]');
shouldThrow(() => Intl.DisplayNames.supportedLocalesOf(""), `RangeError: invalid language tag: `)
shouldThrow(() => {
Intl.DisplayNames.prototype.of.call({});
}, `TypeError: Intl.DisplayNames.prototype.of called on value that's not a DisplayNames`);
shouldThrow(() => {
Intl.DisplayNames.prototype.resolvedOptions.call({});
}, `TypeError: Intl.DisplayNames.prototype.resolvedOptions called on value that's not a DisplayNames`);
}