forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			90 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* Any copyright is dedicated to the Public Domain.
 | |
|    http://creativecommons.org/publicdomain/zero/1.0/ */
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| /* global PanelUI */
 | |
| 
 | |
| let gAppMenuStrings = new Localization(
 | |
|   ["branding/brand.ftl", "browser/appmenu.ftl"],
 | |
|   true
 | |
| );
 | |
| 
 | |
| const CLONED_ATTRS = ["command", "oncommand", "onclick", "key", "disabled"];
 | |
| 
 | |
| /**
 | |
|  * Tests that the Help panel inside of the AppMenu properly clones
 | |
|  * the items from the Help menupopup. Also ensures that the AppMenu
 | |
|  * string variants for those menuitems exist inside of appmenu.ftl.
 | |
|  */
 | |
| add_task(async function test_help_panel_cloning() {
 | |
|   await gCUITestUtils.openMainMenu();
 | |
|   registerCleanupFunction(async () => {
 | |
|     await gCUITestUtils.hideMainMenu();
 | |
|   });
 | |
| 
 | |
|   // Showing the Help panel should be enough to get the menupopup to
 | |
|   // populate itself.
 | |
|   let anchor = document.getElementById("PanelUI-menu-button");
 | |
|   PanelUI.showHelpView(anchor);
 | |
| 
 | |
|   let appMenuHelpSubview = document.getElementById("PanelUI-helpView");
 | |
|   await BrowserTestUtils.waitForEvent(appMenuHelpSubview, "ViewShowing");
 | |
| 
 | |
|   let helpMenuPopup = document.getElementById("menu_HelpPopup");
 | |
|   let helpMenuPopupItems = helpMenuPopup.querySelectorAll("menuitem");
 | |
| 
 | |
|   for (let helpMenuPopupItem of helpMenuPopupItems) {
 | |
|     if (helpMenuPopupItem.hidden) {
 | |
|       continue;
 | |
|     }
 | |
| 
 | |
|     let appMenuHelpId = "appMenu_" + helpMenuPopupItem.id;
 | |
|     info(`Checking ${appMenuHelpId}`);
 | |
| 
 | |
|     let appMenuHelpItem = appMenuHelpSubview.querySelector(`#${appMenuHelpId}`);
 | |
|     Assert.ok(appMenuHelpItem, "Should have found a cloned AppMenu help item");
 | |
| 
 | |
|     let appMenuHelpItemL10nId = appMenuHelpItem.dataset.l10nId;
 | |
|     // There is a convention that the Help menu item should have an
 | |
|     // appmenu-data-l10n-id attribute set as the AppMenu-specific localization
 | |
|     // id.
 | |
|     Assert.equal(
 | |
|       helpMenuPopupItem.getAttribute("appmenu-data-l10n-id"),
 | |
|       appMenuHelpItemL10nId,
 | |
|       "Help menuitem supplied a data-l10n-id for the AppMenu Help item"
 | |
|     );
 | |
| 
 | |
|     let [strings] = gAppMenuStrings.formatMessagesSync([
 | |
|       { id: appMenuHelpItemL10nId },
 | |
|     ]);
 | |
|     Assert.ok(strings, "Should have found strings for the AppMenu help item");
 | |
| 
 | |
|     // Make sure the CLONED_ATTRs are actually cloned.
 | |
|     for (let attr of CLONED_ATTRS) {
 | |
|       if (attr == "oncommand" && helpMenuPopupItem.hasAttribute("command")) {
 | |
|         // If the original element had a "command" attribute set, then the
 | |
|         // cloned element will have its "oncommand" attribute set to equal
 | |
|         // the "oncommand" attribute of the <command> pointed to via the
 | |
|         // original's "command" attribute once it is inserted into the DOM.
 | |
|         //
 | |
|         // This is by virtue of the broadcasting ability of XUL <command>
 | |
|         // elements.
 | |
|         let commandNode = document.getElementById(
 | |
|           helpMenuPopupItem.getAttribute("command")
 | |
|         );
 | |
|         Assert.equal(
 | |
|           commandNode.getAttribute("oncommand"),
 | |
|           appMenuHelpItem.getAttribute("oncommand"),
 | |
|           "oncommand was properly cloned."
 | |
|         );
 | |
|       } else {
 | |
|         Assert.equal(
 | |
|           helpMenuPopupItem.getAttribute(attr),
 | |
|           appMenuHelpItem.getAttribute(attr),
 | |
|           `${attr} attribute was cloned.`
 | |
|         );
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| });
 | 
