mirror of
https://github.com/Feodor2/Mypal68.git
synced 2025-06-19 07:15:36 -04:00
126 lines
3.6 KiB
JavaScript
126 lines
3.6 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
const gBaseURL =
|
|
"https://example.com/browser/browser/base/content/test/contextMenu/";
|
|
|
|
add_task(async function() {
|
|
let tab = await BrowserTestUtils.openNewForegroundTab(
|
|
gBrowser,
|
|
gBaseURL + "subtst_contextmenu.html"
|
|
);
|
|
|
|
let contextMenu = document.getElementById("contentAreaContextMenu");
|
|
|
|
// Get the point of the element with the page menu (test-pagemenu) and
|
|
// synthesize a right mouse click there.
|
|
let popupShownPromise = BrowserTestUtils.waitForEvent(
|
|
contextMenu,
|
|
"popupshown"
|
|
);
|
|
await BrowserTestUtils.synthesizeMouse(
|
|
"#test-pagemenu",
|
|
5,
|
|
5,
|
|
{ type: "contextmenu", button: 2 },
|
|
tab.linkedBrowser
|
|
);
|
|
await popupShownPromise;
|
|
|
|
checkMenu(contextMenu);
|
|
|
|
let popupHiddenPromise = BrowserTestUtils.waitForEvent(
|
|
contextMenu,
|
|
"popuphidden"
|
|
);
|
|
contextMenu.hidePopup();
|
|
await popupHiddenPromise;
|
|
|
|
BrowserTestUtils.removeTab(tab);
|
|
});
|
|
|
|
function checkItems(menuitem, arr) {
|
|
for (let i = 0; i < arr.length; i += 2) {
|
|
let str = arr[i];
|
|
let details = arr[i + 1];
|
|
if (str == "---") {
|
|
is(menuitem.localName, "menuseparator", "menuseparator");
|
|
} else if ("children" in details) {
|
|
is(menuitem.localName, "menu", "submenu");
|
|
is(menuitem.getAttribute("label"), str, str + " label");
|
|
checkItems(menuitem.menupopup.firstElementChild, details.children);
|
|
} else {
|
|
is(menuitem.localName, "menuitem", str + " menuitem");
|
|
|
|
is(menuitem.getAttribute("label"), str, str + " label");
|
|
is(menuitem.getAttribute("type"), details.type, str + " type");
|
|
is(
|
|
menuitem.getAttribute("image"),
|
|
details.icon ? gBaseURL + details.icon : "",
|
|
str + " icon"
|
|
);
|
|
|
|
if (details.checked) {
|
|
is(menuitem.getAttribute("checked"), "true", str + " checked");
|
|
} else {
|
|
ok(!menuitem.hasAttribute("checked"), str + " checked");
|
|
}
|
|
|
|
if (details.disabled) {
|
|
is(menuitem.getAttribute("disabled"), "true", str + " disabled");
|
|
} else {
|
|
ok(!menuitem.hasAttribute("disabled"), str + " disabled");
|
|
}
|
|
}
|
|
|
|
menuitem = menuitem.nextElementSibling;
|
|
}
|
|
}
|
|
|
|
function checkMenu(contextMenu) {
|
|
let items = [
|
|
"Plain item",
|
|
{ type: "", icon: "", checked: false, disabled: false },
|
|
"Disabled item",
|
|
{ type: "", icon: "", checked: false, disabled: true },
|
|
"Item w/ textContent",
|
|
{ type: "", icon: "", checked: false, disabled: false },
|
|
"---",
|
|
null,
|
|
"Checkbox",
|
|
{ type: "checkbox", icon: "", checked: true, disabled: false },
|
|
"---",
|
|
null,
|
|
"Radio1",
|
|
{ type: "checkbox", icon: "", checked: true, disabled: false },
|
|
"Radio2",
|
|
{ type: "checkbox", icon: "", checked: false, disabled: false },
|
|
"Radio3",
|
|
{ type: "checkbox", icon: "", checked: false, disabled: false },
|
|
"---",
|
|
null,
|
|
"Item w/ icon",
|
|
{ type: "", icon: "favicon.ico", checked: false, disabled: false },
|
|
"Item w/ bad icon",
|
|
{ type: "", icon: "", checked: false, disabled: false },
|
|
"---",
|
|
null,
|
|
"Submenu",
|
|
{
|
|
children: [
|
|
"Radio1",
|
|
{ type: "checkbox", icon: "", checked: false, disabled: false },
|
|
"Radio2",
|
|
{ type: "checkbox", icon: "", checked: true, disabled: false },
|
|
"Radio3",
|
|
{ type: "checkbox", icon: "", checked: false, disabled: false },
|
|
"---",
|
|
null,
|
|
"Checkbox",
|
|
{ type: "checkbox", icon: "", checked: false, disabled: false },
|
|
],
|
|
},
|
|
];
|
|
checkItems(contextMenu.children[2], items);
|
|
}
|