Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
/* Any copyright is dedicated to the Public Domain.
"use strict";
function waitForAppLocaleChanged() {
new Promise(resolve => {
function onChange() {
Services.obs.removeObserver(onChange, "intl:app-locales-changed");
resolve();
}
Services.obs.addObserver(onChange, "intl:app-locales-changed");
});
}
async function testWithLocales({
systemLocales,
appLocales,
webLanguages,
test,
}) {
const cleanup = await mockLocales({
systemLocales,
appLocales,
webLanguages,
});
test();
return cleanup();
}
add_task(async function test_preferred_language() {
await testWithLocales({
systemLocales: ["en-US"],
appLocales: ["en-US"],
webLanguages: ["en-US"],
test() {
Assert.deepEqual(
TranslationsParent.getPreferredLanguages(),
["en"],
"When all locales are English, only English is preferred."
);
},
});
await testWithLocales({
systemLocales: ["es-ES"],
appLocales: ["en-US"],
webLanguages: ["en-US"],
test() {
Assert.deepEqual(
TranslationsParent.getPreferredLanguages(),
["en", "es"],
"When the operating system differs, it is added to the end of the preferred languages."
);
},
});
await testWithLocales({
systemLocales: ["zh-TW", "zh-CN", "de"],
appLocales: ["pt-BR", "pl"],
webLanguages: ["cs", "hu"],
test() {
Assert.deepEqual(
TranslationsParent.getPreferredLanguages(),
[
// webLanguages
"cs",
"hu",
// appLocales, notice that "en" is the last fallback.
"pt",
"pl",
"en",
// systemLocales
"zh",
"de",
],
"Demonstrate an unrealistic but complicated locale situation."
);
},
});
});