You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
268 lines
10 KiB
268 lines
10 KiB
export * from '@angular/material/form-field/testing/control';
|
|
import { __awaiter } from 'tslib';
|
|
import { ComponentHarness, parallel, HarnessPredicate } from '@angular/cdk/testing';
|
|
import { MatDatepickerInputHarness, MatDateRangeInputHarness } from '@angular/material/datepicker/testing';
|
|
import { MatInputHarness } from '@angular/material/input/testing';
|
|
import { MatSelectHarness } from '@angular/material/select/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 _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._errors();
|
|
return parallel(() => errors.map(e => e.text()));
|
|
});
|
|
}
|
|
/** 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 a reference to the container element which contains all projected
|
|
* prefixes of the form-field.
|
|
* @deprecated Use `getPrefixText` instead.
|
|
* @breaking-change 11.0.0
|
|
*/
|
|
getHarnessLoaderForPrefix() {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
return this._prefixContainer();
|
|
});
|
|
}
|
|
/** 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 a reference to the container element which contains all projected
|
|
* suffixes of the form-field.
|
|
* @deprecated Use `getSuffixText` instead.
|
|
* @breaking-change 11.0.0
|
|
*/
|
|
getHarnessLoaderForSuffix() {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
return this._suffixContainer();
|
|
});
|
|
}
|
|
/** 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 standard Material form-field's in tests. */
|
|
class MatFormFieldHarness extends _MatFormFieldHarnessBase {
|
|
constructor() {
|
|
super(...arguments);
|
|
this._prefixContainer = this.locatorForOptional('.mat-form-field-prefix');
|
|
this._suffixContainer = this.locatorForOptional('.mat-form-field-suffix');
|
|
this._label = this.locatorForOptional('.mat-form-field-label');
|
|
this._errors = this.locatorForAll('.mat-error');
|
|
this._hints = this.locatorForAll('mat-hint, .mat-hint');
|
|
this._inputControl = this.locatorForOptional(MatInputHarness);
|
|
this._selectControl = this.locatorForOptional(MatSelectHarness);
|
|
this._datepickerInputControl = this.locatorForOptional(MatDatepickerInputHarness);
|
|
this._dateRangeInputControl = this.locatorForOptional(MatDateRangeInputHarness);
|
|
}
|
|
/**
|
|
* Gets a `HarnessPredicate` that can be used to search for a `MatFormFieldHarness` that meets
|
|
* certain criteria.
|
|
* @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(MatFormFieldHarness, 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 hostClasses = yield (yield this.host()).getAttribute('class');
|
|
if (hostClasses !== null) {
|
|
const appearanceMatch = hostClasses.match(/mat-form-field-appearance-(legacy|standard|fill|outline)(?:$| )/);
|
|
if (appearanceMatch) {
|
|
return appearanceMatch[1];
|
|
}
|
|
}
|
|
throw Error('Could not determine appearance of form-field.');
|
|
});
|
|
}
|
|
/** Whether the form-field has a label. */
|
|
hasLabel() {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
return (yield this.host()).hasClass('mat-form-field-has-label');
|
|
});
|
|
}
|
|
/** Whether the label is currently floating. */
|
|
isLabelFloating() {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
const host = yield this.host();
|
|
const [hasLabel, shouldFloat] = yield parallel(() => [
|
|
this.hasLabel(),
|
|
host.hasClass('mat-form-field-should-float'),
|
|
]);
|
|
// If there is no label, the label conceptually can never float. The `should-float` class
|
|
// is just always set regardless of whether the label is displayed or not.
|
|
return hasLabel && shouldFloat;
|
|
});
|
|
}
|
|
}
|
|
MatFormFieldHarness.hostSelector = '.mat-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
|
|
*/
|
|
|
|
/**
|
|
* @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 { MatFormFieldHarness, _MatFormFieldHarnessBase };
|
|
//# sourceMappingURL=testing.js.map
|