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