summaryrefslogtreecommitdiffstats
path: root/devtools/client/framework/browser-toolbox/test/browser_browser_toolbox_l10n_buttons.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/framework/browser-toolbox/test/browser_browser_toolbox_l10n_buttons.js')
-rw-r--r--devtools/client/framework/browser-toolbox/test/browser_browser_toolbox_l10n_buttons.js88
1 files changed, 88 insertions, 0 deletions
diff --git a/devtools/client/framework/browser-toolbox/test/browser_browser_toolbox_l10n_buttons.js b/devtools/client/framework/browser-toolbox/test/browser_browser_toolbox_l10n_buttons.js
new file mode 100644
index 0000000000..abd2f3806a
--- /dev/null
+++ b/devtools/client/framework/browser-toolbox/test/browser_browser_toolbox_l10n_buttons.js
@@ -0,0 +1,88 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+// There are shutdown issues for which multiple rejections are left uncaught.
+// See bug 1018184 for resolving these issues.
+const { PromiseTestUtils } = ChromeUtils.importESModule(
+ "resource://testing-common/PromiseTestUtils.sys.mjs"
+);
+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 }
+ );
+ });
+}