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({ waitUntil, 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
*/
async function clickMeatballItem(type) {
/* global gToolbox */
const onPopupShown = new Promise(resolve => {
gToolbox.doc.addEventListener("popupshown", resolve, { once: true });
});
dump(`Opening the meatball menu in the browser toolbox.\n`);
gToolbox.doc.getElementById("toolbox-meatball-menu-button").click();
await onPopupShown;
const menuItem = gToolbox.doc.getElementById(
"toolbox-meatball-menu-pseudo-locale-" + type
);
dump(`Clicking the meatball menu item: "${type}".\n`);
const checked = menuItem.getAttribute("aria-checked");
menuItem.click();
dump(
"Wait for the new setting to be applied by waiting for the UI to be updated after the action is done\n"
);
await waitUntil(() => menuItem.getAttribute("aria-checked") != checked);
}