{"version":3,"file":"snack-bar__testing.js","sources":["../../../../../../src/material/snack-bar/testing/snack-bar-harness.ts","../../../../../../src/material/snack-bar/testing/snack-bar-harness-filters.ts","../../../../../../src/material/snack-bar/testing/public-api.ts","../../../../../../src/material/snack-bar/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 {AriaLivePoliteness} from '@angular/cdk/a11y';\nimport {ContentContainerComponentHarness, HarnessPredicate, parallel} from '@angular/cdk/testing';\nimport {SnackBarHarnessFilters} from './snack-bar-harness-filters';\n\n/** Harness for interacting with a standard mat-snack-bar in tests. */\nexport class MatSnackBarHarness extends ContentContainerComponentHarness {\n // Developers can provide a custom component or template for the\n // snackbar. The canonical snack-bar parent is the \"MatSnackBarContainer\".\n /** The selector for the host element of a `MatSnackBar` instance. */\n static hostSelector = '.mat-snack-bar-container';\n protected _messageSelector = '.mat-simple-snackbar > span';\n protected _actionButtonSelector = '.mat-simple-snackbar-action > button';\n private _snackBarLiveRegion = this.locatorFor('[aria-live]');\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a `MatSnackBarHarness` that meets\n * certain criteria.\n * @param options Options for filtering which snack bar instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with(options: SnackBarHarnessFilters = {}): HarnessPredicate {\n return new HarnessPredicate(MatSnackBarHarness, options);\n }\n\n /**\n * Gets the role of the snack-bar. The role of a snack-bar is determined based\n * on the ARIA politeness specified in the snack-bar config.\n * @deprecated Use `getAriaLive` instead.\n * @breaking-change 13.0.0\n */\n async getRole(): Promise<'alert'|'status'|null> {\n return (await this.host()).getAttribute('role') as Promise<'alert'|'status'|null>;\n }\n\n /**\n * Gets the aria-live of the snack-bar's live region. The aria-live of a snack-bar is\n * determined based on the ARIA politeness specified in the snack-bar config.\n */\n async getAriaLive(): Promise {\n return (await this._snackBarLiveRegion())\n .getAttribute('aria-live') as Promise;\n }\n\n /**\n * Whether the snack-bar has an action. Method cannot be used for snack-bar's with custom content.\n */\n async hasAction(): Promise {\n await this._assertContentAnnotated();\n return (await this._getActionButton()) !== null;\n }\n\n /**\n * Gets the description of the snack-bar. Method cannot be used for snack-bar's without action or\n * with custom content.\n */\n async getActionDescription(): Promise {\n await this._assertHasAction();\n return (await this._getActionButton())!.text();\n }\n\n\n /**\n * Dismisses the snack-bar by clicking the action button. Method cannot be used for snack-bar's\n * without action or with custom content.\n */\n async dismissWithAction(): Promise {\n await this._assertHasAction();\n await (await this._getActionButton())!.click();\n }\n\n /**\n * Gets the message of the snack-bar. Method cannot be used for snack-bar's with custom content.\n */\n async getMessage(): Promise {\n await this._assertContentAnnotated();\n return (await this.locatorFor(this._messageSelector)()).text();\n }\n\n /** Gets whether the snack-bar has been dismissed. */\n async isDismissed(): Promise {\n // We consider the snackbar dismissed if it's not in the DOM. We can assert that the\n // element isn't in the DOM by seeing that its width and height are zero.\n\n const host = await this.host();\n const [exit, dimensions] = await parallel(() => [\n // The snackbar container is marked with the \"exit\" attribute after it has been dismissed\n // but before the animation has finished (after which it's removed from the DOM).\n host.getAttribute('mat-exit'),\n host.getDimensions(),\n ]);\n\n return exit != null || (!!dimensions && dimensions.height === 0 && dimensions.width === 0);\n }\n\n /**\n * Asserts that the current snack-bar has annotated content. Promise reject\n * if content is not annotated.\n */\n protected async _assertContentAnnotated(): Promise {\n if (!await this._isSimpleSnackBar()) {\n throw Error('Method cannot be used for snack-bar with custom content.');\n }\n }\n\n /**\n * Asserts that the current snack-bar has an action defined. Otherwise the\n * promise will reject.\n */\n protected async _assertHasAction(): Promise {\n await this._assertContentAnnotated();\n if (!await this.hasAction()) {\n throw Error('Method cannot be used for a snack-bar without an action.');\n }\n }\n\n /** Whether the snack-bar is using the default content template. */\n private async _isSimpleSnackBar(): Promise {\n return await this.locatorForOptional('.mat-simple-snackbar')() !== null;\n }\n\n /** Gets the simple snack bar action button. */\n private async _getActionButton() {\n return this.locatorForOptional(this._actionButtonSelector)();\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 {BaseHarnessFilters} from '@angular/cdk/testing';\n\n/** A set of criteria that can be used to filter a list of `MatSnackBarHarness` instances. */\nexport interface SnackBarHarnessFilters extends BaseHarnessFilters {}\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 './snack-bar-harness';\nexport * from './snack-bar-harness-filters';\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":";;;AAAA;;;;;;;AAYA;MACa,kBAAmB,SAAQ,gCAAwC;IAAhF;;QAKY,qBAAgB,GAAG,6BAA6B,CAAC;QACjD,0BAAqB,GAAG,sCAAsC,CAAC;QACjE,wBAAmB,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;KAgH9D;;;;;;;IAxGC,OAAO,IAAI,CAAC,UAAkC,EAAE;QAC9C,OAAO,IAAI,gBAAgB,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;KAC1D;;;;;;;IAQK,OAAO;;YACX,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,EAAE,YAAY,CAAC,MAAM,CAAmC,CAAC;SACnF;KAAA;;;;;IAMK,WAAW;;YACf,OAAO,CAAC,MAAM,IAAI,CAAC,mBAAmB,EAAE;iBACnC,YAAY,CAAC,WAAW,CAAgC,CAAC;SAC/D;KAAA;;;;IAKK,SAAS;;YACb,MAAM,IAAI,CAAC,uBAAuB,EAAE,CAAC;YACrC,OAAO,CAAC,MAAM,IAAI,CAAC,gBAAgB,EAAE,MAAM,IAAI,CAAC;SACjD;KAAA;;;;;IAMK,oBAAoB;;YACxB,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC9B,OAAO,CAAC,MAAM,IAAI,CAAC,gBAAgB,EAAE,EAAG,IAAI,EAAE,CAAC;SAChD;KAAA;;;;;IAOK,iBAAiB;;YACrB,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC9B,MAAM,CAAC,MAAM,IAAI,CAAC,gBAAgB,EAAE,EAAG,KAAK,EAAE,CAAC;SAChD;KAAA;;;;IAKK,UAAU;;YACd,MAAM,IAAI,CAAC,uBAAuB,EAAE,CAAC;YACrC,OAAO,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC;SAChE;KAAA;;IAGK,WAAW;;;;YAIf,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;YAC/B,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,GAAG,MAAM,QAAQ,CAAC,MAAM;;;gBAG9C,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;gBAC7B,IAAI,CAAC,aAAa,EAAE;aACrB,CAAC,CAAC;YAEH,OAAO,IAAI,IAAI,IAAI,KAAK,CAAC,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;SAC5F;KAAA;;;;;IAMe,uBAAuB;;YACrC,IAAI,EAAC,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAA,EAAE;gBACnC,MAAM,KAAK,CAAC,0DAA0D,CAAC,CAAC;aACzE;SACF;KAAA;;;;;IAMe,gBAAgB;;YAC9B,MAAM,IAAI,CAAC,uBAAuB,EAAE,CAAC;YACrC,IAAI,EAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAA,EAAE;gBAC3B,MAAM,KAAK,CAAC,0DAA0D,CAAC,CAAC;aACzE;SACF;KAAA;;IAGa,iBAAiB;;YAC7B,OAAO,CAAA,MAAM,IAAI,CAAC,kBAAkB,CAAC,sBAAsB,CAAC,EAAE,MAAK,IAAI,CAAC;SACzE;KAAA;;IAGa,gBAAgB;;YAC5B,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC;SAC9D;KAAA;;AArHD;AACA;AACA;AACO,+BAAY,GAAG,0BAA0B;;ACjBlD;;;;;;;;ACAA;;;;;;;;ACAA;;;;;;;;;;"}