Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
/* Any copyright is dedicated to the Public Domain.
// Tests for the browser language section
// Listed in both browser.toml (legacy groupbox UI) and browser-srd.toml
// (Settings Redesign setting-group UI); each helper branches on
// SRD_PREF_VALUE so the same test logic exercises both UIs.
AddonTestUtils.initMochitest(this);
// Installed langpacks should appear in the language selector, sorted.
add_task(async function testInstalledLangpacksListedAndSorted() {
await SpecialPowers.pushPrefEnv({
set: [
["intl.multilingual.enabled", true],
["intl.multilingual.downloadEnabled", false],
["extensions.langpacks.signatures.required", false],
],
});
// Install "pl" then "fr" so they need to be sorted.
let addons = await installLangpacks(["pl", "fr"]);
let doc = await openLanguagesPrefs();
await waitForLanguageUI(doc);
Assert.deepEqual(
getAvailableLocales(doc),
["en-US", "fr", "pl"],
"Installed locales are listed and sorted"
);
await Promise.all(addons.map(addon => addon.uninstall()));
BrowserTestUtils.removeTab(gBrowser.selectedTab);
});
// Selecting a different language when liveReload is off shows a restart
// confirmation.
add_task(async function testLanguageChangeShowsRestartConfirmation() {
await SpecialPowers.pushPrefEnv({
set: [
["intl.multilingual.enabled", true],
["intl.multilingual.downloadEnabled", false],
["intl.multilingual.liveReload", false],
["intl.multilingual.liveReloadBidirectional", false],
["intl.locale.requested", "en-US"],
["extensions.langpacks.signatures.required", false],
],
});
let addon = await installLangpack("fr");
let doc = await openLanguagesPrefs();
await waitForLanguageUI(doc);
assertRestartMessageHidden(doc);
await changeLocale(doc, "fr");
await waitForRestartMessage(doc);
if (!SRD_PREF_VALUE) {
let button = doc
.getElementById("confirmBrowserLanguage")
.querySelector("button");
ok(
button.getAttribute("locales").startsWith("fr"),
"Legacy restart button encodes the new locale"
);
}
await addon.uninstall();
BrowserTestUtils.removeTab(gBrowser.selectedTab);
});
// Selecting a different language when liveReload is on applies it immediately
// without showing a restart confirmation.
add_task(async function testLanguageChangeLiveReload() {
await SpecialPowers.pushPrefEnv({
set: [
["intl.multilingual.enabled", true],
["intl.multilingual.downloadEnabled", false],
["intl.multilingual.liveReload", true],
["intl.multilingual.liveReloadBidirectional", true],
["intl.locale.requested", "en-US"],
["extensions.langpacks.signatures.required", false],
],
});
let addon = await installLangpack("fr");
let doc = await openLanguagesPrefs();
await waitForLanguageUI(doc);
await changeLocale(doc, "fr");
await BrowserTestUtils.waitForCondition(
() => Services.locale.requestedLocales.includes("fr"),
"The fr locale is applied immediately with live reload"
);
assertRestartMessageHidden(doc);
await addon.uninstall();
BrowserTestUtils.removeTab(gBrowser.selectedTab);
});