Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* -*- 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,
);
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);
});