mirror of
				https://github.com/mozilla/gecko-dev.git
				synced 2025-11-04 10:18:41 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			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.`
 | 
						|
        );
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
});
 |