Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Errors

/* Any copyright is dedicated to the Public Domain.
// There are shutdown issues for which multiple rejections are left uncaught.
// See bug 1018184 for resolving these issues.
const { PromiseTestUtils } = ChromeUtils.importESModule(
);
PromiseTestUtils.allowMatchingRejectionsGlobally(/File closed/);
// On debug test machine, it takes about 50s to run the test.
requestLongerTimeout(4);
/**
* In the browser toolbox there are options to switch the language to the "bidi" and
* "accented" languages. These are useful for making sure the browser is correctly
* localized. This test opens the browser toolbox, and checks that these buttons
* work.
*/
add_task(async function () {
const ToolboxTask = await initBrowserToolboxTask();
await ToolboxTask.importFunctions({ clickMeatballItem });
is(getPseudoLocale(), "", "Starts out as empty");
await ToolboxTask.spawn(null, () => clickMeatballItem("accented"));
is(getPseudoLocale(), "accented", "Enabled the accented pseudo-locale");
await ToolboxTask.spawn(null, () => clickMeatballItem("accented"));
is(getPseudoLocale(), "", "Disabled the accented pseudo-locale.");
await ToolboxTask.spawn(null, () => clickMeatballItem("bidi"));
is(getPseudoLocale(), "bidi", "Enabled the bidi pseudo-locale.");
await ToolboxTask.spawn(null, () => clickMeatballItem("bidi"));
is(getPseudoLocale(), "", "Disabled the bidi pseudo-locale.");
await ToolboxTask.spawn(null, () => clickMeatballItem("bidi"));
is(getPseudoLocale(), "bidi", "Enabled the bidi before closing.");
await ToolboxTask.destroy();
is(getPseudoLocale(), "", "After closing the pseudo-locale is disabled.");
});
/**
* Return the pseudo-locale preference of the debuggee browser (not the browser toolbox).
*
* Another option for this test would be to test the text and layout of the
* browser directly, but this could be brittle. Checking the preference will
* hopefully provide adequate coverage.
*/
function getPseudoLocale() {
return Services.prefs.getCharPref("intl.l10n.pseudo");
}
/**
* This function is a ToolboxTask and is cloned into the toolbox context. It opens the
* "meatball menu" in the browser toolbox, clicks one of the pseudo-locale
* options, and finally returns the pseudo-locale preference from the target browser.
*
* @param {"accented" | "bidi"} type
*/
function clickMeatballItem(type) {
return new Promise(resolve => {
/* global gToolbox */
dump(`Opening the meatball menu in the browser toolbox.\n`);
gToolbox.doc.getElementById("toolbox-meatball-menu-button").click();
gToolbox.doc.addEventListener(
"popupshown",
async () => {
const menuItem = gToolbox.doc.getElementById(
"toolbox-meatball-menu-pseudo-locale-" + type
);
dump(`Clicking the meatball menu item: "${type}".\n`);
menuItem.click();
// Request the pseudo-locale so that we know the preference actor is fully
// done setting the debuggee browser.
await gToolbox.getPseudoLocale();
resolve();
},
{ once: true }
);
});
}