UNPKG

@angular/material

Version:
1 lines 19 kB
{"version":3,"file":"tabs-testing.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/tabs/testing/tab-harness.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/tabs/testing/tab-group-harness.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/tabs/testing/tab-link-harness.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/tabs/testing/tab-nav-panel-harness.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/tabs/testing/tab-nav-bar-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} from '@angular/cdk/testing';\nimport {TabHarnessFilters} from './tab-harness-filters';\n\n/** Harness for interacting with an Angular Material tab in tests. */\nexport class MatTabHarness extends ContentContainerComponentHarness<string> {\n /** The selector for the host element of a `MatTab` instance. */\n static hostSelector = '.mat-mdc-tab';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a tab with specific attributes.\n * @param options Options for filtering which tab instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with<T extends MatTabHarness>(\n this: ComponentHarnessConstructor<T>,\n options: TabHarnessFilters = {},\n ): HarnessPredicate<T> {\n return new HarnessPredicate(this, options)\n .addOption('label', options.label, (harness, label) =>\n HarnessPredicate.stringMatches(harness.getLabel(), label),\n )\n .addOption(\n 'selected',\n options.selected,\n async (harness, selected) => (await harness.isSelected()) == selected,\n );\n }\n\n /** Gets the label of the tab. */\n async getLabel(): Promise<string> {\n return (await this.host()).text();\n }\n\n /** Gets the aria-label of the tab. */\n async getAriaLabel(): Promise<string | null> {\n return (await this.host()).getAttribute('aria-label');\n }\n\n /** Gets the value of the \"aria-labelledby\" attribute. */\n async getAriaLabelledby(): Promise<string | null> {\n return (await this.host()).getAttribute('aria-labelledby');\n }\n\n /** Whether the tab is selected. */\n async isSelected(): Promise<boolean> {\n const hostEl = await this.host();\n return (await hostEl.getAttribute('aria-selected')) === 'true';\n }\n\n /** Whether the tab is disabled. */\n async isDisabled(): Promise<boolean> {\n const hostEl = await this.host();\n return (await hostEl.getAttribute('aria-disabled')) === 'true';\n }\n\n /** Selects the given tab by clicking on the label. Tab cannot be selected if disabled. */\n async select(): Promise<void> {\n await (await this.host()).click('center');\n }\n\n /** Gets the text content of the tab. */\n async getTextContent(): Promise<string> {\n const contentId = await this._getContentId();\n const contentEl = await this.documentRootLocatorFactory().locatorFor(`#${contentId}`)();\n return contentEl.text();\n }\n\n protected override async getRootHarnessLoader(): Promise<HarnessLoader> {\n const contentId = await this._getContentId();\n return this.documentRootLocatorFactory().harnessLoaderFor(`#${contentId}`);\n }\n\n /** Gets the element id for the content of the current tab. */\n private async _getContentId(): Promise<string> {\n const hostEl = await this.host();\n // Tabs never have an empty \"aria-controls\" attribute.\n return (await hostEl.getAttribute('aria-controls'))!;\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 {TabGroupHarnessFilters, TabHarnessFilters} from './tab-harness-filters';\nimport {MatTabHarness} from './tab-harness';\n\n/** Harness for interacting with a mat-tab-group in tests. */\nexport class MatTabGroupHarness extends ComponentHarness {\n /** The selector for the host element of a `MatTabGroup` instance. */\n static hostSelector = '.mat-mdc-tab-group';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a tab group with specific attributes.\n * @param options Options for filtering which tab group instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with<T extends MatTabGroupHarness>(\n this: ComponentHarnessConstructor<T>,\n options: TabGroupHarnessFilters = {},\n ): HarnessPredicate<T> {\n return new HarnessPredicate(this, options).addOption(\n 'selectedTabLabel',\n options.selectedTabLabel,\n async (harness, label) => {\n const selectedTab = await harness.getSelectedTab();\n return HarnessPredicate.stringMatches(await selectedTab.getLabel(), label);\n },\n );\n }\n\n /**\n * Gets the list of tabs in the tab group.\n * @param filter Optionally filters which tabs are included.\n */\n async getTabs(filter: TabHarnessFilters = {}): Promise<MatTabHarness[]> {\n return this.locatorForAll(MatTabHarness.with(filter))();\n }\n\n /** Gets the selected tab of the tab group. */\n async getSelectedTab(): Promise<MatTabHarness> {\n const tabs = await this.getTabs();\n const isSelected = await parallel(() => tabs.map(t => t.isSelected()));\n for (let i = 0; i < tabs.length; i++) {\n if (isSelected[i]) {\n return tabs[i];\n }\n }\n throw new Error('No selected tab could be found.');\n }\n\n /**\n * Selects a tab in this tab group.\n * @param filter An optional filter to apply to the child tabs. The first tab matching the filter\n * will be selected.\n */\n async selectTab(filter: TabHarnessFilters = {}): Promise<void> {\n const tabs = await this.getTabs(filter);\n if (!tabs.length) {\n throw Error(`Cannot find mat-tab matching filter ${JSON.stringify(filter)}`);\n }\n await tabs[0].select();\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} from '@angular/cdk/testing';\nimport {TabLinkHarnessFilters} from './tab-harness-filters';\n\n/** Harness for interacting with a Angular Material tab link in tests. */\nexport class MatTabLinkHarness extends ComponentHarness {\n /** The selector for the host element of a `MatTabLink` instance. */\n static hostSelector = '.mat-mdc-tab-link';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a tab link with specific attributes.\n * @param options Options for filtering which tab link instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with<T extends MatTabLinkHarness>(\n this: ComponentHarnessConstructor<T>,\n options: TabLinkHarnessFilters = {},\n ): HarnessPredicate<T> {\n return new HarnessPredicate(this, options).addOption('label', options.label, (harness, label) =>\n HarnessPredicate.stringMatches(harness.getLabel(), label),\n );\n }\n\n /** Gets the label of the link. */\n async getLabel(): Promise<string> {\n return (await this.host()).text();\n }\n\n /** Whether the link is active. */\n async isActive(): Promise<boolean> {\n const host = await this.host();\n return host.hasClass('mdc-tab--active');\n }\n\n /** Whether the link is disabled. */\n async isDisabled(): Promise<boolean> {\n const host = await this.host();\n return host.hasClass('mat-mdc-tab-disabled');\n }\n\n /** Clicks on the link. */\n async click(): Promise<void> {\n await (await this.host()).click();\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 ComponentHarnessConstructor,\n ContentContainerComponentHarness,\n HarnessPredicate,\n} from '@angular/cdk/testing';\nimport {TabNavPanelHarnessFilters} from './tab-harness-filters';\n\n/** Harness for interacting with a standard mat-tab-nav-panel in tests. */\nexport class MatTabNavPanelHarness extends ContentContainerComponentHarness {\n /** The selector for the host element of a `MatTabNavPanel` instance. */\n static hostSelector = '.mat-mdc-tab-nav-panel';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a tab nav panel with specific\n * attributes.\n * @param options Options for filtering which tab nav panel instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with<T extends MatTabNavPanelHarness>(\n this: ComponentHarnessConstructor<T>,\n options: TabNavPanelHarnessFilters = {},\n ): HarnessPredicate<T> {\n return new HarnessPredicate(this, options);\n }\n\n /** Gets the tab panel text content. */\n async getTextContent(): Promise<string> {\n return (await this.host()).text();\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 {\n TabNavBarHarnessFilters,\n TabNavPanelHarnessFilters,\n TabLinkHarnessFilters,\n} from './tab-harness-filters';\nimport {MatTabLinkHarness} from './tab-link-harness';\nimport {MatTabNavPanelHarness} from './tab-nav-panel-harness';\n\n/** Harness for interacting with a mat-tab-nav-bar in tests. */\nexport class MatTabNavBarHarness extends ComponentHarness {\n /** The selector for the host element of a `MatTabNavBar` instance. */\n static hostSelector = '.mat-mdc-tab-nav-bar';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a tab nav bar with specific\n * attributes.\n * @param options Options for filtering which tab nav bar instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with<T extends MatTabNavBarHarness>(\n this: ComponentHarnessConstructor<T>,\n options: TabNavBarHarnessFilters = {},\n ): HarnessPredicate<T> {\n return new HarnessPredicate(this, options);\n }\n\n /**\n * Gets the list of links in the nav bar.\n * @param filter Optionally filters which links are included.\n */\n async getLinks(filter: TabLinkHarnessFilters = {}): Promise<MatTabLinkHarness[]> {\n return this.locatorForAll(MatTabLinkHarness.with(filter))();\n }\n\n /** Gets the active link in the nav bar. */\n async getActiveLink(): Promise<MatTabLinkHarness> {\n const links = await this.getLinks();\n const isActive = await parallel(() => links.map(t => t.isActive()));\n for (let i = 0; i < links.length; i++) {\n if (isActive[i]) {\n return links[i];\n }\n }\n throw new Error('No active link could be found.');\n }\n\n /**\n * Clicks a link inside the nav bar.\n * @param filter An optional filter to apply to the child link. The first link matching the filter\n * will be clicked.\n */\n async clickLink(filter: TabLinkHarnessFilters = {}): Promise<void> {\n const tabs = await this.getLinks(filter);\n if (!tabs.length) {\n throw Error(`Cannot find mat-tab-link matching filter ${JSON.stringify(filter)}`);\n }\n await tabs[0].click();\n }\n\n /** Gets the panel associated with the nav bar. */\n async getPanel(): Promise<MatTabNavPanelHarness> {\n const link = await this.getActiveLink();\n const host = await link.host();\n const panelId = await host.getAttribute('aria-controls');\n if (!panelId) {\n throw Error('No panel is controlled by the nav bar.');\n }\n\n const filter: TabNavPanelHarnessFilters = {selector: `#${panelId}`};\n return await this.documentRootLocatorFactory().locatorFor(MatTabNavPanelHarness.with(filter))();\n }\n}\n"],"names":["MatTabHarness","ContentContainerComponentHarness","hostSelector","with","options","HarnessPredicate","addOption","label","harness","stringMatches","getLabel","selected","isSelected","host","text","getAriaLabel","getAttribute","getAriaLabelledby","hostEl","isDisabled","select","click","getTextContent","contentId","_getContentId","contentEl","documentRootLocatorFactory","locatorFor","getRootHarnessLoader","harnessLoaderFor","MatTabGroupHarness","ComponentHarness","selectedTabLabel","selectedTab","getSelectedTab","getTabs","filter","locatorForAll","tabs","parallel","map","t","i","length","Error","selectTab","JSON","stringify","MatTabLinkHarness","isActive","hasClass","MatTabNavPanelHarness","MatTabNavBarHarness","getLinks","getActiveLink","links","clickLink","getPanel","link","panelId","selector"],"mappings":"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"}