blob: bf151de2641c769acc517c97f99c683691edf184 [file] [log] [blame]
// Copyright 2021 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import * as i18n from './i18n.js';
describe('DevToolsLocale', () => {
// For tests, we assume DevTools supports all locales we throw at it.
// Finding the closes supported locale is implemented in the i18n lib and tested as part of that lib.
const identity = (locale: string) => locale;
after(() => {
// Reset the singleton after the test suite for other tests.
const data: i18n.DevToolsLocale.DevToolsLocaleData = {
settingLanguage: 'en-US',
navigatorLanguage: '',
lookupClosestDevToolsLocale: identity,
};
i18n.DevToolsLocale.DevToolsLocale.instance({create: true, data});
});
it('chooses navigator.language if setting is "browserLanguage"', () => {
const data: i18n.DevToolsLocale.DevToolsLocaleData = {
settingLanguage: 'browserLanguage',
navigatorLanguage: 'en-GB',
lookupClosestDevToolsLocale: identity,
};
const devToolsLocale = i18n.DevToolsLocale.DevToolsLocale.instance({create: true, data});
assert.strictEqual(devToolsLocale.locale, 'en-GB');
});
it('chooses setting language if setting has any other value than "browserLanguage"', () => {
const data: i18n.DevToolsLocale.DevToolsLocaleData = {
settingLanguage: 'zh',
navigatorLanguage: 'en-GB',
lookupClosestDevToolsLocale: identity,
};
const devToolsLocale = i18n.DevToolsLocale.DevToolsLocale.instance({create: true, data});
assert.strictEqual(devToolsLocale.locale, 'zh');
});
it('falls back to en-US should navigator.language be empty', () => {
const data: i18n.DevToolsLocale.DevToolsLocaleData = {
settingLanguage: 'browserLanguage',
navigatorLanguage: '',
lookupClosestDevToolsLocale: identity,
};
const devToolsLocale = i18n.DevToolsLocale.DevToolsLocale.instance({create: true, data});
assert.strictEqual(devToolsLocale.locale, 'en-US');
});
it('chooses the closest supported language', () => {
const data: i18n.DevToolsLocale.DevToolsLocaleData = {
settingLanguage: 'zh-HK',
navigatorLanguage: '',
lookupClosestDevToolsLocale: () => 'zh',
};
const devToolsLocale = i18n.DevToolsLocale.DevToolsLocale.instance({create: true, data});
assert.strictEqual(devToolsLocale.locale, 'zh');
});
describe('forceFallbackLocale', () => {
it('sets locale to English', () => {
const data: i18n.DevToolsLocale.DevToolsLocaleData = {
settingLanguage: 'browserLanguage',
navigatorLanguage: 'en-GB',
lookupClosestDevToolsLocale: identity,
};
const devToolsLocale = i18n.DevToolsLocale.DevToolsLocale.instance({create: true, data});
assert.strictEqual(devToolsLocale.locale, 'en-GB');
devToolsLocale.forceFallbackLocale();
assert.strictEqual(devToolsLocale.locale, 'en-US');
});
});
describe('languageIsSupportedByDevTools', () => {
it('returns true if the locale is supported, false otherwise', () => {
const data: i18n.DevToolsLocale.DevToolsLocaleData = {
settingLanguage: 'zh-HK',
navigatorLanguage: '',
lookupClosestDevToolsLocale: () => 'zh',
};
const devToolsLocale = i18n.DevToolsLocale.DevToolsLocale.instance({create: true, data});
assert.isTrue(devToolsLocale.languageIsSupportedByDevTools('zh-HK'));
assert.isFalse(devToolsLocale.languageIsSupportedByDevTools('de-DE'));
});
});
});
describe('localeLanguagesMatch', () => {
it('returns true if the language part of a locale matches, false otherwise', () => {
assert.isTrue(i18n.DevToolsLocale.localeLanguagesMatch('de-DE', 'de-AT'));
assert.isTrue(i18n.DevToolsLocale.localeLanguagesMatch('de-DE', 'de'));
assert.isFalse(i18n.DevToolsLocale.localeLanguagesMatch('de', 'en'));
assert.isFalse(i18n.DevToolsLocale.localeLanguagesMatch('de-AT', 'en-US'));
});
});