@angular/material
Version:
Angular Material
258 lines (252 loc) • 10.5 kB
JavaScript
export { MatFormFieldControlHarness } from '@angular/material/form-field/testing/control';
import { __awaiter } from 'tslib';
import { ComponentHarness, HarnessPredicate, parallel } from '@angular/cdk/testing';
import { MatInputHarness } from '@angular/material/input/testing';
import { MatSelectHarness } from '@angular/material/select/testing';
import { MatDatepickerInputHarness, MatDateRangeInputHarness } from '@angular/material/datepicker/testing';
class _MatErrorHarnessBase extends ComponentHarness {
/** Gets a promise for the error's label text. */
getText() {
return __awaiter(this, void 0, void 0, function* () {
return (yield this.host()).text();
});
}
static _getErrorPredicate(type, options) {
return new HarnessPredicate(type, options).addOption('text', options.text, (harness, text) => HarnessPredicate.stringMatches(harness.getText(), text));
}
}
/** Harness for interacting with an MDC-based `mat-error` in tests. */
class MatErrorHarness extends _MatErrorHarnessBase {
/**
* Gets a `HarnessPredicate` that can be used to search for an error with specific
* attributes.
* @param options Options for filtering which error instances are considered a match.
* @return a `HarnessPredicate` configured with the given options.
*/
static with(options = {}) {
return _MatErrorHarnessBase._getErrorPredicate(this, options);
}
}
MatErrorHarness.hostSelector = '.mat-mdc-form-field-error';
class _MatFormFieldHarnessBase extends ComponentHarness {
/** Gets the label of the form-field. */
getLabel() {
return __awaiter(this, void 0, void 0, function* () {
const labelEl = yield this._label();
return labelEl ? labelEl.text() : null;
});
}
/** Whether the form-field has errors. */
hasErrors() {
return __awaiter(this, void 0, void 0, function* () {
return (yield this.getTextErrors()).length > 0;
});
}
/** Whether the form-field is disabled. */
isDisabled() {
return __awaiter(this, void 0, void 0, function* () {
return (yield this.host()).hasClass('mat-form-field-disabled');
});
}
/** Whether the form-field is currently autofilled. */
isAutofilled() {
return __awaiter(this, void 0, void 0, function* () {
return (yield this.host()).hasClass('mat-form-field-autofilled');
});
}
// Implementation of the "getControl" method overload signatures.
getControl(type) {
return __awaiter(this, void 0, void 0, function* () {
if (type) {
return this.locatorForOptional(type)();
}
const [select, input, datepickerInput, dateRangeInput] = yield parallel(() => [
this._selectControl(),
this._inputControl(),
this._datepickerInputControl(),
this._dateRangeInputControl(),
]);
// Match the datepicker inputs first since they can also have a `MatInput`.
return datepickerInput || dateRangeInput || select || input;
});
}
/** Gets the theme color of the form-field. */
getThemeColor() {
return __awaiter(this, void 0, void 0, function* () {
const hostEl = yield this.host();
const [isAccent, isWarn] = yield parallel(() => {
return [hostEl.hasClass('mat-accent'), hostEl.hasClass('mat-warn')];
});
if (isAccent) {
return 'accent';
}
else if (isWarn) {
return 'warn';
}
return 'primary';
});
}
/** Gets error messages which are currently displayed in the form-field. */
getTextErrors() {
return __awaiter(this, void 0, void 0, function* () {
const errors = yield this.getErrors();
return parallel(() => errors.map(e => e.getText()));
});
}
/** Gets all of the error harnesses in the form field. */
getErrors(filter = {}) {
return __awaiter(this, void 0, void 0, function* () {
return this.locatorForAll(this._errorHarness.with(filter))();
});
}
/** Gets hint messages which are currently displayed in the form-field. */
getTextHints() {
return __awaiter(this, void 0, void 0, function* () {
const hints = yield this._hints();
return parallel(() => hints.map(e => e.text()));
});
}
/** Gets the text inside the prefix element. */
getPrefixText() {
return __awaiter(this, void 0, void 0, function* () {
const prefix = yield this._prefixContainer();
return prefix ? prefix.text() : '';
});
}
/** Gets the text inside the suffix element. */
getSuffixText() {
return __awaiter(this, void 0, void 0, function* () {
const suffix = yield this._suffixContainer();
return suffix ? suffix.text() : '';
});
}
/**
* Whether the form control has been touched. Returns "null"
* if no form control is set up.
*/
isControlTouched() {
return __awaiter(this, void 0, void 0, function* () {
if (!(yield this._hasFormControl())) {
return null;
}
return (yield this.host()).hasClass('ng-touched');
});
}
/**
* Whether the form control is dirty. Returns "null"
* if no form control is set up.
*/
isControlDirty() {
return __awaiter(this, void 0, void 0, function* () {
if (!(yield this._hasFormControl())) {
return null;
}
return (yield this.host()).hasClass('ng-dirty');
});
}
/**
* Whether the form control is valid. Returns "null"
* if no form control is set up.
*/
isControlValid() {
return __awaiter(this, void 0, void 0, function* () {
if (!(yield this._hasFormControl())) {
return null;
}
return (yield this.host()).hasClass('ng-valid');
});
}
/**
* Whether the form control is pending validation. Returns "null"
* if no form control is set up.
*/
isControlPending() {
return __awaiter(this, void 0, void 0, function* () {
if (!(yield this._hasFormControl())) {
return null;
}
return (yield this.host()).hasClass('ng-pending');
});
}
/** Checks whether the form-field control has set up a form control. */
_hasFormControl() {
return __awaiter(this, void 0, void 0, function* () {
const hostEl = yield this.host();
// If no form "NgControl" is bound to the form-field control, the form-field
// is not able to forward any control status classes. Therefore if either the
// "ng-touched" or "ng-untouched" class is set, we know that it has a form control
const [isTouched, isUntouched] = yield parallel(() => [
hostEl.hasClass('ng-touched'),
hostEl.hasClass('ng-untouched'),
]);
return isTouched || isUntouched;
});
}
}
/** Harness for interacting with a MDC-based form-field's in tests. */
class MatFormFieldHarness extends _MatFormFieldHarnessBase {
constructor() {
super(...arguments);
this._prefixContainer = this.locatorForOptional('.mat-mdc-form-field-text-prefix');
this._suffixContainer = this.locatorForOptional('.mat-mdc-form-field-text-suffix');
this._label = this.locatorForOptional('.mdc-floating-label');
this._hints = this.locatorForAll('.mat-mdc-form-field-hint');
this._inputControl = this.locatorForOptional(MatInputHarness);
this._selectControl = this.locatorForOptional(MatSelectHarness);
this._datepickerInputControl = this.locatorForOptional(MatDatepickerInputHarness);
this._dateRangeInputControl = this.locatorForOptional(MatDateRangeInputHarness);
this._errorHarness = MatErrorHarness;
this._mdcTextField = this.locatorFor('.mat-mdc-text-field-wrapper');
}
/**
* Gets a `HarnessPredicate` that can be used to search for a form field with specific
* attributes.
* @param options Options for filtering which form field instances are considered a match.
* @return a `HarnessPredicate` configured with the given options.
*/
static with(options = {}) {
return new HarnessPredicate(this, options)
.addOption('floatingLabelText', options.floatingLabelText, (harness, text) => __awaiter(this, void 0, void 0, function* () { return HarnessPredicate.stringMatches(yield harness.getLabel(), text); }))
.addOption('hasErrors', options.hasErrors, (harness, hasErrors) => __awaiter(this, void 0, void 0, function* () { return (yield harness.hasErrors()) === hasErrors; }));
}
/** Gets the appearance of the form-field. */
getAppearance() {
return __awaiter(this, void 0, void 0, function* () {
const textFieldEl = yield this._mdcTextField();
if (yield textFieldEl.hasClass('mdc-text-field--outlined')) {
return 'outline';
}
return 'fill';
});
}
/** Whether the form-field has a label. */
hasLabel() {
return __awaiter(this, void 0, void 0, function* () {
return (yield this._label()) !== null;
});
}
/** Whether the label is currently floating. */
isLabelFloating() {
return __awaiter(this, void 0, void 0, function* () {
const labelEl = yield this._label();
return labelEl !== null ? yield labelEl.hasClass('mdc-floating-label--float-above') : false;
});
}
}
MatFormFieldHarness.hostSelector = '.mat-mdc-form-field';
/**
* @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 { MatErrorHarness, MatFormFieldHarness, _MatErrorHarnessBase, _MatFormFieldHarnessBase };
//# sourceMappingURL=testing.mjs.map