summaryrefslogtreecommitdiffstats
path: root/browser/components/extensions/test/browser/browser_ext_contextMenus_radioGroups.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/extensions/test/browser/browser_ext_contextMenus_radioGroups.js')
-rw-r--r--browser/components/extensions/test/browser/browser_ext_contextMenus_radioGroups.js140
1 files changed, 140 insertions, 0 deletions
diff --git a/browser/components/extensions/test/browser/browser_ext_contextMenus_radioGroups.js b/browser/components/extensions/test/browser/browser_ext_contextMenus_radioGroups.js
new file mode 100644
index 0000000000..9ca09df242
--- /dev/null
+++ b/browser/components/extensions/test/browser/browser_ext_contextMenus_radioGroups.js
@@ -0,0 +1,140 @@
+/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* vim: set sts=2 sw=2 et tw=80: */
+"use strict";
+
+add_task(async function () {
+ let tab1 = await BrowserTestUtils.openNewForegroundTab(
+ gBrowser,
+ "http://mochi.test:8888/browser/browser/components/extensions/test/browser/context.html"
+ );
+
+ gBrowser.selectedTab = tab1;
+
+ let extension = ExtensionTestUtils.loadExtension({
+ manifest: {
+ permissions: ["contextMenus"],
+ },
+
+ background: function () {
+ // Report onClickData info back.
+ browser.contextMenus.onClicked.addListener(info => {
+ browser.test.sendMessage("contextmenus-click", info);
+ });
+
+ browser.contextMenus.create({
+ title: "radio-group-1",
+ type: "radio",
+ checked: true,
+ });
+
+ browser.contextMenus.create({
+ type: "separator",
+ });
+
+ browser.contextMenus.create({
+ title: "radio-group-2",
+ type: "radio",
+ });
+
+ browser.contextMenus.create({
+ title: "radio-group-2",
+ type: "radio",
+ });
+
+ browser.test.notifyPass("contextmenus-radio-groups");
+ },
+ });
+
+ await extension.startup();
+ await extension.awaitFinish("contextmenus-radio-groups");
+
+ function confirmRadioGroupStates(extensionMenuRoot, expectedStates) {
+ let radioItems = extensionMenuRoot.getElementsByAttribute("type", "radio");
+ let radioGroup1 = extensionMenuRoot.getElementsByAttribute(
+ "label",
+ "radio-group-1"
+ );
+ let radioGroup2 = extensionMenuRoot.getElementsByAttribute(
+ "label",
+ "radio-group-2"
+ );
+
+ is(
+ radioItems.length,
+ 3,
+ "there should be 3 radio items in the context menu"
+ );
+ is(
+ radioGroup1.length,
+ 1,
+ "the first radio group should only have 1 radio item"
+ );
+ is(
+ radioGroup2.length,
+ 2,
+ "the second radio group should only have 2 radio items"
+ );
+
+ is(
+ radioGroup1[0].hasAttribute("checked"),
+ expectedStates[0],
+ `radio item 1 has state (checked=${expectedStates[0]})`
+ );
+ is(
+ radioGroup2[0].hasAttribute("checked"),
+ expectedStates[1],
+ `radio item 2 has state (checked=${expectedStates[1]})`
+ );
+ is(
+ radioGroup2[1].hasAttribute("checked"),
+ expectedStates[2],
+ `radio item 3 has state (checked=${expectedStates[2]})`
+ );
+
+ return extensionMenuRoot.getElementsByAttribute("type", "radio");
+ }
+
+ function confirmOnClickData(onClickData, id, was, checked) {
+ is(
+ onClickData.wasChecked,
+ was,
+ `radio item ${id} was ${was ? "" : "not "}checked before the click`
+ );
+ is(
+ onClickData.checked,
+ checked,
+ `radio item ${id} is ${checked ? "" : "not "}checked after the click`
+ );
+ }
+
+ let extensionMenuRoot = await openExtensionContextMenu();
+ let items = confirmRadioGroupStates(extensionMenuRoot, [true, false, false]);
+ await closeExtensionContextMenu(items[1]);
+
+ let result = await extension.awaitMessage("contextmenus-click");
+ confirmOnClickData(result, 2, false, true);
+
+ extensionMenuRoot = await openExtensionContextMenu();
+ items = confirmRadioGroupStates(extensionMenuRoot, [true, true, false]);
+ await closeExtensionContextMenu(items[2]);
+
+ result = await extension.awaitMessage("contextmenus-click");
+ confirmOnClickData(result, 3, false, true);
+
+ extensionMenuRoot = await openExtensionContextMenu();
+ items = confirmRadioGroupStates(extensionMenuRoot, [true, false, true]);
+ await closeExtensionContextMenu(items[0]);
+
+ result = await extension.awaitMessage("contextmenus-click");
+ confirmOnClickData(result, 1, true, true);
+
+ extensionMenuRoot = await openExtensionContextMenu();
+ items = confirmRadioGroupStates(extensionMenuRoot, [true, false, true]);
+ await closeExtensionContextMenu(items[0]);
+
+ result = await extension.awaitMessage("contextmenus-click");
+ confirmOnClickData(result, 1, true, true);
+
+ await extension.unload();
+ BrowserTestUtils.removeTab(tab1);
+});