{"version":3,"file":"testing.mjs","sources":["../../../../../../../src/material/list/testing/list-item-harness-base.ts","../../../../../../../src/material/list/testing/list-harness-base.ts","../../../../../../../src/material/list/testing/action-list-harness.ts","../../../../../../../src/material/list/testing/list-harness.ts","../../../../../../../src/material/list/testing/list-harness-filters.ts","../../../../../../../src/material/list/testing/nav-list-harness.ts","../../../../../../../src/material/list/testing/selection-list-harness.ts","../../../../../../../src/material/list/testing/public-api.ts","../../../../../../../src/material/list/testing/index.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.io/license\n */\n\nimport {\n  ComponentHarness,\n  ComponentHarnessConstructor,\n  ContentContainerComponentHarness,\n  HarnessPredicate,\n  parallel,\n} from '@angular/cdk/testing';\nimport {BaseListItemHarnessFilters, SubheaderHarnessFilters} from './list-harness-filters';\n\nconst iconSelector = '.mat-mdc-list-item-icon';\nconst avatarSelector = '.mat-mdc-list-item-avatar';\n\n/**\n * Gets a `HarnessPredicate` that applies the given `BaseListItemHarnessFilters` to the given\n * list item harness.\n * @template H The type of list item harness to create a predicate for.\n * @param harnessType A constructor for a list item harness.\n * @param options An instance of `BaseListItemHarnessFilters` to apply.\n * @return A `HarnessPredicate` for the given harness type with the given options applied.\n */\nexport function getListItemPredicate<H extends MatListItemHarnessBase>(\n  harnessType: ComponentHarnessConstructor<H>,\n  options: BaseListItemHarnessFilters,\n): HarnessPredicate<H> {\n  return new HarnessPredicate(harnessType, options)\n    .addOption('text', options.text, (harness, text) =>\n      HarnessPredicate.stringMatches(harness.getText(), text),\n    )\n    .addOption('fullText', options.fullText, (harness, fullText) =>\n      HarnessPredicate.stringMatches(harness.getFullText(), fullText),\n    )\n    .addOption('title', options.title, (harness, title) =>\n      HarnessPredicate.stringMatches(harness.getTitle(), title),\n    )\n    .addOption('secondaryText', options.secondaryText, (harness, secondaryText) =>\n      HarnessPredicate.stringMatches(harness.getSecondaryText(), secondaryText),\n    )\n    .addOption('tertiaryText', options.tertiaryText, (harness, tertiaryText) =>\n      HarnessPredicate.stringMatches(harness.getTertiaryText(), tertiaryText),\n    );\n}\n\n/** Harness for interacting with a MDC-based list subheader. */\nexport class MatSubheaderHarness extends ComponentHarness {\n  static hostSelector = '.mat-mdc-subheader';\n\n  static with(options: SubheaderHarnessFilters = {}): HarnessPredicate<MatSubheaderHarness> {\n    return new HarnessPredicate(MatSubheaderHarness, options).addOption(\n      'text',\n      options.text,\n      (harness, text) => HarnessPredicate.stringMatches(harness.getText(), text),\n    );\n  }\n\n  /** Gets the full text content of the list item (including text from any font icons). */\n  async getText(): Promise<string> {\n    return (await this.host()).text();\n  }\n}\n\n/** Selectors for the various list item sections that may contain user content. */\nexport const enum MatListItemSection {\n  CONTENT = '.mdc-list-item__content',\n}\n\n/** Enum describing the possible variants of a list item. */\nexport const enum MatListItemType {\n  ONE_LINE_ITEM,\n  TWO_LINE_ITEM,\n  THREE_LINE_ITEM,\n}\n\n/**\n * Shared behavior among the harnesses for the various `MatListItem` flavors.\n * @docs-private\n */\nexport abstract class MatListItemHarnessBase extends ContentContainerComponentHarness<MatListItemSection> {\n  private _lines = this.locatorForAll('.mat-mdc-list-item-line');\n  private _primaryText = this.locatorFor('.mdc-list-item__primary-text');\n  private _avatar = this.locatorForOptional('.mat-mdc-list-item-avatar');\n  private _icon = this.locatorForOptional('.mat-mdc-list-item-icon');\n  private _unscopedTextContent = this.locatorFor('.mat-mdc-list-item-unscoped-content');\n\n  /** Gets the type of the list item, currently describing how many lines there are. */\n  async getType(): Promise<MatListItemType> {\n    const host = await this.host();\n    const [isOneLine, isTwoLine] = await parallel(() => [\n      host.hasClass('mdc-list-item--with-one-line'),\n      host.hasClass('mdc-list-item--with-two-lines'),\n    ]);\n    if (isOneLine) {\n      return MatListItemType.ONE_LINE_ITEM;\n    } else if (isTwoLine) {\n      return MatListItemType.TWO_LINE_ITEM;\n    } else {\n      return MatListItemType.THREE_LINE_ITEM;\n    }\n  }\n\n  /**\n   * Gets the full text content of the list item, excluding text\n   * from icons and avatars.\n   *\n   * @deprecated Use the `getFullText` method instead.\n   * @breaking-change 16.0.0\n   */\n  async getText(): Promise<string> {\n    return this.getFullText();\n  }\n\n  /**\n   * Gets the full text content of the list item, excluding text\n   * from icons and avatars.\n   */\n  async getFullText(): Promise<string> {\n    return (await this.host()).text({exclude: `${iconSelector}, ${avatarSelector}`});\n  }\n\n  /** Gets the title of the list item. */\n  async getTitle(): Promise<string> {\n    return (await this._primaryText()).text();\n  }\n\n  /** Whether the list item is disabled. */\n  async isDisabled(): Promise<boolean> {\n    return (await this.host()).hasClass('mdc-list-item--disabled');\n  }\n\n  /**\n   * Gets the secondary line text of the list item. Null if the list item\n   * does not have a secondary line.\n   */\n  async getSecondaryText(): Promise<string | null> {\n    const type = await this.getType();\n    if (type === MatListItemType.ONE_LINE_ITEM) {\n      return null;\n    }\n\n    const [lines, unscopedTextContent] = await parallel(() => [\n      this._lines(),\n      this._unscopedTextContent(),\n    ]);\n\n    // If there is no explicit line for the secondary text, the unscoped text content\n    // is rendered as the secondary text (with potential text wrapping enabled).\n    if (lines.length >= 1) {\n      return lines[0].text();\n    } else {\n      return unscopedTextContent.text();\n    }\n  }\n\n  /**\n   * Gets the tertiary line text of the list item. Null if the list item\n   * does not have a tertiary line.\n   */\n  async getTertiaryText(): Promise<string | null> {\n    const type = await this.getType();\n    if (type !== MatListItemType.THREE_LINE_ITEM) {\n      return null;\n    }\n\n    const [lines, unscopedTextContent] = await parallel(() => [\n      this._lines(),\n      this._unscopedTextContent(),\n    ]);\n\n    // First we check if there is an explicit line for the tertiary text. If so, we return it.\n    // If there is at least an explicit secondary line though, then we know that the unscoped\n    // text content corresponds to the tertiary line. If there are no explicit lines at all,\n    // we know that the unscoped text content from the secondary text just wraps into the third\n    // line, but there *no* actual dedicated tertiary text.\n    if (lines.length === 2) {\n      return lines[1].text();\n    } else if (lines.length === 1) {\n      return unscopedTextContent.text();\n    }\n    return null;\n  }\n\n  /** Whether this list item has an avatar. */\n  async hasAvatar(): Promise<boolean> {\n    return !!(await this._avatar());\n  }\n\n  /** Whether this list item has an icon. */\n  async hasIcon(): Promise<boolean> {\n    return !!(await this._icon());\n  }\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.io/license\n */\n\nimport {\n  ComponentHarness,\n  ComponentHarnessConstructor,\n  HarnessPredicate,\n  parallel,\n} from '@angular/cdk/testing';\nimport {DividerHarnessFilters, MatDividerHarness} from '@angular/material/divider/testing';\nimport {BaseListItemHarnessFilters, SubheaderHarnessFilters} from './list-harness-filters';\nimport {MatSubheaderHarness} from './list-item-harness-base';\n\n/** Represents a section of a list falling under a specific header. */\nexport interface ListSection<I> {\n  /** The heading for this list section. `undefined` if there is no heading. */\n  heading?: string;\n\n  /** The items in this list section. */\n  items: I[];\n}\n\n/**\n * Shared behavior among the harnesses for the various `MatList` flavors.\n * @template T A constructor type for a list item harness type used by this list harness.\n * @template C The list item harness type that `T` constructs.\n * @template F The filter type used filter list item harness of type `C`.\n * @docs-private\n */\nexport abstract class MatListHarnessBase<\n  T extends ComponentHarnessConstructor<C> & {with: (options?: F) => HarnessPredicate<C>},\n  C extends ComponentHarness,\n  F extends BaseListItemHarnessFilters,\n> extends ComponentHarness {\n  protected _itemHarness: T;\n\n  /**\n   * Gets a list of harnesses representing the items in this list.\n   * @param filters Optional filters used to narrow which harnesses are included\n   * @return The list of items matching the given filters.\n   */\n  async getItems(filters?: F): Promise<C[]> {\n    return this.locatorForAll(this._itemHarness.with(filters))();\n  }\n\n  /**\n   * Gets a list of `ListSection` representing the list items grouped by subheaders. If the list has\n   * no subheaders it is represented as a single `ListSection` with an undefined `heading` property.\n   * @param filters Optional filters used to narrow which list item harnesses are included\n   * @return The list of items matching the given filters, grouped into sections by subheader.\n   */\n  async getItemsGroupedBySubheader(filters?: F): Promise<ListSection<C>[]> {\n    type Section = {items: C[]; heading?: Promise<string>};\n    const listSections: Section[] = [];\n    let currentSection: Section = {items: []};\n    const itemsAndSubheaders = await this.getItemsWithSubheadersAndDividers({\n      item: filters,\n      divider: false,\n    });\n\n    for (const itemOrSubheader of itemsAndSubheaders) {\n      if (itemOrSubheader instanceof MatSubheaderHarness) {\n        if (currentSection.heading !== undefined || currentSection.items.length) {\n          listSections.push(currentSection);\n        }\n        currentSection = {heading: itemOrSubheader.getText(), items: []};\n      } else {\n        currentSection.items.push(itemOrSubheader);\n      }\n    }\n    if (\n      currentSection.heading !== undefined ||\n      currentSection.items.length ||\n      !listSections.length\n    ) {\n      listSections.push(currentSection);\n    }\n\n    // Concurrently wait for all sections to resolve their heading if present.\n    return parallel(() =>\n      listSections.map(async s => ({items: s.items, heading: await s.heading})),\n    );\n  }\n\n  /**\n   * Gets a list of sub-lists representing the list items grouped by dividers. If the list has no\n   * dividers it is represented as a list with a single sub-list.\n   * @param filters Optional filters used to narrow which list item harnesses are included\n   * @return The list of items matching the given filters, grouped into sub-lists by divider.\n   */\n  async getItemsGroupedByDividers(filters?: F): Promise<C[][]> {\n    const listSections: C[][] = [[]];\n    const itemsAndDividers = await this.getItemsWithSubheadersAndDividers({\n      item: filters,\n      subheader: false,\n    });\n    for (const itemOrDivider of itemsAndDividers) {\n      if (itemOrDivider instanceof MatDividerHarness) {\n        listSections.push([]);\n      } else {\n        listSections[listSections.length - 1].push(itemOrDivider);\n      }\n    }\n    return listSections;\n  }\n\n  /**\n   * Gets a list of harnesses representing all of the items, subheaders, and dividers\n   * (in the order they appear in the list). Use `instanceof` to check which type of harness a given\n   * item is.\n   * @param filters Optional filters used to narrow which list items, subheaders, and dividers are\n   *     included. A value of `false` for the `item`, `subheader`, or `divider` properties indicates\n   *     that the respective harness type should be omitted completely.\n   * @return The list of harnesses representing the items, subheaders, and dividers matching the\n   *     given filters.\n   */\n  getItemsWithSubheadersAndDividers(filters: {\n    item: false;\n    subheader: false;\n    divider: false;\n  }): Promise<[]>;\n  getItemsWithSubheadersAndDividers(filters: {\n    item?: F | false;\n    subheader: false;\n    divider: false;\n  }): Promise<C[]>;\n  getItemsWithSubheadersAndDividers(filters: {\n    item: false;\n    subheader?: SubheaderHarnessFilters | false;\n    divider: false;\n  }): Promise<MatSubheaderHarness[]>;\n  getItemsWithSubheadersAndDividers(filters: {\n    item: false;\n    subheader: false;\n    divider?: DividerHarnessFilters | false;\n  }): Promise<MatDividerHarness[]>;\n  getItemsWithSubheadersAndDividers(filters: {\n    item?: F | false;\n    subheader?: SubheaderHarnessFilters | false;\n    divider: false;\n  }): Promise<(C | MatSubheaderHarness)[]>;\n  getItemsWithSubheadersAndDividers(filters: {\n    item?: F | false;\n    subheader: false;\n    divider?: false | DividerHarnessFilters;\n  }): Promise<(C | MatDividerHarness)[]>;\n  getItemsWithSubheadersAndDividers(filters: {\n    item: false;\n    subheader?: false | SubheaderHarnessFilters;\n    divider?: false | DividerHarnessFilters;\n  }): Promise<(MatSubheaderHarness | MatDividerHarness)[]>;\n  getItemsWithSubheadersAndDividers(filters?: {\n    item?: F | false;\n    subheader?: SubheaderHarnessFilters | false;\n    divider?: DividerHarnessFilters | false;\n  }): Promise<(C | MatSubheaderHarness | MatDividerHarness)[]>;\n  async getItemsWithSubheadersAndDividers(\n    filters: {\n      item?: F | false;\n      subheader?: SubheaderHarnessFilters | false;\n      divider?: DividerHarnessFilters | false;\n    } = {},\n  ): Promise<(C | MatSubheaderHarness | MatDividerHarness)[]> {\n    const query = [];\n    if (filters.item !== false) {\n      query.push(this._itemHarness.with(filters.item || ({} as F)));\n    }\n    if (filters.subheader !== false) {\n      query.push(MatSubheaderHarness.with(filters.subheader));\n    }\n    if (filters.divider !== false) {\n      query.push(MatDividerHarness.with(filters.divider));\n    }\n    return this.locatorForAll(...query)();\n  }\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.io/license\n */\n\nimport {ComponentHarnessConstructor, HarnessPredicate} from '@angular/cdk/testing';\nimport {MatListHarnessBase} from './list-harness-base';\nimport {ActionListHarnessFilters, ActionListItemHarnessFilters} from './list-harness-filters';\nimport {getListItemPredicate, MatListItemHarnessBase} from './list-item-harness-base';\n\n/** Harness for interacting with a MDC-based action-list in tests. */\nexport class MatActionListHarness extends MatListHarnessBase<\n  typeof MatActionListItemHarness,\n  MatActionListItemHarness,\n  ActionListItemHarnessFilters\n> {\n  /** The selector for the host element of a `MatActionList` instance. */\n  static hostSelector = '.mat-mdc-action-list';\n\n  /**\n   * Gets a `HarnessPredicate` that can be used to search for an action list with specific\n   * attributes.\n   * @param options Options for filtering which action list instances are considered a match.\n   * @return a `HarnessPredicate` configured with the given options.\n   */\n  static with<T extends MatActionListHarness>(\n    this: ComponentHarnessConstructor<T>,\n    options: ActionListHarnessFilters = {},\n  ): HarnessPredicate<T> {\n    return new HarnessPredicate(this, options);\n  }\n\n  override _itemHarness = MatActionListItemHarness;\n}\n\n/** Harness for interacting with an action list item. */\nexport class MatActionListItemHarness extends MatListItemHarnessBase {\n  /** The selector for the host element of a `MatListItem` instance. */\n  static hostSelector = `${MatActionListHarness.hostSelector} .mat-mdc-list-item`;\n\n  /**\n   * Gets a `HarnessPredicate` that can be used to search for a list item with specific\n   * attributes.\n   * @param options Options for filtering which action list item instances are considered a match.\n   * @return a `HarnessPredicate` configured with the given options.\n   */\n  static with<T extends MatActionListItemHarness>(\n    this: ComponentHarnessConstructor<T>,\n    options: ActionListItemHarnessFilters = {},\n  ): HarnessPredicate<T> {\n    return getListItemPredicate(this, options);\n  }\n\n  /** Clicks on the action list item. */\n  async click(): Promise<void> {\n    return (await this.host()).click();\n  }\n\n  /** Focuses the action list item. */\n  async focus(): Promise<void> {\n    return (await this.host()).focus();\n  }\n\n  /** Blurs the action list item. */\n  async blur(): Promise<void> {\n    return (await this.host()).blur();\n  }\n\n  /** Whether the action list item is focused. */\n  async isFocused(): Promise<boolean> {\n    return (await this.host()).isFocused();\n  }\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.io/license\n */\n\nimport {ComponentHarnessConstructor, HarnessPredicate} from '@angular/cdk/testing';\nimport {MatListHarnessBase} from './list-harness-base';\nimport {ListHarnessFilters, ListItemHarnessFilters} from './list-harness-filters';\nimport {getListItemPredicate, MatListItemHarnessBase} from './list-item-harness-base';\n\n/** Harness for interacting with a MDC-based list in tests. */\nexport class MatListHarness extends MatListHarnessBase<\n  typeof MatListItemHarness,\n  MatListItemHarness,\n  ListItemHarnessFilters\n> {\n  /** The selector for the host element of a `MatList` instance. */\n  static hostSelector = '.mat-mdc-list';\n\n  /**\n   * Gets a `HarnessPredicate` that can be used to search for a list with specific attributes.\n   * @param options Options for filtering which list instances are considered a match.\n   * @return a `HarnessPredicate` configured with the given options.\n   */\n  static with<T extends MatListHarness>(\n    this: ComponentHarnessConstructor<T>,\n    options: ListHarnessFilters = {},\n  ): HarnessPredicate<T> {\n    return new HarnessPredicate(this, options);\n  }\n\n  override _itemHarness = MatListItemHarness;\n}\n\n/** Harness for interacting with a list item. */\nexport class MatListItemHarness extends MatListItemHarnessBase {\n  /** The selector for the host element of a `MatListItem` instance. */\n  static hostSelector = `${MatListHarness.hostSelector} .mat-mdc-list-item`;\n\n  /**\n   * Gets a `HarnessPredicate` that can be used to search for a list item with specific attributes.\n   * @param options Options for filtering which list item instances are considered a match.\n   * @return a `HarnessPredicate` configured with the given options.\n   */\n  static with<T extends MatListItemHarness>(\n    this: ComponentHarnessConstructor<T>,\n    options: ListItemHarnessFilters = {},\n  ): HarnessPredicate<T> {\n    return getListItemPredicate(this, options);\n  }\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.io/license\n */\n\nimport {BaseHarnessFilters} from '@angular/cdk/testing';\n\nexport interface ListHarnessFilters extends BaseHarnessFilters {}\n\nexport interface ActionListHarnessFilters extends BaseHarnessFilters {}\n\nexport interface NavListHarnessFilters extends BaseHarnessFilters {}\n\nexport interface SelectionListHarnessFilters extends BaseHarnessFilters {}\n\nexport interface BaseListItemHarnessFilters extends BaseHarnessFilters {\n  title?: string | RegExp;\n  secondaryText?: string | RegExp | null;\n  tertiaryText?: string | RegExp | null;\n  fullText?: string | RegExp;\n  /**\n   * @deprecated Use the `fullText` filter instead.\n   * @breaking-change 16.0.0\n   */\n  text?: string | RegExp;\n}\n\nexport interface ListItemHarnessFilters extends BaseListItemHarnessFilters {}\n\nexport interface ActionListItemHarnessFilters extends BaseListItemHarnessFilters {}\n\nexport interface NavListItemHarnessFilters extends BaseListItemHarnessFilters {\n  href?: string | RegExp | null;\n  activated?: boolean;\n}\n\nexport interface ListOptionHarnessFilters extends BaseListItemHarnessFilters {\n  selected?: boolean;\n}\n\nexport interface SubheaderHarnessFilters extends BaseHarnessFilters {\n  text?: string | RegExp;\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.io/license\n */\n\nimport {ComponentHarnessConstructor, HarnessPredicate} from '@angular/cdk/testing';\nimport {MatListHarnessBase} from './list-harness-base';\nimport {NavListHarnessFilters, NavListItemHarnessFilters} from './list-harness-filters';\nimport {getListItemPredicate, MatListItemHarnessBase} from './list-item-harness-base';\n\n/** Harness for interacting with a MDC-based mat-nav-list in tests. */\nexport class MatNavListHarness extends MatListHarnessBase<\n  typeof MatNavListItemHarness,\n  MatNavListItemHarness,\n  NavListItemHarnessFilters\n> {\n  /** The selector for the host element of a `MatNavList` instance. */\n  static hostSelector = '.mat-mdc-nav-list';\n\n  /**\n   * Gets a `HarnessPredicate` that can be used to search for a nav list with specific\n   * attributes.\n   * @param options Options for filtering which nav list instances are considered a match.\n   * @return a `HarnessPredicate` configured with the given options.\n   */\n  static with<T extends MatNavListHarness>(\n    this: ComponentHarnessConstructor<T>,\n    options: NavListHarnessFilters = {},\n  ): HarnessPredicate<T> {\n    return new HarnessPredicate(this, options);\n  }\n\n  override _itemHarness = MatNavListItemHarness;\n}\n\n/** Harness for interacting with a MDC-based nav-list item. */\nexport class MatNavListItemHarness extends MatListItemHarnessBase {\n  /** The selector for the host element of a `MatListItem` instance. */\n  static hostSelector = `${MatNavListHarness.hostSelector} .mat-mdc-list-item`;\n\n  /**\n   * Gets a `HarnessPredicate` that can be used to search for a nav list item with specific\n   * attributes.\n   * @param options Options for filtering which nav list item instances are considered a match.\n   * @return a `HarnessPredicate` configured with the given options.\n   */\n  static with<T extends MatNavListItemHarness>(\n    this: ComponentHarnessConstructor<T>,\n    options: NavListItemHarnessFilters = {},\n  ): HarnessPredicate<T> {\n    return getListItemPredicate(this, options)\n      .addOption('href', options.href, async (harness, href) =>\n        HarnessPredicate.stringMatches(harness.getHref(), href),\n      )\n      .addOption(\n        'activated',\n        options.activated,\n        async (harness, activated) => (await harness.isActivated()) === activated,\n      );\n  }\n\n  /** Gets the href for this nav list item. */\n  async getHref(): Promise<string | null> {\n    return (await this.host()).getAttribute('href');\n  }\n\n  /** Clicks on the nav list item. */\n  async click(): Promise<void> {\n    return (await this.host()).click();\n  }\n\n  /** Focuses the nav list item. */\n  async focus(): Promise<void> {\n    return (await this.host()).focus();\n  }\n\n  /** Blurs the nav list item. */\n  async blur(): Promise<void> {\n    return (await this.host()).blur();\n  }\n\n  /** Whether the nav list item is focused. */\n  async isFocused(): Promise<boolean> {\n    return (await this.host()).isFocused();\n  }\n\n  /** Whether the list item is activated. Should only be used for nav list items. */\n  async isActivated(): Promise<boolean> {\n    return (await this.host()).hasClass('mdc-list-item--activated');\n  }\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.io/license\n */\n\nimport {ComponentHarnessConstructor, HarnessPredicate, parallel} from '@angular/cdk/testing';\nimport {MatListOptionTogglePosition} from '@angular/material/list';\nimport {MatListHarnessBase} from './list-harness-base';\nimport {\n  ListItemHarnessFilters,\n  ListOptionHarnessFilters,\n  SelectionListHarnessFilters,\n} from './list-harness-filters';\nimport {getListItemPredicate, MatListItemHarnessBase} from './list-item-harness-base';\n\n/** Harness for interacting with a MDC_based selection-list in tests. */\nexport class MatSelectionListHarness extends MatListHarnessBase<\n  typeof MatListOptionHarness,\n  MatListOptionHarness,\n  ListOptionHarnessFilters\n> {\n  /** The selector for the host element of a `MatSelectionList` instance. */\n  static hostSelector = '.mat-mdc-selection-list';\n\n  /**\n   * Gets a `HarnessPredicate` that can be used to search for a selection list with specific\n   * attributes.\n   * @param options Options for filtering which selection list instances are considered a match.\n   * @return a `HarnessPredicate` configured with the given options.\n   */\n  static with<T extends MatSelectionListHarness>(\n    this: ComponentHarnessConstructor<T>,\n    options: SelectionListHarnessFilters = {},\n  ): HarnessPredicate<T> {\n    return new HarnessPredicate(this, options);\n  }\n\n  override _itemHarness = MatListOptionHarness;\n\n  /** Whether the selection list is disabled. */\n  async isDisabled(): Promise<boolean> {\n    return (await (await this.host()).getAttribute('aria-disabled')) === 'true';\n  }\n\n  /**\n   * Selects all items matching any of the given filters.\n   * @param filters Filters that specify which items should be selected.\n   */\n  async selectItems(...filters: ListOptionHarnessFilters[]): Promise<void> {\n    const items = await this._getItems(filters);\n    await parallel(() => items.map(item => item.select()));\n  }\n\n  /**\n   * Deselects all items matching any of the given filters.\n   * @param filters Filters that specify which items should be deselected.\n   */\n  async deselectItems(...filters: ListItemHarnessFilters[]): Promise<void> {\n    const items = await this._getItems(filters);\n    await parallel(() => items.map(item => item.deselect()));\n  }\n\n  /** Gets all items matching the given list of filters. */\n  private async _getItems(filters: ListOptionHarnessFilters[]): Promise<MatListOptionHarness[]> {\n    if (!filters.length) {\n      return this.getItems();\n    }\n    const matches = await parallel(() =>\n      filters.map(filter => this.locatorForAll(MatListOptionHarness.with(filter))()),\n    );\n    return matches.reduce((result, current) => [...result, ...current], []);\n  }\n}\n\n/** Harness for interacting with a MDC-based list option. */\nexport class MatListOptionHarness extends MatListItemHarnessBase {\n  /** The selector for the host element of a `MatListOption` instance. */\n  static hostSelector = '.mat-mdc-list-option';\n\n  /**\n   * Gets a `HarnessPredicate` that can be used to search for a list option with specific\n   * attributes.\n   * @param options Options for filtering which list option instances are considered a match.\n   * @return a `HarnessPredicate` configured with the given options.\n   */\n  static with<T extends MatListOptionHarness>(\n    this: ComponentHarnessConstructor<T>,\n    options: ListOptionHarnessFilters = {},\n  ): HarnessPredicate<T> {\n    return getListItemPredicate(this, options).addOption(\n      'is selected',\n      options.selected,\n      async (harness, selected) => (await harness.isSelected()) === selected,\n    );\n  }\n\n  private _beforeCheckbox = this.locatorForOptional('.mdc-list-item__start .mdc-checkbox');\n  private _beforeRadio = this.locatorForOptional('.mdc-list-item__start .mdc-radio');\n\n  /** Gets the position of the checkbox relative to the list option content. */\n  async getCheckboxPosition(): Promise<MatListOptionTogglePosition> {\n    return (await this._beforeCheckbox()) !== null ? 'before' : 'after';\n  }\n\n  /** Gets the position of the radio relative to the list option content. */\n  async getRadioPosition(): Promise<MatListOptionTogglePosition> {\n    return (await this._beforeRadio()) !== null ? 'before' : 'after';\n  }\n\n  /** Whether the list option is selected. */\n  async isSelected(): Promise<boolean> {\n    return (await (await this.host()).getAttribute('aria-selected')) === 'true';\n  }\n\n  /** Focuses the list option. */\n  async focus(): Promise<void> {\n    return (await this.host()).focus();\n  }\n\n  /** Blurs the list option. */\n  async blur(): Promise<void> {\n    return (await this.host()).blur();\n  }\n\n  /** Whether the list option is focused. */\n  async isFocused(): Promise<boolean> {\n    return (await this.host()).isFocused();\n  }\n\n  /** Toggles the checked state of the checkbox. */\n  async toggle() {\n    return (await this.host()).click();\n  }\n\n  /**\n   * Puts the list option in a checked state by toggling it if it is currently\n   * unchecked, or doing nothing if it is already checked.\n   */\n  async select() {\n    if (!(await this.isSelected())) {\n      return this.toggle();\n    }\n  }\n\n  /**\n   * Puts the list option in an unchecked state by toggling it if it is currently\n   * checked, or doing nothing if it is already unchecked.\n   */\n  async deselect() {\n    if (await this.isSelected()) {\n      return this.toggle();\n    }\n  }\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.io/license\n */\n\nexport * from './action-list-harness';\nexport * from './list-harness';\nexport * from './list-harness-filters';\nexport * from './nav-list-harness';\nexport * from './selection-list-harness';\nexport {MatListItemSection, MatSubheaderHarness, MatListItemType} from './list-item-harness-base';\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.io/license\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}