browser_panel_menulist.js (1700B)
1 /* Any copyright is dedicated to the Public Domain. 2 http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 const kViewID = "panelview-with-menulist"; 7 8 /** 9 * When there's a menulist inside a panelview, closing it shouldn't close the panel. 10 */ 11 add_task(async function test_closing_menulist_should_not_close_panel() { 12 let viewCache = document.getElementById("appMenu-viewCache"); 13 let panelview = document.createXULElement("panelview"); 14 panelview.id = kViewID; 15 let menulist = document.createXULElement("menulist"); 16 let popup = document.createXULElement("menupopup"); 17 for (let item of ["one", "two"]) { 18 let menuitem = document.createXULElement("menuitem"); 19 menuitem.id = `menuitem-${item}`; 20 menuitem.setAttribute("label", item); 21 popup.append(menuitem); 22 } 23 menulist.append(popup); 24 panelview.append(menulist); 25 viewCache.append(panelview); 26 await PanelUI.showSubView(kViewID, PanelUI.menuButton); 27 let panel = panelview.closest("panel"); 28 29 // Ensure that not only has the subview started showing, the panel is 30 // all the way open: 31 await BrowserTestUtils.waitForPopupEvent(panel, "shown"); 32 33 registerCleanupFunction(async () => { 34 if (panel && panel.state != "closed") { 35 let panelGone = BrowserTestUtils.waitForPopupEvent(panel, "hidden"); 36 panel.hidePopup(); 37 await panelGone; 38 } 39 panelview.remove(); 40 }); 41 42 let shown = BrowserTestUtils.waitForPopupEvent(popup, "shown"); 43 menulist.openMenu(true); 44 await shown; 45 let hidden = BrowserTestUtils.waitForPopupEvent(popup, "hidden"); 46 popup.activateItem(popup.firstElementChild); 47 await hidden; 48 49 Assert.equal(panel?.state, "open", "Panel should still be open."); 50 });