{"version":3,"file":"ngx-com-components-menu-testing.mjs","sources":["../../../projects/com/components/menu/testing/menu.harness.ts","../../../projects/com/components/menu/testing/index.ts","../../../projects/com/components/menu/testing/ngx-com-components-menu-testing.ts"],"sourcesContent":["import {\n  ComponentHarness,\n  HarnessPredicate,\n  TestKey,\n  parallel,\n} from '@angular/cdk/testing';\nimport type { BaseHarnessFilters } from '@angular/cdk/testing';\n\n/** Harness filters for ComMenuItemHarness. */\nexport interface ComMenuItemHarnessFilters extends BaseHarnessFilters {\n  /** Filter by the item's text content. */\n  text?: string | RegExp;\n  /** Filter by whether the item is disabled. */\n  disabled?: boolean;\n}\n\n/** Harness filters for ComMenuItemCheckboxHarness. */\nexport interface ComMenuItemCheckboxHarnessFilters extends BaseHarnessFilters {\n  /** Filter by the item's text content. */\n  text?: string | RegExp;\n  /** Filter by whether the item is disabled. */\n  disabled?: boolean;\n  /** Filter by whether the item is checked. */\n  checked?: boolean;\n}\n\n/** Harness filters for ComMenuItemRadioHarness. */\nexport interface ComMenuItemRadioHarnessFilters extends BaseHarnessFilters {\n  /** Filter by the item's text content. */\n  text?: string | RegExp;\n  /** Filter by whether the item is disabled. */\n  disabled?: boolean;\n  /** Filter by whether the item is checked. */\n  checked?: boolean;\n}\n\n/** Harness filters for ComMenuHarness. */\nexport interface ComMenuHarnessFilters extends BaseHarnessFilters {\n  /** Filter by the menu's aria-label. */\n  ariaLabel?: string | RegExp;\n}\n\n/** Harness filters for ComMenuTriggerHarness. */\nexport interface ComMenuTriggerHarnessFilters extends BaseHarnessFilters {\n  /** Filter by the trigger element's text. */\n  text?: string | RegExp;\n}\n\n/**\n * Harness for interacting with a menu item in tests.\n */\nexport class ComMenuItemHarness extends ComponentHarness {\n  static hostSelector = '[comMenuItem]';\n\n  /**\n   * Gets a HarnessPredicate for matching menu items.\n   * @param options Filter options.\n   */\n  static with(options: ComMenuItemHarnessFilters = {}): HarnessPredicate<ComMenuItemHarness> {\n    return new HarnessPredicate(ComMenuItemHarness, options)\n      .addOption('text', options.text, async (harness, text) => {\n        const itemText = await harness.getText();\n        return HarnessPredicate.stringMatches(itemText, text);\n      })\n      .addOption('disabled', options.disabled, async (harness, disabled) => {\n        return (await harness.isDisabled()) === disabled;\n      });\n  }\n\n  /** Gets the item's text content. */\n  async getText(): Promise<string> {\n    const host = await this.host();\n    return host.text();\n  }\n\n  /** Whether the item is disabled. */\n  async isDisabled(): Promise<boolean> {\n    const host = await this.host();\n    return (await host.getAttribute('aria-disabled')) === 'true';\n  }\n\n  /** Clicks the menu item. */\n  async click(): Promise<void> {\n    const host = await this.host();\n    return host.click();\n  }\n\n  /** Focuses the menu item. */\n  async focus(): Promise<void> {\n    const host = await this.host();\n    return host.focus();\n  }\n\n  /** Whether the menu item is focused. */\n  async isFocused(): Promise<boolean> {\n    const host = await this.host();\n    return host.isFocused();\n  }\n}\n\n/**\n * Harness for interacting with a checkbox menu item in tests.\n */\nexport class ComMenuItemCheckboxHarness extends ComponentHarness {\n  static hostSelector = '[comMenuItemCheckbox]';\n\n  /**\n   * Gets a HarnessPredicate for matching checkbox menu items.\n   * @param options Filter options.\n   */\n  static with(options: ComMenuItemCheckboxHarnessFilters = {}): HarnessPredicate<ComMenuItemCheckboxHarness> {\n    return new HarnessPredicate(ComMenuItemCheckboxHarness, options)\n      .addOption('text', options.text, async (harness, text) => {\n        const itemText = await harness.getText();\n        return HarnessPredicate.stringMatches(itemText, text);\n      })\n      .addOption('disabled', options.disabled, async (harness, disabled) => {\n        return (await harness.isDisabled()) === disabled;\n      })\n      .addOption('checked', options.checked, async (harness, checked) => {\n        return (await harness.isChecked()) === checked;\n      });\n  }\n\n  /** Gets the item's text content. */\n  async getText(): Promise<string> {\n    const host = await this.host();\n    return host.text();\n  }\n\n  /** Whether the item is disabled. */\n  async isDisabled(): Promise<boolean> {\n    const host = await this.host();\n    return (await host.getAttribute('aria-disabled')) === 'true';\n  }\n\n  /** Whether the item is checked. */\n  async isChecked(): Promise<boolean> {\n    const host = await this.host();\n    return (await host.getAttribute('aria-checked')) === 'true';\n  }\n\n  /** Toggles the checkbox item by clicking it. */\n  async toggle(): Promise<void> {\n    const host = await this.host();\n    return host.click();\n  }\n\n  /** Focuses the item. */\n  async focus(): Promise<void> {\n    const host = await this.host();\n    return host.focus();\n  }\n\n  /** Whether the item is focused. */\n  async isFocused(): Promise<boolean> {\n    const host = await this.host();\n    return host.isFocused();\n  }\n}\n\n/**\n * Harness for interacting with a radio menu item in tests.\n */\nexport class ComMenuItemRadioHarness extends ComponentHarness {\n  static hostSelector = '[comMenuItemRadio]';\n\n  /**\n   * Gets a HarnessPredicate for matching radio menu items.\n   * @param options Filter options.\n   */\n  static with(options: ComMenuItemRadioHarnessFilters = {}): HarnessPredicate<ComMenuItemRadioHarness> {\n    return new HarnessPredicate(ComMenuItemRadioHarness, options)\n      .addOption('text', options.text, async (harness, text) => {\n        const itemText = await harness.getText();\n        return HarnessPredicate.stringMatches(itemText, text);\n      })\n      .addOption('disabled', options.disabled, async (harness, disabled) => {\n        return (await harness.isDisabled()) === disabled;\n      })\n      .addOption('checked', options.checked, async (harness, checked) => {\n        return (await harness.isChecked()) === checked;\n      });\n  }\n\n  /** Gets the item's text content. */\n  async getText(): Promise<string> {\n    const host = await this.host();\n    return host.text();\n  }\n\n  /** Whether the item is disabled. */\n  async isDisabled(): Promise<boolean> {\n    const host = await this.host();\n    return (await host.getAttribute('aria-disabled')) === 'true';\n  }\n\n  /** Whether the item is checked. */\n  async isChecked(): Promise<boolean> {\n    const host = await this.host();\n    return (await host.getAttribute('aria-checked')) === 'true';\n  }\n\n  /** Clicks the radio item. */\n  async click(): Promise<void> {\n    const host = await this.host();\n    return host.click();\n  }\n\n  /** Focuses the item. */\n  async focus(): Promise<void> {\n    const host = await this.host();\n    return host.focus();\n  }\n\n  /** Whether the item is focused. */\n  async isFocused(): Promise<boolean> {\n    const host = await this.host();\n    return host.isFocused();\n  }\n}\n\n/**\n * Harness for interacting with a com-menu panel in tests.\n */\nexport class ComMenuHarness extends ComponentHarness {\n  static hostSelector = 'com-menu';\n\n  private readonly menuPanel = this.locatorFor('[role=\"menu\"]');\n\n  /**\n   * Gets a HarnessPredicate for matching menus.\n   * @param options Filter options.\n   */\n  static with(options: ComMenuHarnessFilters = {}): HarnessPredicate<ComMenuHarness> {\n    return new HarnessPredicate(ComMenuHarness, options)\n      .addOption('ariaLabel', options.ariaLabel, async (harness, ariaLabel) => {\n        const label = await harness.getAriaLabel();\n        return HarnessPredicate.stringMatches(label, ariaLabel);\n      });\n  }\n\n  /** Gets the menu's aria-label. */\n  async getAriaLabel(): Promise<string | null> {\n    const panel = await this.menuPanel();\n    return panel.getAttribute('aria-label');\n  }\n\n  /** Gets the menu panel's ID. */\n  async getMenuId(): Promise<string | null> {\n    const panel = await this.menuPanel();\n    return panel.getAttribute('id');\n  }\n\n  /** Gets all menu items, optionally filtered. */\n  async getItems(filters: ComMenuItemHarnessFilters = {}): Promise<ComMenuItemHarness[]> {\n    return this.locatorForAll(ComMenuItemHarness.with(filters))();\n  }\n\n  /** Gets all checkbox menu items, optionally filtered. */\n  async getCheckboxItems(filters: ComMenuItemCheckboxHarnessFilters = {}): Promise<ComMenuItemCheckboxHarness[]> {\n    return this.locatorForAll(ComMenuItemCheckboxHarness.with(filters))();\n  }\n\n  /** Gets all radio menu items, optionally filtered. */\n  async getRadioItems(filters: ComMenuItemRadioHarnessFilters = {}): Promise<ComMenuItemRadioHarness[]> {\n    return this.locatorForAll(ComMenuItemRadioHarness.with(filters))();\n  }\n\n  /** Gets all menu item texts. */\n  async getItemLabels(): Promise<string[]> {\n    const items = await this.getItems();\n    return parallel(() => items.map((item) => item.getText()));\n  }\n}\n\n/**\n * Harness for interacting with a menu trigger in tests.\n */\nexport class ComMenuTriggerHarness extends ComponentHarness {\n  static hostSelector = '[comMenuTrigger]';\n\n  private readonly documentRootLocator = this.documentRootLocatorFactory();\n\n  /**\n   * Gets a HarnessPredicate for matching menu triggers.\n   * @param options Filter options.\n   */\n  static with(options: ComMenuTriggerHarnessFilters = {}): HarnessPredicate<ComMenuTriggerHarness> {\n    return new HarnessPredicate(ComMenuTriggerHarness, options)\n      .addOption('text', options.text, async (harness, text) => {\n        const triggerText = await harness.getText();\n        return HarnessPredicate.stringMatches(triggerText, text);\n      });\n  }\n\n  /** Gets the trigger element's text. */\n  async getText(): Promise<string> {\n    const host = await this.host();\n    return host.text();\n  }\n\n  /** Whether the menu is currently open. */\n  async isOpen(): Promise<boolean> {\n    const host = await this.host();\n    return (await host.getAttribute('aria-expanded')) === 'true';\n  }\n\n  /** Opens the menu if it's closed. */\n  async open(): Promise<void> {\n    if (!(await this.isOpen())) {\n      const host = await this.host();\n      await host.click();\n    }\n  }\n\n  /** Closes the menu if it's open. */\n  async close(): Promise<void> {\n    if (await this.isOpen()) {\n      const host = await this.host();\n      await host.sendKeys(TestKey.ESCAPE);\n    }\n  }\n\n  /** Toggles the menu open/close state. */\n  async toggle(): Promise<void> {\n    const host = await this.host();\n    return host.click();\n  }\n\n  /** Gets the menu panel harness, or null if the menu is closed. */\n  async getMenu(): Promise<ComMenuHarness | null> {\n    if (!(await this.isOpen())) {\n      return null;\n    }\n    return this.documentRootLocator.locatorForOptional(ComMenuHarness.with({}))();\n  }\n\n  /** Opens the menu and gets all menu items. */\n  async getItems(filters: ComMenuItemHarnessFilters = {}): Promise<ComMenuItemHarness[]> {\n    await this.open();\n    const menu = await this.getMenu();\n    if (!menu) {\n      throw new Error('Could not find menu panel. Is the menu template correctly bound to [comMenuTrigger]?');\n    }\n    return menu.getItems(filters);\n  }\n\n  /** Opens the menu, finds an item by filter, and clicks it. */\n  async clickItem(filter: ComMenuItemHarnessFilters): Promise<void> {\n    const items = await this.getItems(filter);\n    if (items.length === 0) {\n      throw new Error(`Could not find menu item matching filter: ${JSON.stringify(filter)}`);\n    }\n    return items[0]!.click();\n  }\n\n  /** Sends keyboard input to the trigger element. */\n  async sendKeys(...keys: (string | TestKey)[]): Promise<void> {\n    const host = await this.host();\n    return host.sendKeys(...keys);\n  }\n\n  /** Focuses the trigger element. */\n  async focus(): Promise<void> {\n    const host = await this.host();\n    return host.focus();\n  }\n\n  /** Blurs the trigger element. */\n  async blur(): Promise<void> {\n    const host = await this.host();\n    return host.blur();\n  }\n\n  /** Whether the trigger element is focused. */\n  async isFocused(): Promise<boolean> {\n    const host = await this.host();\n    return host.isFocused();\n  }\n}\n","// Testing utilities for the menu component\n\nexport {\n  ComMenuItemHarness,\n  ComMenuItemCheckboxHarness,\n  ComMenuItemRadioHarness,\n  ComMenuHarness,\n  ComMenuTriggerHarness,\n} from './menu.harness';\n\nexport type {\n  ComMenuItemHarnessFilters,\n  ComMenuItemCheckboxHarnessFilters,\n  ComMenuItemRadioHarnessFilters,\n  ComMenuHarnessFilters,\n  ComMenuTriggerHarnessFilters,\n} from './menu.harness';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}