| import { __awaiter } from 'tslib'; |
| import { ContentContainerComponentHarness, HarnessPredicate, ComponentHarness, parallel } from '@angular/cdk/testing'; |
| |
| /** |
| * @license |
| * Copyright Google LLC All Rights Reserved. |
| * |
| * Use of this source code is governed by an MIT-style license that can be |
| * found in the LICENSE file at https://angular.io/license |
| */ |
| /** Harness for interacting with a standard Angular Material tab-label in tests. */ |
| class MatTabHarness extends ContentContainerComponentHarness { |
| /** |
| * Gets a `HarnessPredicate` that can be used to search for a `MatTabHarness` that meets |
| * certain criteria. |
| * @param options Options for filtering which tab instances are considered a match. |
| * @return a `HarnessPredicate` configured with the given options. |
| */ |
| static with(options = {}) { |
| return new HarnessPredicate(MatTabHarness, options) |
| .addOption('label', options.label, (harness, label) => HarnessPredicate.stringMatches(harness.getLabel(), label)); |
| } |
| /** Gets the label of the tab. */ |
| getLabel() { |
| return __awaiter(this, void 0, void 0, function* () { |
| return (yield this.host()).text(); |
| }); |
| } |
| /** Gets the aria-label of the tab. */ |
| getAriaLabel() { |
| return __awaiter(this, void 0, void 0, function* () { |
| return (yield this.host()).getAttribute('aria-label'); |
| }); |
| } |
| /** Gets the value of the "aria-labelledby" attribute. */ |
| getAriaLabelledby() { |
| return __awaiter(this, void 0, void 0, function* () { |
| return (yield this.host()).getAttribute('aria-labelledby'); |
| }); |
| } |
| /** Whether the tab is selected. */ |
| isSelected() { |
| return __awaiter(this, void 0, void 0, function* () { |
| const hostEl = yield this.host(); |
| return (yield hostEl.getAttribute('aria-selected')) === 'true'; |
| }); |
| } |
| /** Whether the tab is disabled. */ |
| isDisabled() { |
| return __awaiter(this, void 0, void 0, function* () { |
| const hostEl = yield this.host(); |
| return (yield hostEl.getAttribute('aria-disabled')) === 'true'; |
| }); |
| } |
| /** Selects the given tab by clicking on the label. Tab cannot be selected if disabled. */ |
| select() { |
| return __awaiter(this, void 0, void 0, function* () { |
| yield (yield this.host()).click(); |
| }); |
| } |
| /** Gets the text content of the tab. */ |
| getTextContent() { |
| return __awaiter(this, void 0, void 0, function* () { |
| const contentId = yield this._getContentId(); |
| const contentEl = yield this.documentRootLocatorFactory().locatorFor(`#${contentId}`)(); |
| return contentEl.text(); |
| }); |
| } |
| /** |
| * Gets a `HarnessLoader` that can be used to load harnesses for components within the tab's |
| * content area. |
| * @deprecated Use `getHarness` or `getChildLoader` instead. |
| * @breaking-change 12.0.0 |
| */ |
| getHarnessLoaderForContent() { |
| return __awaiter(this, void 0, void 0, function* () { |
| return this.getRootHarnessLoader(); |
| }); |
| } |
| getRootHarnessLoader() { |
| return __awaiter(this, void 0, void 0, function* () { |
| const contentId = yield this._getContentId(); |
| return this.documentRootLocatorFactory().harnessLoaderFor(`#${contentId}`); |
| }); |
| } |
| /** Gets the element id for the content of the current tab. */ |
| _getContentId() { |
| return __awaiter(this, void 0, void 0, function* () { |
| const hostEl = yield this.host(); |
| // Tabs never have an empty "aria-controls" attribute. |
| return (yield hostEl.getAttribute('aria-controls')); |
| }); |
| } |
| } |
| /** The selector for the host element of a `MatTab` instance. */ |
| MatTabHarness.hostSelector = '.mat-tab-label'; |
| |
| /** |
| * @license |
| * Copyright Google LLC All Rights Reserved. |
| * |
| * Use of this source code is governed by an MIT-style license that can be |
| * found in the LICENSE file at https://angular.io/license |
| */ |
| /** Harness for interacting with a standard mat-tab-group in tests. */ |
| class MatTabGroupHarness extends ComponentHarness { |
| /** |
| * Gets a `HarnessPredicate` that can be used to search for a `MatTabGroupHarness` that meets |
| * certain criteria. |
| * @param options Options for filtering which tab group instances are considered a match. |
| * @return a `HarnessPredicate` configured with the given options. |
| */ |
| static with(options = {}) { |
| return new HarnessPredicate(MatTabGroupHarness, options) |
| .addOption('selectedTabLabel', options.selectedTabLabel, (harness, label) => __awaiter(this, void 0, void 0, function* () { |
| const selectedTab = yield harness.getSelectedTab(); |
| return HarnessPredicate.stringMatches(yield selectedTab.getLabel(), label); |
| })); |
| } |
| /** |
| * Gets the list of tabs in the tab group. |
| * @param filter Optionally filters which tabs are included. |
| */ |
| getTabs(filter = {}) { |
| return __awaiter(this, void 0, void 0, function* () { |
| return this.locatorForAll(MatTabHarness.with(filter))(); |
| }); |
| } |
| /** Gets the selected tab of the tab group. */ |
| getSelectedTab() { |
| return __awaiter(this, void 0, void 0, function* () { |
| const tabs = yield this.getTabs(); |
| const isSelected = yield parallel(() => tabs.map(t => t.isSelected())); |
| for (let i = 0; i < tabs.length; i++) { |
| if (isSelected[i]) { |
| return tabs[i]; |
| } |
| } |
| throw new Error('No selected tab could be found.'); |
| }); |
| } |
| /** |
| * Selects a tab in this tab group. |
| * @param filter An optional filter to apply to the child tabs. The first tab matching the filter |
| * will be selected. |
| */ |
| selectTab(filter = {}) { |
| return __awaiter(this, void 0, void 0, function* () { |
| const tabs = yield this.getTabs(filter); |
| if (!tabs.length) { |
| throw Error(`Cannot find mat-tab matching filter ${JSON.stringify(filter)}`); |
| } |
| yield tabs[0].select(); |
| }); |
| } |
| } |
| /** The selector for the host element of a `MatTabGroup` instance. */ |
| MatTabGroupHarness.hostSelector = '.mat-tab-group'; |
| |
| /** |
| * @license |
| * Copyright Google LLC All Rights Reserved. |
| * |
| * Use of this source code is governed by an MIT-style license that can be |
| * found in the LICENSE file at https://angular.io/license |
| */ |
| /** Harness for interacting with a standard Angular Material tab link in tests. */ |
| class MatTabLinkHarness extends ComponentHarness { |
| /** |
| * Gets a `HarnessPredicate` that can be used to search for a `MatTabLinkHarness` that meets |
| * certain criteria. |
| * @param options Options for filtering which tab link instances are considered a match. |
| * @return a `HarnessPredicate` configured with the given options. |
| */ |
| static with(options = {}) { |
| return new HarnessPredicate(MatTabLinkHarness, options) |
| .addOption('label', options.label, (harness, label) => HarnessPredicate.stringMatches(harness.getLabel(), label)); |
| } |
| /** Gets the label of the link. */ |
| getLabel() { |
| return __awaiter(this, void 0, void 0, function* () { |
| return (yield this.host()).text(); |
| }); |
| } |
| /** Whether the link is active. */ |
| isActive() { |
| return __awaiter(this, void 0, void 0, function* () { |
| const host = yield this.host(); |
| return host.hasClass('mat-tab-label-active'); |
| }); |
| } |
| /** Whether the link is disabled. */ |
| isDisabled() { |
| return __awaiter(this, void 0, void 0, function* () { |
| const host = yield this.host(); |
| return host.hasClass('mat-tab-disabled'); |
| }); |
| } |
| /** Clicks on the link. */ |
| click() { |
| return __awaiter(this, void 0, void 0, function* () { |
| yield (yield this.host()).click(); |
| }); |
| } |
| } |
| /** The selector for the host element of a `MatTabLink` instance. */ |
| MatTabLinkHarness.hostSelector = '.mat-tab-link'; |
| |
| /** |
| * @license |
| * Copyright Google LLC All Rights Reserved. |
| * |
| * Use of this source code is governed by an MIT-style license that can be |
| * found in the LICENSE file at https://angular.io/license |
| */ |
| /** Harness for interacting with a standard mat-tab-nav-bar in tests. */ |
| class MatTabNavBarHarness extends ComponentHarness { |
| /** |
| * Gets a `HarnessPredicate` that can be used to search for a `MatTabNavBar` that meets |
| * certain criteria. |
| * @param options Options for filtering which tab nav bar instances are considered a match. |
| * @return a `HarnessPredicate` configured with the given options. |
| */ |
| static with(options = {}) { |
| return new HarnessPredicate(MatTabNavBarHarness, options); |
| } |
| /** |
| * Gets the list of links in the nav bar. |
| * @param filter Optionally filters which links are included. |
| */ |
| getLinks(filter = {}) { |
| return __awaiter(this, void 0, void 0, function* () { |
| return this.locatorForAll(MatTabLinkHarness.with(filter))(); |
| }); |
| } |
| /** Gets the active link in the nav bar. */ |
| getActiveLink() { |
| return __awaiter(this, void 0, void 0, function* () { |
| const links = yield this.getLinks(); |
| const isActive = yield parallel(() => links.map(t => t.isActive())); |
| for (let i = 0; i < links.length; i++) { |
| if (isActive[i]) { |
| return links[i]; |
| } |
| } |
| throw new Error('No active link could be found.'); |
| }); |
| } |
| /** |
| * Clicks a link inside the nav bar. |
| * @param filter An optional filter to apply to the child link. The first link matching the filter |
| * will be clicked. |
| */ |
| clickLink(filter = {}) { |
| return __awaiter(this, void 0, void 0, function* () { |
| const tabs = yield this.getLinks(filter); |
| if (!tabs.length) { |
| throw Error(`Cannot find mat-tab-link matching filter ${JSON.stringify(filter)}`); |
| } |
| yield tabs[0].click(); |
| }); |
| } |
| } |
| /** The selector for the host element of a `MatTabNavBar` instance. */ |
| MatTabNavBarHarness.hostSelector = '.mat-tab-nav-bar'; |
| |
| /** |
| * @license |
| * Copyright Google LLC All Rights Reserved. |
| * |
| * Use of this source code is governed by an MIT-style license that can be |
| * found in the LICENSE file at https://angular.io/license |
| */ |
| |
| /** |
| * @license |
| * Copyright Google LLC All Rights Reserved. |
| * |
| * Use of this source code is governed by an MIT-style license that can be |
| * found in the LICENSE file at https://angular.io/license |
| */ |
| |
| export { MatTabGroupHarness, MatTabHarness, MatTabLinkHarness, MatTabNavBarHarness }; |
| //# sourceMappingURL=testing.js.map |