import { __awaiter } from 'tslib'; import { ComponentHarness, HarnessPredicate, parallel } from '@angular/cdk/testing'; import { coerceNumberProperty, coerceBooleanProperty } from '@angular/cdk/coercion'; /** * @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-slider in tests. */ class MatSliderHarness extends ComponentHarness { constructor() { super(...arguments); this._textLabel = this.locatorFor('.mat-slider-thumb-label-text'); this._wrapper = this.locatorFor('.mat-slider-wrapper'); } /** * Gets a `HarnessPredicate` that can be used to search for a `MatSliderHarness` that meets * certain criteria. * @param options Options for filtering which slider instances are considered a match. * @return a `HarnessPredicate` configured with the given options. */ static with(options = {}) { return new HarnessPredicate(MatSliderHarness, options); } /** Gets the slider's id. */ getId() { return __awaiter(this, void 0, void 0, function* () { const id = yield (yield this.host()).getAttribute('id'); // In case no id has been specified, the "id" property always returns // an empty string. To make this method more explicit, we return null. return id !== '' ? id : null; }); } /** * Gets the current display value of the slider. Returns a null promise if the thumb label is * disabled. */ getDisplayValue() { return __awaiter(this, void 0, void 0, function* () { const [host, textLabel] = yield parallel(() => [this.host(), this._textLabel()]); if (yield host.hasClass('mat-slider-thumb-label-showing')) { return textLabel.text(); } return null; }); } /** Gets the current percentage value of the slider. */ getPercentage() { return __awaiter(this, void 0, void 0, function* () { return this._calculatePercentage(yield this.getValue()); }); } /** Gets the current value of the slider. */ getValue() { return __awaiter(this, void 0, void 0, function* () { return coerceNumberProperty(yield (yield this.host()).getAttribute('aria-valuenow')); }); } /** Gets the maximum value of the slider. */ getMaxValue() { return __awaiter(this, void 0, void 0, function* () { return coerceNumberProperty(yield (yield this.host()).getAttribute('aria-valuemax')); }); } /** Gets the minimum value of the slider. */ getMinValue() { return __awaiter(this, void 0, void 0, function* () { return coerceNumberProperty(yield (yield this.host()).getAttribute('aria-valuemin')); }); } /** Whether the slider is disabled. */ isDisabled() { return __awaiter(this, void 0, void 0, function* () { const disabled = (yield this.host()).getAttribute('aria-disabled'); return coerceBooleanProperty(yield disabled); }); } /** Gets the orientation of the slider. */ getOrientation() { return __awaiter(this, void 0, void 0, function* () { // "aria-orientation" will always be set to either "horizontal" or "vertical". return (yield this.host()).getAttribute('aria-orientation'); }); } /** * Sets the value of the slider by clicking on the slider track. * * Note that in rare cases the value cannot be set to the exact specified value. This * can happen if not every value of the slider maps to a single pixel that could be * clicked using mouse interaction. In such cases consider using the keyboard to * select the given value or expand the slider's size for a better user experience. */ setValue(value) { return __awaiter(this, void 0, void 0, function* () { const [sliderEl, wrapperEl, orientation] = yield parallel(() => [this.host(), this._wrapper(), this.getOrientation()]); let percentage = yield this._calculatePercentage(value); const { height, width } = yield wrapperEl.getDimensions(); const isVertical = orientation === 'vertical'; // In case the slider is inverted in LTR mode or not inverted in RTL mode, // we need to invert the percentage so that the proper value is set. if (yield sliderEl.hasClass('mat-slider-invert-mouse-coords')) { percentage = 1 - percentage; } // We need to round the new coordinates because creating fake DOM // events will cause the coordinates to be rounded down. const relativeX = isVertical ? 0 : Math.round(width * percentage); const relativeY = isVertical ? Math.round(height * percentage) : 0; yield wrapperEl.click(relativeX, relativeY); }); } /** Focuses the slider. */ focus() { return __awaiter(this, void 0, void 0, function* () { return (yield this.host()).focus(); }); } /** Blurs the slider. */ blur() { return __awaiter(this, void 0, void 0, function* () { return (yield this.host()).blur(); }); } /** Whether the slider is focused. */ isFocused() { return __awaiter(this, void 0, void 0, function* () { return (yield this.host()).isFocused(); }); } /** Calculates the percentage of the given value. */ _calculatePercentage(value) { return __awaiter(this, void 0, void 0, function* () { const [min, max] = yield parallel(() => [this.getMinValue(), this.getMaxValue()]); return (value - min) / (max - min); }); } } /** The selector for the host element of a `MatSlider` instance. */ MatSliderHarness.hostSelector = '.mat-slider'; /** * @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 { MatSliderHarness }; //# sourceMappingURL=testing.js.map