import { __awaiter } from 'tslib'; import { coerceBooleanProperty } from '@angular/cdk/coercion'; import { ComponentHarness, HarnessPredicate } from '@angular/cdk/testing'; import { MatOptionHarness, MatOptgroupHarness } from '@angular/material/core/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 */ class _MatAutocompleteHarnessBase extends ComponentHarness { constructor() { super(...arguments); this._documentRootLocator = this.documentRootLocatorFactory(); } /** Gets the value of the autocomplete input. */ getValue() { return __awaiter(this, void 0, void 0, function* () { return (yield this.host()).getProperty('value'); }); } /** Whether the autocomplete input is disabled. */ isDisabled() { return __awaiter(this, void 0, void 0, function* () { const disabled = (yield this.host()).getAttribute('disabled'); return coerceBooleanProperty(yield disabled); }); } /** Focuses the autocomplete input. */ focus() { return __awaiter(this, void 0, void 0, function* () { return (yield this.host()).focus(); }); } /** Blurs the autocomplete input. */ blur() { return __awaiter(this, void 0, void 0, function* () { return (yield this.host()).blur(); }); } /** Whether the autocomplete input is focused. */ isFocused() { return __awaiter(this, void 0, void 0, function* () { return (yield this.host()).isFocused(); }); } /** Enters text into the autocomplete. */ enterText(value) { return __awaiter(this, void 0, void 0, function* () { return (yield this.host()).sendKeys(value); }); } /** Gets the options inside the autocomplete panel. */ getOptions(filters) { return __awaiter(this, void 0, void 0, function* () { return this._documentRootLocator.locatorForAll(this._optionClass.with(Object.assign(Object.assign({}, (filters || {})), { ancestor: yield this._getPanelSelector() })))(); }); } /** Gets the option groups inside the autocomplete panel. */ getOptionGroups(filters) { return __awaiter(this, void 0, void 0, function* () { return this._documentRootLocator.locatorForAll(this._optionGroupClass.with(Object.assign(Object.assign({}, (filters || {})), { ancestor: yield this._getPanelSelector() })))(); }); } /** Selects the first option matching the given filters. */ selectOption(filters) { return __awaiter(this, void 0, void 0, function* () { yield this.focus(); // Focus the input to make sure the autocomplete panel is shown. const options = yield this.getOptions(filters); if (!options.length) { throw Error(`Could not find a mat-option matching ${JSON.stringify(filters)}`); } yield options[0].click(); }); } /** Whether the autocomplete is open. */ isOpen() { return __awaiter(this, void 0, void 0, function* () { const panel = yield this._getPanel(); return !!panel && (yield panel.hasClass(`${this._prefix}-autocomplete-visible`)); }); } /** Gets the panel associated with this autocomplete trigger. */ _getPanel() { return __awaiter(this, void 0, void 0, function* () { // Technically this is static, but it needs to be in a // function, because the autocomplete's panel ID can changed. return this._documentRootLocator.locatorForOptional(yield this._getPanelSelector())(); }); } /** Gets the selector that can be used to find the autocomplete trigger's panel. */ _getPanelSelector() { return __awaiter(this, void 0, void 0, function* () { return `#${(yield (yield this.host()).getAttribute('aria-owns'))}`; }); } } /** Harness for interacting with a standard mat-autocomplete in tests. */ class MatAutocompleteHarness extends _MatAutocompleteHarnessBase { constructor() { super(...arguments); this._prefix = 'mat'; this._optionClass = MatOptionHarness; this._optionGroupClass = MatOptgroupHarness; } /** * Gets a `HarnessPredicate` that can be used to search for a `MatAutocompleteHarness` that meets * certain criteria. * @param options Options for filtering which autocomplete instances are considered a match. * @return a `HarnessPredicate` configured with the given options. */ static with(options = {}) { return new HarnessPredicate(MatAutocompleteHarness, options) .addOption('value', options.value, (harness, value) => HarnessPredicate.stringMatches(harness.getValue(), value)); } } /** The selector for the host element of a `MatAutocomplete` instance. */ MatAutocompleteHarness.hostSelector = '.mat-autocomplete-trigger'; /** * @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 */ /** * @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 { MatAutocompleteHarness, _MatAutocompleteHarnessBase }; //# sourceMappingURL=testing.js.map