v8/test/intl/localematcher/bestfit-macrolanguages.js

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

57 lines
1.8 KiB
JavaScript
Raw Normal View History

// Copyright 2021 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Flags: --harmony_intl_best_fit_matcher
//
// Test the supportedLocales and resolvedOptions handle macrolanguages
// documented in https://unicode.org/reports/tr35/#Field_Definitions
const intlObjs = [
Intl.Collator,
Intl.DateTimeFormat,
Intl.DisplayNames,
Intl.ListFormat,
Intl.NumberFormat,
Intl.PluralRules,
Intl.RelativeTimeFormat,
Intl.Segmenter,
];
// Macrolanguages in
// https://unicode.org/reports/tr35/#Field_Definitionsk
const macroLanguageMap = {
'cmn': 'zh',
'arb': 'ar',
'zsm': 'ms',
'swh': 'sw',
'uzn': 'uz',
// 'knn': 'kok', // chrome does not ship data for kok locale
'kmr': 'ku',
};
let bestFitOpt = {localeMatcher: "best fit"};
let defaultLocale = (new Intl.NumberFormat()).resolvedOptions().locale;
intlObjs.forEach(function(obj) {
for (const [macro, lang] of Object.entries(macroLanguageMap)) {
const justMacro = [macro];
// Test the macro language will be persist in the supportedLocalesOf
assertEquals([lang], obj.supportedLocalesOf(justMacro));
assertEquals([lang], obj.supportedLocalesOf(justMacro, bestFitOpt));
// Test the macro language would be resolved to a locale other than the
// default locale.
if (obj == Intl.DisplayNames) {
assertTrue(defaultLocale != (new obj(macro, {type: "language"}))
.resolvedOptions().locale);
assertTrue(defaultLocale !=
(new obj(macro, {type: "language", localeMatcher: "best fit"}))
.resolvedOptions().locale);
} else {
assertTrue(defaultLocale != (new obj(macro)).resolvedOptions().locale);
assertTrue(defaultLocale != (new obj(macro, bestFitOpt))
.resolvedOptions().locale);
}
}
});