@angular/material
Version:
Angular Material
1 lines • 41.4 kB
Source Map (JSON)
{"version":3,"file":"list-testing.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/list/testing/list-item-harness-base.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/list/testing/list-harness-base.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/list/testing/action-list-harness.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/list/testing/list-harness.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/list/testing/nav-list-harness.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/list/testing/selection-list-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 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 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 enum MatListItemSection {\n CONTENT = '.mdc-list-item__content',\n}\n\n/** Enum describing the possible variants of a list item. */\nexport 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.dev/license\n */\n\nimport {\n ComponentHarness,\n ComponentHarnessConstructor,\n HarnessPredicate,\n parallel,\n} from '@angular/cdk/testing';\nimport {DividerHarnessFilters, MatDividerHarness} from '../../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.dev/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 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.dev/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 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.dev/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 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 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.dev/license\n */\n\nimport {ComponentHarnessConstructor, HarnessPredicate, parallel} from '@angular/cdk/testing';\nimport {MatListOptionTogglePosition} from '../../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 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 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"],"names":["iconSelector","avatarSelector","getListItemPredicate","harnessType","options","HarnessPredicate","addOption","text","harness","stringMatches","getText","fullText","getFullText","title","getTitle","secondaryText","getSecondaryText","tertiaryText","getTertiaryText","MatSubheaderHarness","ComponentHarness","hostSelector","with","host","MatListItemSection","MatListItemType","MatListItemHarnessBase","ContentContainerComponentHarness","_lines","locatorForAll","_primaryText","locatorFor","_avatar","locatorForOptional","_icon","_unscopedTextContent","getType","isOneLine","isTwoLine","parallel","hasClass","ONE_LINE_ITEM","TWO_LINE_ITEM","THREE_LINE_ITEM","exclude","isDisabled","type","lines","unscopedTextContent","length","hasAvatar","hasIcon","MatListHarnessBase","_itemHarness","getItems","filters","getItemsGroupedBySubheader","listSections","currentSection","items","itemsAndSubheaders","getItemsWithSubheadersAndDividers","item","divider","itemOrSubheader","heading","undefined","push","map","s","getItemsGroupedByDividers","itemsAndDividers","subheader","itemOrDivider","MatDividerHarness","query","MatActionListHarness","MatActionListItemHarness","click","focus","blur","isFocused","MatListHarness","MatListItemHarness","MatNavListHarness","MatNavListItemHarness","href","getHref","activated","isActivated","getAttribute","MatSelectionListHarness","MatListOptionHarness","selectItems","_getItems","select","deselectItems","deselect","matches","filter","reduce","result","current","selected","isSelected","_beforeCheckbox","_beforeRadio","getCheckboxPosition","getRadioPosition","toggle"],"mappings":"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"}