blob: de4e2b731354d111c3b28b3eb853f6ecc58835c8 [file] [log] [blame]
{"version":3,"file":"chips__testing.js","sources":["../../../../../../src/material/chips/testing/chip-remove-harness.ts","../../../../../../src/material/chips/testing/chip-harness.ts","../../../../../../src/material/chips/testing/chip-input-harness.ts","../../../../../../src/material/chips/testing/chip-list-harness.ts","../../../../../../src/material/chips/testing/chip-option-harness.ts","../../../../../../src/material/chips/testing/chip-listbox-harness.ts","../../../../../../src/material/chips/testing/public-api.ts","../../../../../../src/material/chips/testing/index.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {HarnessPredicate, ComponentHarness} from '@angular/cdk/testing';\nimport {ChipRemoveHarnessFilters} from './chip-harness-filters';\n\n/** Harness for interacting with a standard Material chip remove button in tests. */\nexport class MatChipRemoveHarness extends ComponentHarness {\n static hostSelector = '.mat-chip-remove';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a `MatChipRemoveHarness` that meets\n * certain criteria.\n * @param options Options for filtering which input instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with(options: ChipRemoveHarnessFilters = {}): HarnessPredicate<MatChipRemoveHarness> {\n return new HarnessPredicate(MatChipRemoveHarness, options);\n }\n\n /** Clicks the remove button. */\n async click(): Promise<void> {\n return (await this.host()).click();\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {ComponentHarness, HarnessPredicate, TestKey} from '@angular/cdk/testing';\nimport {ChipHarnessFilters, ChipRemoveHarnessFilters} from './chip-harness-filters';\nimport {MatChipRemoveHarness} from './chip-remove-harness';\n\n/** Harness for interacting with a standard selectable Angular Material chip in tests. */\nexport class MatChipHarness extends ComponentHarness {\n /** The selector for the host element of a `MatChip` instance. */\n static hostSelector = '.mat-chip';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a `MatChipHarness` that meets\n * certain criteria.\n * @param options Options for filtering which chip instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with(options: ChipHarnessFilters = {}): HarnessPredicate<MatChipHarness> {\n return new HarnessPredicate(MatChipHarness, options)\n .addOption('text', options.text,\n (harness, label) => HarnessPredicate.stringMatches(harness.getText(), label))\n .addOption('selected', options.selected,\n async (harness, selected) => (await harness.isSelected()) === selected);\n }\n\n /** Gets the text of the chip. */\n async getText(): Promise<string> {\n return (await this.host()).text({\n exclude: '.mat-chip-avatar, .mat-chip-trailing-icon, .mat-icon'\n });\n }\n\n /**\n * Whether the chip is selected.\n * @deprecated Use `MatChipOptionHarness.isSelected` instead.\n * @breaking-change 12.0.0\n */\n async isSelected(): Promise<boolean> {\n return (await this.host()).hasClass('mat-chip-selected');\n }\n\n /** Whether the chip is disabled. */\n async isDisabled(): Promise<boolean> {\n return (await this.host()).hasClass('mat-chip-disabled');\n }\n\n /**\n * Selects the given chip. Only applies if it's selectable.\n * @deprecated Use `MatChipOptionHarness.select` instead.\n * @breaking-change 12.0.0\n */\n async select(): Promise<void> {\n if (!(await this.isSelected())) {\n await this.toggle();\n }\n }\n\n /**\n * Deselects the given chip. Only applies if it's selectable.\n * @deprecated Use `MatChipOptionHarness.deselect` instead.\n * @breaking-change 12.0.0\n */\n async deselect(): Promise<void> {\n if (await this.isSelected()) {\n await this.toggle();\n }\n }\n\n /**\n * Toggles the selected state of the given chip. Only applies if it's selectable.\n * @deprecated Use `MatChipOptionHarness.toggle` instead.\n * @breaking-change 12.0.0\n */\n async toggle(): Promise<void> {\n return (await this.host()).sendKeys(' ');\n }\n\n /** Removes the given chip. Only applies if it's removable. */\n async remove(): Promise<void> {\n await (await this.host()).sendKeys(TestKey.DELETE);\n }\n\n /**\n * Gets the remove button inside of a chip.\n * @param filter Optionally filters which chips are included.\n */\n async getRemoveButton(filter: ChipRemoveHarnessFilters = {}): Promise<MatChipRemoveHarness> {\n return this.locatorFor(MatChipRemoveHarness.with(filter))();\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {HarnessPredicate, ComponentHarness, TestKey} from '@angular/cdk/testing';\nimport {ChipInputHarnessFilters} from './chip-harness-filters';\n\n/** Harness for interacting with a standard Material chip inputs in tests. */\nexport class MatChipInputHarness extends ComponentHarness {\n static hostSelector = '.mat-chip-input';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a `MatChipInputHarness` that meets\n * certain criteria.\n * @param options Options for filtering which input instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with(options: ChipInputHarnessFilters = {}): HarnessPredicate<MatChipInputHarness> {\n return new HarnessPredicate(MatChipInputHarness, options)\n .addOption('value', options.value, async (harness, value) => {\n return (await harness.getValue()) === value;\n })\n .addOption('placeholder', options.placeholder, async (harness, placeholder) => {\n return (await harness.getPlaceholder()) === placeholder;\n });\n }\n\n /** Whether the input is disabled. */\n async isDisabled(): Promise<boolean> {\n return (await this.host()).getProperty('disabled')!;\n }\n\n /** Whether the input is required. */\n async isRequired(): Promise<boolean> {\n return (await this.host()).getProperty('required')!;\n }\n\n /** Gets the value of the input. */\n async getValue(): Promise<string> {\n // The \"value\" property of the native input is never undefined.\n return (await (await this.host()).getProperty('value'))!;\n }\n\n /** Gets the placeholder of the input. */\n async getPlaceholder(): Promise<string> {\n return (await (await this.host()).getProperty('placeholder'));\n }\n\n /**\n * Focuses the input and returns a promise that indicates when the\n * action is complete.\n */\n async focus(): Promise<void> {\n return (await this.host()).focus();\n }\n\n /**\n * Blurs the input and returns a promise that indicates when the\n * action is complete.\n */\n async blur(): Promise<void> {\n return (await this.host()).blur();\n }\n\n /** Whether the input is focused. */\n async isFocused(): Promise<boolean> {\n return (await this.host()).isFocused();\n }\n\n /**\n * Sets the value of the input. The value will be set by simulating\n * keypresses that correspond to the given value.\n */\n async setValue(newValue: string): Promise<void> {\n const inputEl = await this.host();\n await inputEl.clear();\n\n // We don't want to send keys for the value if the value is an empty\n // string in order to clear the value. Sending keys with an empty string\n // still results in unnecessary focus events.\n if (newValue) {\n await inputEl.sendKeys(newValue);\n }\n }\n\n /** Sends a chip separator key to the input element. */\n async sendSeparatorKey(key: TestKey | string): Promise<void> {\n const inputEl = await this.host();\n return inputEl.sendKeys(key);\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {ComponentHarness, HarnessPredicate, parallel} from '@angular/cdk/testing';\nimport {MatChipHarness} from './chip-harness';\nimport {MatChipInputHarness} from './chip-input-harness';\nimport {\n ChipListHarnessFilters,\n ChipHarnessFilters,\n ChipInputHarnessFilters,\n} from './chip-harness-filters';\n\n/** Base class for chip list harnesses. */\nexport abstract class _MatChipListHarnessBase extends ComponentHarness {\n /** Gets whether the chip list is disabled. */\n async isDisabled(): Promise<boolean> {\n return await (await this.host()).getAttribute('aria-disabled') === 'true';\n }\n\n /** Gets whether the chip list is required. */\n async isRequired(): Promise<boolean> {\n return await (await this.host()).getAttribute('aria-required') === 'true';\n }\n\n /** Gets whether the chip list is invalid. */\n async isInvalid(): Promise<boolean> {\n return await (await this.host()).getAttribute('aria-invalid') === 'true';\n }\n\n /** Gets whether the chip list is in multi selection mode. */\n async isMultiple(): Promise<boolean> {\n return await (await this.host()).getAttribute('aria-multiselectable') === 'true';\n }\n\n /** Gets whether the orientation of the chip list. */\n async getOrientation(): Promise<'horizontal' | 'vertical'> {\n const orientation = await (await this.host()).getAttribute('aria-orientation');\n return orientation === 'vertical' ? 'vertical' : 'horizontal';\n }\n}\n\n/** Harness for interacting with a standard chip list in tests. */\nexport class MatChipListHarness extends _MatChipListHarnessBase {\n /** The selector for the host element of a `MatChipList` instance. */\n static hostSelector = '.mat-chip-list';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a `MatChipListHarness` that meets\n * certain criteria.\n * @param options Options for filtering which chip list instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with(options: ChipListHarnessFilters = {}): HarnessPredicate<MatChipListHarness> {\n return new HarnessPredicate(MatChipListHarness, options);\n }\n\n /**\n * Gets the list of chips inside the chip list.\n * @param filter Optionally filters which chips are included.\n */\n async getChips(filter: ChipHarnessFilters = {}): Promise<MatChipHarness[]> {\n return this.locatorForAll(MatChipHarness.with(filter))();\n }\n\n /**\n * Selects a chip inside the chip list.\n * @param filter An optional filter to apply to the child chips.\n * All the chips matching the filter will be selected.\n * @deprecated Use `MatChipListboxHarness.selectChips` instead.\n * @breaking-change 12.0.0\n */\n async selectChips(filter: ChipHarnessFilters = {}): Promise<void> {\n const chips = await this.getChips(filter);\n if (!chips.length) {\n throw Error(`Cannot find chip matching filter ${JSON.stringify(filter)}`);\n }\n await parallel(() => chips.map(chip => chip.select()));\n }\n\n /**\n * Gets the `MatChipInput` inside the chip list.\n * @param filter Optionally filters which chip input is included.\n */\n async getInput(filter: ChipInputHarnessFilters = {}): Promise<MatChipInputHarness> {\n // The input isn't required to be a descendant of the chip list so we have to look it up by id.\n const inputId = await (await this.host()).getAttribute('data-mat-chip-input');\n\n if (!inputId) {\n throw Error(`Chip list is not associated with an input`);\n }\n\n return this.documentRootLocatorFactory().locatorFor(\n MatChipInputHarness.with({...filter, selector: `#${inputId}`}))();\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {HarnessPredicate} from '@angular/cdk/testing';\nimport {MatChipHarness} from './chip-harness';\nimport {ChipOptionHarnessFilters} from './chip-harness-filters';\n\nexport class MatChipOptionHarness extends MatChipHarness {\n /** The selector for the host element of a selectable chip instance. */\n static hostSelector = '.mat-chip';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a `MatChipOptionHarness`\n * that meets certain criteria.\n * @param options Options for filtering which chip instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with(options: ChipOptionHarnessFilters = {}):\n HarnessPredicate<MatChipOptionHarness> {\n return new HarnessPredicate(MatChipOptionHarness, options)\n .addOption('text', options.text,\n (harness, label) => HarnessPredicate.stringMatches(harness.getText(), label))\n .addOption('selected', options.selected,\n async (harness, selected) => (await harness.isSelected()) === selected);\n }\n\n /** Whether the chip is selected. */\n async isSelected(): Promise<boolean> {\n return (await this.host()).hasClass('mat-chip-selected');\n }\n\n /** Selects the given chip. Only applies if it's selectable. */\n async select(): Promise<void> {\n if (!(await this.isSelected())) {\n await this.toggle();\n }\n }\n\n /** Deselects the given chip. Only applies if it's selectable. */\n async deselect(): Promise<void> {\n if (await this.isSelected()) {\n await this.toggle();\n }\n }\n\n /** Toggles the selected state of the given chip. */\n async toggle(): Promise<void> {\n return (await this.host()).sendKeys(' ');\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {HarnessPredicate, parallel} from '@angular/cdk/testing';\nimport {MatChipOptionHarness} from './chip-option-harness';\nimport {\n ChipListboxHarnessFilters,\n ChipOptionHarnessFilters,\n} from './chip-harness-filters';\nimport {_MatChipListHarnessBase} from './chip-list-harness';\n\n/** Harness for interacting with a standard selectable chip list in tests. */\nexport class MatChipListboxHarness extends _MatChipListHarnessBase {\n /** The selector for the host element of a `MatChipList` instance. */\n static hostSelector = '.mat-chip-list';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a `MatChipListHarness` that meets\n * certain criteria.\n * @param options Options for filtering which chip list instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with(options: ChipListboxHarnessFilters = {}):\n HarnessPredicate<MatChipListboxHarness> {\n return new HarnessPredicate(MatChipListboxHarness, options);\n }\n\n /**\n * Gets the list of chips inside the chip list.\n * @param filter Optionally filters which chips are included.\n */\n async getChips(filter: ChipOptionHarnessFilters = {}): Promise<MatChipOptionHarness[]> {\n return this.locatorForAll(MatChipOptionHarness.with(filter))();\n }\n\n /**\n * Selects a chip inside the chip list.\n * @param filter An optional filter to apply to the child chips.\n * All the chips matching the filter will be selected.\n */\n async selectChips(filter: ChipOptionHarnessFilters = {}): Promise<void> {\n const chips = await this.getChips(filter);\n if (!chips.length) {\n throw Error(`Cannot find chip matching filter ${JSON.stringify(filter)}`);\n }\n await parallel(() => chips.map(chip => chip.select()));\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './chip-harness';\nexport * from './chip-harness-filters';\nexport {MatChipListHarness} from './chip-list-harness';\nexport * from './chip-input-harness';\nexport * from './chip-remove-harness';\nexport * from './chip-option-harness';\nexport * from './chip-listbox-harness';\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}