kopia lustrzana https://github.com/cheeaun/phanpy
276 wiersze
5.7 KiB
JavaScript
276 wiersze
5.7 KiB
JavaScript
// @ts-check
|
|
import { test, expect } from '@playwright/test';
|
|
import localeMatch from '../src/utils/locale-match.js';
|
|
|
|
// https://github.com/formatjs/formatjs/blob/e11b9b57a5ed745584b169c13b0a1812ba9e6051/packages/intl-localematcher/tests/index.test.ts
|
|
test.describe('official formatjs test cases', () => {
|
|
test('zh-HK', () => {
|
|
expect(localeMatch(['zh-HK'], ['zh', 'zh-HANT', 'en'], 'en')).toBe(
|
|
'zh-HANT',
|
|
);
|
|
});
|
|
|
|
test('Intl.LocaleMatcher - fr-XX fallback', () => {
|
|
expect(localeMatch(['fr-XX', 'en'], ['fr', 'en'], 'en')).toBe('fr');
|
|
});
|
|
|
|
test('Intl.LocaleMatcher - zh-TW to zh-Hant-TW', () => {
|
|
expect(localeMatch(['zh-TW', 'en'], ['zh-Hant-TW', 'en'], 'en')).toBe(
|
|
'zh-Hant-TW',
|
|
);
|
|
});
|
|
|
|
test('Intl.LocaleMatcher - sr-Latn-BA complex matching', () => {
|
|
expect(
|
|
localeMatch(
|
|
['sr-Latn-BA'],
|
|
[
|
|
'af',
|
|
'ak',
|
|
'am',
|
|
'an',
|
|
'ar',
|
|
'ars',
|
|
'as',
|
|
'asa',
|
|
'ast',
|
|
'az',
|
|
'be',
|
|
'bem',
|
|
'bez',
|
|
'bg',
|
|
'bho',
|
|
'bm',
|
|
'bn',
|
|
'bo',
|
|
'br',
|
|
'brx',
|
|
'bs',
|
|
'ca',
|
|
'ce',
|
|
'ceb',
|
|
'cgg',
|
|
'chr',
|
|
'ckb',
|
|
'cs',
|
|
'cy',
|
|
'da',
|
|
'de',
|
|
'doi',
|
|
'dsb',
|
|
'dv',
|
|
'dz',
|
|
'ee',
|
|
'el',
|
|
'en',
|
|
'eo',
|
|
'es',
|
|
'et',
|
|
'eu',
|
|
'fa',
|
|
'ff',
|
|
'fi',
|
|
'fil',
|
|
'fo',
|
|
'fr',
|
|
'fur',
|
|
'fy',
|
|
'ga',
|
|
'gd',
|
|
'gl',
|
|
'gsw',
|
|
'gu',
|
|
'guw',
|
|
'gv',
|
|
'ha',
|
|
'haw',
|
|
'he',
|
|
'ksb',
|
|
'ksh',
|
|
'ku',
|
|
'kw',
|
|
'ky',
|
|
'lag',
|
|
'lb',
|
|
'lg',
|
|
'lij',
|
|
'lkt',
|
|
'ln',
|
|
'lo',
|
|
'lt',
|
|
'lv',
|
|
'mas',
|
|
'mg',
|
|
'mgo',
|
|
'mk',
|
|
'ml',
|
|
'mn',
|
|
'mo',
|
|
'mr',
|
|
'ms',
|
|
'mt',
|
|
'my',
|
|
'nah',
|
|
'naq',
|
|
'nb',
|
|
'nd',
|
|
'ne',
|
|
'nl',
|
|
'nn',
|
|
'nnh',
|
|
'no',
|
|
'nqo',
|
|
'nr',
|
|
'nso',
|
|
'ny',
|
|
'nyn',
|
|
'om',
|
|
'or',
|
|
'os',
|
|
'osa',
|
|
'pa',
|
|
'pap',
|
|
'pcm',
|
|
'pl',
|
|
'prg',
|
|
'ps',
|
|
'pt-PT',
|
|
'pt',
|
|
'rm',
|
|
'ro',
|
|
'rof',
|
|
'ru',
|
|
'rwk',
|
|
'sah',
|
|
'saq',
|
|
'sat',
|
|
'sc',
|
|
'scn',
|
|
'sd',
|
|
'sdh',
|
|
'se',
|
|
'seh',
|
|
'ses',
|
|
'sg',
|
|
'sh',
|
|
'shi',
|
|
'si',
|
|
'sk',
|
|
'sl',
|
|
'sma',
|
|
'smi',
|
|
'smj',
|
|
'smn',
|
|
'sms',
|
|
'sn',
|
|
'so',
|
|
'sq',
|
|
'sr',
|
|
'ss',
|
|
'ssy',
|
|
'st',
|
|
'su',
|
|
'sv',
|
|
'sw',
|
|
'syr',
|
|
'ta',
|
|
'te',
|
|
'teo',
|
|
'th',
|
|
'ti',
|
|
'tig',
|
|
'tk',
|
|
'tl',
|
|
'tn',
|
|
'to',
|
|
'tr',
|
|
'ts',
|
|
'tzm',
|
|
'ug',
|
|
'uk',
|
|
'ur',
|
|
'uz',
|
|
've',
|
|
'vi',
|
|
'vo',
|
|
'vun',
|
|
'wa',
|
|
'wae',
|
|
'wo',
|
|
'xh',
|
|
'xog',
|
|
'yi',
|
|
'yo',
|
|
'yue',
|
|
'zh',
|
|
'zu',
|
|
],
|
|
'en',
|
|
),
|
|
).toBe('sh');
|
|
});
|
|
|
|
test('empty requested', () => {
|
|
expect(localeMatch([], ['zh-Hant-TW', 'en'], 'en')).toBe('en');
|
|
});
|
|
|
|
test('extension', () => {
|
|
expect(localeMatch(['fr-CA-x-foo'], ['zh-Hant-TW', 'fr', 'en'], 'en')).toBe(
|
|
'fr',
|
|
);
|
|
});
|
|
|
|
test('GH #4267', () => {
|
|
expect(localeMatch(['fr'], ['br', 'fr'], 'en')).toBe('fr');
|
|
});
|
|
});
|
|
|
|
// https://github.com/formatjs/formatjs/blob/e11b9b57a5ed745584b169c13b0a1812ba9e6051/packages/intl-localematcher/tests/BestFitMatcher.test.ts
|
|
test.describe('BestFitMatcher test cases', () => {
|
|
test('BestFitMatcher basic', () => {
|
|
expect(localeMatch(['fr-XX', 'en'], ['fr', 'en'], 'en')).toBe('fr');
|
|
});
|
|
|
|
test('BestFitMatcher zh-TW', () => {
|
|
expect(localeMatch(['zh-TW'], ['zh', 'zh-Hant'], 'en')).toBe('zh-Hant');
|
|
});
|
|
|
|
test('BestFitMatcher en', () => {
|
|
expect(localeMatch(['en'], ['en', 'und'], 'en')).toBe('en');
|
|
});
|
|
|
|
test('BestFitMatcher extension', () => {
|
|
// Extensions should be handled transparently by the underlying matcher
|
|
expect(localeMatch(['th-u-ca-gregory'], ['th'], 'en')).toBe('th');
|
|
});
|
|
|
|
test('GH #4272 - fallback behavior', () => {
|
|
expect(localeMatch(['es'], ['fr', 'en'], 'en')).toBe('en');
|
|
expect(localeMatch(['es'], ['en', 'fr', 'en'], 'fr')).toBe('fr');
|
|
});
|
|
|
|
test('GH #4258 - best fit matching', () => {
|
|
expect(
|
|
localeMatch(['de-DE', 'fr'], ['en', 'en-US', 'fr-FR'], 'en-US'),
|
|
).toBe('fr-FR');
|
|
});
|
|
|
|
test('GH #4237 - exact locale preference', () => {
|
|
expect(
|
|
localeMatch(['en-GB', 'en-US', 'en'], ['en-US', 'nl-NL', 'nl'], 'en-US'),
|
|
).toBe('en-US');
|
|
});
|
|
|
|
test('bestFitMatcher testing zh-HK', () => {
|
|
expect(localeMatch(['zh-HK'], ['zh-Hant', 'zh-MO'], 'en')).toBe('zh-MO');
|
|
});
|
|
|
|
test('bestFitMatcher testing en-CA', () => {
|
|
expect(localeMatch(['en-CA'], ['en-GB', 'en-US'], 'en-US')).toBe('en-US');
|
|
});
|
|
|
|
test('bestFitMatcher testing es-KY Americas', () => {
|
|
expect(localeMatch(['es-KY'], ['es', 'en', 'es-419'], 'en')).toBe('es-419');
|
|
});
|
|
});
|