@angular/material
Version:
Angular Material
1 lines • 11.2 kB
Source Map (JSON)
{"version":3,"file":"icon-testing.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/icon/testing/icon-harness-filters.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/icon/testing/icon-harness.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/icon/testing/fake-icon-registry.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.dev/license\n */\n\nimport {BaseHarnessFilters} from '@angular/cdk/testing';\n\n/** Possible types of icons. */\nexport enum IconType {\n SVG,\n FONT,\n}\n\n/** A set of criteria that can be used to filter a list of `MatIconHarness` instances. */\nexport interface IconHarnessFilters extends BaseHarnessFilters {\n /** Filters based on the typef of the icon. */\n type?: IconType;\n /** Filters based on the name of the icon. */\n name?: string | RegExp;\n /** Filters based on the namespace of the icon. */\n namespace?: string | null | RegExp;\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.dev/license\n */\n\nimport {ComponentHarness, HarnessPredicate} from '@angular/cdk/testing';\nimport {IconHarnessFilters, IconType} from './icon-harness-filters';\n\n/** Harness for interacting with a standard mat-icon in tests. */\nexport class MatIconHarness extends ComponentHarness {\n /** The selector for the host element of a `MatIcon` instance. */\n static hostSelector = '.mat-icon';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a `MatIconHarness` that meets\n * certain criteria.\n * @param options Options for filtering which icon instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with(options: IconHarnessFilters = {}): HarnessPredicate<MatIconHarness> {\n return new HarnessPredicate(MatIconHarness, options)\n .addOption('type', options.type, async (harness, type) => (await harness.getType()) === type)\n .addOption('name', options.name, (harness, text) =>\n HarnessPredicate.stringMatches(harness.getName(), text),\n )\n .addOption('namespace', options.namespace, (harness, text) =>\n HarnessPredicate.stringMatches(harness.getNamespace(), text),\n );\n }\n\n /** Gets the type of the icon. */\n async getType(): Promise<IconType> {\n const type = await (await this.host()).getAttribute('data-mat-icon-type');\n return type === 'svg' ? IconType.SVG : IconType.FONT;\n }\n\n /** Gets the name of the icon. */\n async getName(): Promise<string | null> {\n const host = await this.host();\n const nameFromDom = await host.getAttribute('data-mat-icon-name');\n\n // If we managed to figure out the name from the attribute, use it.\n if (nameFromDom) {\n return nameFromDom;\n }\n\n // Some icons support defining the icon as a ligature.\n // As a fallback, try to extract it from the DOM text.\n if ((await this.getType()) === IconType.FONT) {\n // Other directives may add content to the icon (e.g. `MatBadge`), however only the direct\n // text nodes affect the name of the icon. Exclude all element descendants from the result.\n const text = await host.text({exclude: '*'});\n\n // There are some internal cases where the icon name is wrapped in another node.\n // Fall back to extracting the entire text if we ended up excluding everything above.\n return text.length > 0 ? text : host.text();\n }\n\n return null;\n }\n\n /** Gets the namespace of the icon. */\n async getNamespace(): Promise<string | null> {\n return (await this.host()).getAttribute('data-mat-icon-namespace');\n }\n\n /** Gets whether the icon is inline. */\n async isInline(): Promise<boolean> {\n return (await this.host()).hasClass('mat-icon-inline');\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.dev/license\n */\n\nimport {Injectable, NgModule, OnDestroy} from '@angular/core';\nimport {MatIconRegistry} from '../../icon';\nimport {Observable, of as observableOf} from 'rxjs';\n\ntype PublicApi<T> = {\n [K in keyof T]: T[K] extends (...x: any[]) => T ? (...x: any[]) => PublicApi<T> : T[K];\n};\n\n/**\n * A null icon registry that must be imported to allow disabling of custom\n * icons.\n */\n@Injectable()\nexport class FakeMatIconRegistry implements PublicApi<MatIconRegistry>, OnDestroy {\n addSvgIcon(): this {\n return this;\n }\n\n addSvgIconLiteral(): this {\n return this;\n }\n\n addSvgIconInNamespace(): this {\n return this;\n }\n\n addSvgIconLiteralInNamespace(): this {\n return this;\n }\n\n addSvgIconSet(): this {\n return this;\n }\n\n addSvgIconSetLiteral(): this {\n return this;\n }\n\n addSvgIconSetInNamespace(): this {\n return this;\n }\n\n addSvgIconSetLiteralInNamespace(): this {\n return this;\n }\n\n registerFontClassAlias(): this {\n return this;\n }\n\n classNameForFontAlias(alias: string): string {\n return alias;\n }\n\n getDefaultFontSetClass() {\n return ['material-icons'];\n }\n\n getSvgIconFromUrl(): Observable<SVGElement> {\n return observableOf(this._generateEmptySvg());\n }\n\n getNamedSvgIcon(): Observable<SVGElement> {\n return observableOf(this._generateEmptySvg());\n }\n\n setDefaultFontSetClass(): this {\n return this;\n }\n\n addSvgIconResolver(): this {\n return this;\n }\n\n ngOnDestroy() {}\n\n private _generateEmptySvg(): SVGElement {\n const emptySvg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n emptySvg.classList.add('fake-testing-svg');\n // Emulate real icon characteristics from `MatIconRegistry` so size remains consistent in tests.\n emptySvg.setAttribute('fit', '');\n emptySvg.setAttribute('height', '100%');\n emptySvg.setAttribute('width', '100%');\n emptySvg.setAttribute('preserveAspectRatio', 'xMidYMid meet');\n emptySvg.setAttribute('focusable', 'false');\n return emptySvg;\n }\n}\n\n/** Import this module in tests to install the null icon registry. */\n@NgModule({\n providers: [{provide: MatIconRegistry, useClass: FakeMatIconRegistry}],\n})\nexport class MatIconTestingModule {}\n"],"names":["IconType","MatIconHarness","ComponentHarness","hostSelector","with","options","HarnessPredicate","addOption","type","harness","getType","name","text","stringMatches","getName","namespace","getNamespace","host","getAttribute","SVG","FONT","nameFromDom","exclude","length","isInline","hasClass","FakeMatIconRegistry","addSvgIcon","addSvgIconLiteral","addSvgIconInNamespace","addSvgIconLiteralInNamespace","addSvgIconSet","addSvgIconSetLiteral","addSvgIconSetInNamespace","addSvgIconSetLiteralInNamespace","registerFontClassAlias","classNameForFontAlias","alias","getDefaultFontSetClass","getSvgIconFromUrl","observableOf","_generateEmptySvg","getNamedSvgIcon","setDefaultFontSetClass","addSvgIconResolver","ngOnDestroy","emptySvg","document","createElementNS","classList","add","setAttribute","deps","target","i0","ɵɵFactoryTarget","Injectable","decorators","MatIconTestingModule","NgModule","providers","provide","MatIconRegistry","useClass","args"],"mappings":"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"}