summaryrefslogtreecommitdiffstats
path: root/browser/components/customizableui/test/browser_panel_menulist.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/customizableui/test/browser_panel_menulist.js')
-rw-r--r--browser/components/customizableui/test/browser_panel_menulist.js50
1 files changed, 50 insertions, 0 deletions
diff --git a/browser/components/customizableui/test/browser_panel_menulist.js b/browser/components/customizableui/test/browser_panel_menulist.js
new file mode 100644
index 0000000000..c863a872ee
--- /dev/null
+++ b/browser/components/customizableui/test/browser_panel_menulist.js
@@ -0,0 +1,50 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+const kViewID = "panelview-with-menulist";
+
+/**
+ * When there's a menulist inside a panelview, closing it shouldn't close the panel.
+ */
+add_task(async function test_closing_menulist_should_not_close_panel() {
+ let viewCache = document.getElementById("appMenu-viewCache");
+ let panelview = document.createXULElement("panelview");
+ panelview.id = kViewID;
+ let menulist = document.createXULElement("menulist");
+ let popup = document.createXULElement("menupopup");
+ for (let item of ["one", "two"]) {
+ let menuitem = document.createXULElement("menuitem");
+ menuitem.id = `menuitem-${item}`;
+ menuitem.setAttribute("label", item);
+ popup.append(menuitem);
+ }
+ menulist.append(popup);
+ panelview.append(menulist);
+ viewCache.append(panelview);
+ await PanelUI.showSubView(kViewID, PanelUI.menuButton);
+ let panel = panelview.closest("panel");
+
+ // Ensure that not only has the subview started showing, the panel is
+ // all the way open:
+ await BrowserTestUtils.waitForPopupEvent(panel, "shown");
+
+ registerCleanupFunction(async () => {
+ if (panel && panel.state != "closed") {
+ let panelGone = BrowserTestUtils.waitForPopupEvent(panel, "hidden");
+ panel.hidePopup();
+ await panelGone;
+ }
+ panelview.remove();
+ });
+
+ let shown = BrowserTestUtils.waitForPopupEvent(popup, "shown");
+ menulist.openMenu(true);
+ await shown;
+ let hidden = BrowserTestUtils.waitForPopupEvent(popup, "hidden");
+ popup.activateItem(popup.firstElementChild);
+ await hidden;
+
+ Assert.equal(panel?.state, "open", "Panel should still be open.");
+});