{"version":3,"file":"menu-testing.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/menu/testing/menu-harness.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/menu/testing/context-menu-harness.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n  ComponentHarnessConstructor,\n  ContentContainerComponentHarness,\n  HarnessLoader,\n  HarnessPredicate,\n  TestElement,\n} from '@angular/cdk/testing';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {MatIconHarness} from '@angular/material/icon/testing';\nimport {MenuHarnessFilters, MenuItemHarnessFilters} from './menu-harness-filters';\n\n/** Harness for interacting with a mat-menu in tests. */\nexport class MatMenuHarness extends ContentContainerComponentHarness<string> {\n  private _documentRootLocator = this.documentRootLocatorFactory();\n\n  /** The selector for the host element of a `MatMenu` instance. */\n  static hostSelector = '.mat-mdc-menu-trigger';\n\n  /**\n   * Gets a `HarnessPredicate` that can be used to search for a menu with specific attributes.\n   * @param options Options for filtering which menu instances are considered a match.\n   * @return a `HarnessPredicate` configured with the given options.\n   */\n  static with<T extends MatMenuHarness>(\n    this: ComponentHarnessConstructor<T>,\n    options: MenuHarnessFilters = {},\n  ): HarnessPredicate<T> {\n    return new HarnessPredicate(this, options)\n      .addOption('triggerText', options.triggerText, (harness, text) =>\n        HarnessPredicate.stringMatches(harness.getTriggerText(), text),\n      )\n      .addOption('triggerIconName', options.triggerIconName, async (harness, triggerIconName) => {\n        const result = await harness.locatorForOptional(\n          MatIconHarness.with({name: triggerIconName}),\n        )();\n        return result !== null;\n      });\n  }\n\n  /** Whether the menu is disabled. */\n  async isDisabled(): Promise<boolean> {\n    const disabled = (await this.host()).getAttribute('disabled');\n    return coerceBooleanProperty(await disabled);\n  }\n\n  /** Whether the menu is open. */\n  async isOpen(): Promise<boolean> {\n    return !!(await this._getMenuPanel());\n  }\n\n  /** Gets the text of the menu's trigger element. */\n  async getTriggerText(): Promise<string> {\n    return (await this.host()).text();\n  }\n\n  /** Focuses the menu. */\n  async focus(): Promise<void> {\n    return (await this.host()).focus();\n  }\n\n  /** Blurs the menu. */\n  async blur(): Promise<void> {\n    return (await this.host()).blur();\n  }\n\n  /** Whether the menu is focused. */\n  async isFocused(): Promise<boolean> {\n    return (await this.host()).isFocused();\n  }\n\n  /** Opens the menu. */\n  async open(): Promise<void> {\n    if (!(await this.isOpen())) {\n      return (await this.host()).click();\n    }\n  }\n\n  /** Closes the menu. */\n  async close(): Promise<void> {\n    const panel = await this._getMenuPanel();\n    if (panel) {\n      return panel.click();\n    }\n  }\n\n  /**\n   * Gets a list of `MatMenuItemHarness` representing the items in the menu.\n   * @param filters Optionally filters which menu items are included.\n   */\n  async getItems(\n    filters?: Omit<MenuItemHarnessFilters, 'ancestor'>,\n  ): Promise<MatMenuItemHarness[]> {\n    const panelId = await this._getPanelId();\n    if (panelId) {\n      return this._documentRootLocator.locatorForAll(\n        MatMenuItemHarness.with({\n          ...(filters || {}),\n          ancestor: `#${panelId}`,\n        } as MenuItemHarnessFilters),\n      )();\n    }\n    return [];\n  }\n\n  /**\n   * Clicks an item in the menu, and optionally continues clicking items in subsequent sub-menus.\n   * @param itemFilter A filter used to represent which item in the menu should be clicked. The\n   *     first matching menu item will be clicked.\n   * @param subItemFilters A list of filters representing the items to click in any subsequent\n   *     sub-menus. The first item in the sub-menu matching the corresponding filter in\n   *     `subItemFilters` will be clicked.\n   */\n  async clickItem(\n    itemFilter: Omit<MenuItemHarnessFilters, 'ancestor'>,\n    ...subItemFilters: Omit<MenuItemHarnessFilters, 'ancestor'>[]\n  ): Promise<void> {\n    await this.open();\n    return clickItemImplementation(await this.getItems(itemFilter), itemFilter, subItemFilters);\n  }\n\n  protected override async getRootHarnessLoader(): Promise<HarnessLoader> {\n    const panelId = await this._getPanelId();\n    return this.documentRootLocatorFactory().harnessLoaderFor(`#${panelId}`);\n  }\n\n  /** Gets the menu panel associated with this menu. */\n  private async _getMenuPanel(): Promise<TestElement | null> {\n    const panelId = await this._getPanelId();\n    return panelId ? this._documentRootLocator.locatorForOptional(`#${panelId}`)() : null;\n  }\n\n  /** Gets the id of the menu panel associated with this menu. */\n  private async _getPanelId(): Promise<string | null> {\n    const panelId = await (await this.host()).getAttribute('aria-controls');\n    return panelId || null;\n  }\n}\n\nexport class MatMenuItemHarness extends ContentContainerComponentHarness<string> {\n  /** The selector for the host element of a `MatMenuItem` instance. */\n  static hostSelector = '.mat-mdc-menu-item';\n\n  /**\n   * Gets a `HarnessPredicate` that can be used to search for a menu item with specific attributes.\n   * @param options Options for filtering which menu item instances are considered a match.\n   * @return a `HarnessPredicate` configured with the given options.\n   */\n  static with<T extends MatMenuItemHarness>(\n    this: ComponentHarnessConstructor<T>,\n    options: MenuItemHarnessFilters = {},\n  ): HarnessPredicate<T> {\n    return new HarnessPredicate(this, options)\n      .addOption('text', options.text, (harness, text) =>\n        HarnessPredicate.stringMatches(harness.getText(), text),\n      )\n      .addOption(\n        'hasSubmenu',\n        options.hasSubmenu,\n        async (harness, hasSubmenu) => (await harness.hasSubmenu()) === hasSubmenu,\n      );\n  }\n\n  /** Whether the menu is disabled. */\n  async isDisabled(): Promise<boolean> {\n    const disabled = (await this.host()).getAttribute('disabled');\n    return coerceBooleanProperty(await disabled);\n  }\n\n  /** Gets the text of the menu item. */\n  async getText(): Promise<string> {\n    return (await this.host()).text();\n  }\n\n  /** Focuses the menu item. */\n  async focus(): Promise<void> {\n    return (await this.host()).focus();\n  }\n\n  /** Blurs the menu item. */\n  async blur(): Promise<void> {\n    return (await this.host()).blur();\n  }\n\n  /** Whether the menu item is focused. */\n  async isFocused(): Promise<boolean> {\n    return (await this.host()).isFocused();\n  }\n\n  /** Clicks the menu item. */\n  async click(): Promise<void> {\n    return (await this.host()).click();\n  }\n\n  /** Whether this item has a submenu. */\n  async hasSubmenu(): Promise<boolean> {\n    return (await this.host()).matchesSelector(MatMenuHarness.hostSelector);\n  }\n\n  /** Gets the submenu associated with this menu item, or null if none. */\n  async getSubmenu(): Promise<MatMenuHarness | null> {\n    if (await this.hasSubmenu()) {\n      return new MatMenuHarness(this.locatorFactory);\n    }\n    return null;\n  }\n}\n\nexport async function clickItemImplementation(\n  items: MatMenuItemHarness[],\n  itemFilter: Omit<MenuItemHarnessFilters, 'ancestor'>,\n  subItemFilters: Omit<MenuItemHarnessFilters, 'ancestor'>[],\n): Promise<void> {\n  if (!items.length) {\n    throw Error(`Could not find item matching ${JSON.stringify(itemFilter)}`);\n  }\n\n  if (!subItemFilters.length) {\n    return await items[0].click();\n  }\n\n  const menu = await items[0].getSubmenu();\n  if (!menu) {\n    throw Error(`Item matching ${JSON.stringify(itemFilter)} does not have a submenu`);\n  }\n  return menu.clickItem(...(subItemFilters as [Omit<MenuItemHarnessFilters, 'ancestor'>]));\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n  ComponentHarnessConstructor,\n  ContentContainerComponentHarness,\n  HarnessLoader,\n  HarnessPredicate,\n  TestElement,\n} from '@angular/cdk/testing';\nimport {ContextMenuHarnessFilters, MenuItemHarnessFilters} from './menu-harness-filters';\nimport {clickItemImplementation, MatMenuItemHarness} from './menu-harness';\n\n/** Harness for interacting with context menus in tests. */\nexport class MatContextMenuHarness extends ContentContainerComponentHarness<string> {\n  private _documentRootLocator = this.documentRootLocatorFactory();\n\n  /** The selector for the host element of a `MatContextMenu` instance. */\n  static hostSelector = '.mat-context-menu-trigger';\n\n  /**\n   * Gets a `HarnessPredicate` that can be used to search for a context menu with specific\n   * attributes.\n   * @param options Options for filtering which menu instances are considered a match.\n   * @return a `HarnessPredicate` configured with the given options.\n   */\n  static with<T extends MatContextMenuHarness>(\n    this: ComponentHarnessConstructor<T>,\n    options: ContextMenuHarnessFilters = {},\n  ): HarnessPredicate<T> {\n    return new HarnessPredicate(this, options);\n  }\n\n  /** Whether the menu is open. */\n  async isOpen(): Promise<boolean> {\n    return !!(await this._getMenuPanel());\n  }\n\n  /**\n   * Opens the menu.\n   * @param relativeX X coordinate, relative to the element, to dispatch the opening click at.\n   * @param relativeY Y coordinate, relative to the element, to dispatch the opening click at.\n   */\n  async open(relativeX = 0, relativeY = 0): Promise<void> {\n    if (!(await this.isOpen())) {\n      return (await this.host()).rightClick(relativeX, relativeY);\n    }\n  }\n\n  /** Closes the menu. */\n  async close(): Promise<void> {\n    const panel = await this._getMenuPanel();\n    if (panel) {\n      return panel.click();\n    }\n  }\n\n  /** Gets whether the context menu trigger is disabled. */\n  async isDisabled(): Promise<boolean> {\n    const host = await this.host();\n    return host.hasClass('mat-context-menu-trigger-disabled');\n  }\n\n  /**\n   * Gets a list of `MatMenuItemHarness` representing the items in the menu.\n   * @param filters Optionally filters which menu items are included.\n   */\n  async getItems(\n    filters?: Omit<MenuItemHarnessFilters, 'ancestor'>,\n  ): Promise<MatMenuItemHarness[]> {\n    const panelId = await this._getPanelId();\n    if (panelId) {\n      return this._documentRootLocator.locatorForAll(\n        MatMenuItemHarness.with({\n          ...(filters || {}),\n          ancestor: `#${panelId}`,\n        } as MenuItemHarnessFilters),\n      )();\n    }\n    return [];\n  }\n\n  /**\n   * Clicks an item in the menu, and optionally continues clicking items in subsequent sub-menus.\n   * @param itemFilter A filter used to represent which item in the menu should be clicked. The\n   *     first matching menu item will be clicked.\n   * @param subItemFilters A list of filters representing the items to click in any subsequent\n   *     sub-menus. The first item in the sub-menu matching the corresponding filter in\n   *     `subItemFilters` will be clicked.\n   */\n  async clickItem(\n    itemFilter: Omit<MenuItemHarnessFilters, 'ancestor'>,\n    ...subItemFilters: Omit<MenuItemHarnessFilters, 'ancestor'>[]\n  ): Promise<void> {\n    await this.open();\n    return clickItemImplementation(await this.getItems(itemFilter), itemFilter, subItemFilters);\n  }\n\n  protected override async getRootHarnessLoader(): Promise<HarnessLoader> {\n    const panelId = await this._getPanelId();\n    return this.documentRootLocatorFactory().harnessLoaderFor(`#${panelId}`);\n  }\n\n  /** Gets the menu panel associated with this menu. */\n  private async _getMenuPanel(): Promise<TestElement | null> {\n    const panelId = await this._getPanelId();\n    return panelId ? this._documentRootLocator.locatorForOptional(`#${panelId}`)() : null;\n  }\n\n  /** Gets the id of the menu panel associated with this menu. */\n  private async _getPanelId(): Promise<string | null> {\n    const panelId = await (await this.host()).getAttribute('aria-controls');\n    return panelId || null;\n  }\n}\n"],"names":["MatMenuHarness","ContentContainerComponentHarness","_documentRootLocator","documentRootLocatorFactory","hostSelector","with","options","HarnessPredicate","addOption","triggerText","harness","text","stringMatches","getTriggerText","triggerIconName","result","locatorForOptional","MatIconHarness","name","isDisabled","disabled","host","getAttribute","coerceBooleanProperty","isOpen","_getMenuPanel","focus","blur","isFocused","open","click","close","panel","getItems","filters","panelId","_getPanelId","locatorForAll","MatMenuItemHarness","ancestor","clickItem","itemFilter","subItemFilters","clickItemImplementation","getRootHarnessLoader","harnessLoaderFor","getText","hasSubmenu","matchesSelector","getSubmenu","locatorFactory","items","length","Error","JSON","stringify","menu","MatContextMenuHarness","relativeX","relativeY","rightClick","hasClass"],"mappings":"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"}