From 2ea429bc8fdd6940f4b1bb38c4dc60e8ae19fbef Mon Sep 17 00:00:00 2001 From: wildcardalice Date: Thu, 11 Sep 2025 20:20:12 +0000 Subject: [PATCH 1/3] feat(material/testing): Add icon name filter to MatButtonHarness --- src/material/button/testing/BUILD.bazel | 1 + src/material/button/testing/button-harness-filters.ts | 3 +++ src/material/button/testing/button-harness.spec.ts | 7 +++++++ src/material/button/testing/button-harness.ts | 6 +++++- 4 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/material/button/testing/BUILD.bazel b/src/material/button/testing/BUILD.bazel index 2490bd856547..c71f12a1082e 100644 --- a/src/material/button/testing/BUILD.bazel +++ b/src/material/button/testing/BUILD.bazel @@ -11,6 +11,7 @@ ts_project( deps = [ "//:node_modules/@angular/core", "//src/cdk/testing", + "//src/material/icon/testing", ], ) diff --git a/src/material/button/testing/button-harness-filters.ts b/src/material/button/testing/button-harness-filters.ts index c88e9a122b12..67d0fe830c43 100644 --- a/src/material/button/testing/button-harness-filters.ts +++ b/src/material/button/testing/button-harness-filters.ts @@ -33,4 +33,7 @@ export interface ButtonHarnessFilters extends BaseHarnessFilters { /** Only find instances with the specified type. */ buttonType?: ButtonType; + + /** Only find instances that contain an icon whose name matches the given value. */ + icon?: string | RegExp; } diff --git a/src/material/button/testing/button-harness.spec.ts b/src/material/button/testing/button-harness.spec.ts index cc0485eea71e..3618236b5da3 100644 --- a/src/material/button/testing/button-harness.spec.ts +++ b/src/material/button/testing/button-harness.spec.ts @@ -115,6 +115,13 @@ describe('MatButtonHarness', () => { expect(await favIcon.getName()).toBe('favorite'); }); + it('should be able to filter buttons containing a named icon', async () => { + const favBtn = await loader.getHarness(MatButtonHarness.with({icon: 'favorite'})); + + expect(await (await favBtn.host()).getAttribute('id')).toBe('favorite-icon'); + expect(await (await favBtn.getHarness(MatIconHarness)).getName()).toBe('favorite'); + }); + it('should be able to ge the type variant of the button', async () => { const buttons = await loader.getAllHarnesses(MatButtonHarness); const variants = await parallel(() => buttons.map(button => button.getVariant())); diff --git a/src/material/button/testing/button-harness.ts b/src/material/button/testing/button-harness.ts index 34caf427620d..38911b6e71bf 100644 --- a/src/material/button/testing/button-harness.ts +++ b/src/material/button/testing/button-harness.ts @@ -12,6 +12,7 @@ import { ContentContainerComponentHarness, HarnessPredicate, } from '@angular/cdk/testing'; +import {MatIconHarness} from '@angular/material/icon/testing'; import { ButtonAppearance, ButtonHarnessFilters, @@ -58,7 +59,10 @@ export class MatButtonHarness extends ContentContainerComponentHarness { }) .addOption('buttonType', options.buttonType, (harness, buttonType) => HarnessPredicate.stringMatches(harness.getType(), buttonType), - ); + ) + .addOption('icon', options.icon, (harness, icon) => { + return harness.hasHarness(MatIconHarness.with({name: icon})); + }); } /** From a8687aa5cdbe4d9e2a9436e8c1f4ed87d56ce5a8 Mon Sep 17 00:00:00 2001 From: wildcardalice Date: Thu, 11 Sep 2025 20:08:17 +0000 Subject: [PATCH 2/3] fix(material/testing): Update goldens/material/button/testing/index.api.md --- goldens/material/button/testing/index.api.md | 1 + 1 file changed, 1 insertion(+) diff --git a/goldens/material/button/testing/index.api.md b/goldens/material/button/testing/index.api.md index c6ea75d18022..7b6de01a4943 100644 --- a/goldens/material/button/testing/index.api.md +++ b/goldens/material/button/testing/index.api.md @@ -17,6 +17,7 @@ export interface ButtonHarnessFilters extends BaseHarnessFilters { appearance?: ButtonAppearance; buttonType?: ButtonType; disabled?: boolean; + icon?: string | RegExp; text?: string | RegExp; variant?: ButtonVariant; } From 183a3d225c181b867d42e9bb88760ac910878da5 Mon Sep 17 00:00:00 2001 From: wildcardalice Date: Tue, 16 Sep 2025 16:09:45 +0000 Subject: [PATCH 3/3] refactor(material/testing): Rename MatButtonHarness "icon" filter to "iconName" --- goldens/material/button/testing/index.api.md | 2 +- src/material/button/testing/button-harness-filters.ts | 2 +- src/material/button/testing/button-harness.spec.ts | 2 +- src/material/button/testing/button-harness.ts | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/goldens/material/button/testing/index.api.md b/goldens/material/button/testing/index.api.md index 7b6de01a4943..c57ebcb1c0d9 100644 --- a/goldens/material/button/testing/index.api.md +++ b/goldens/material/button/testing/index.api.md @@ -17,7 +17,7 @@ export interface ButtonHarnessFilters extends BaseHarnessFilters { appearance?: ButtonAppearance; buttonType?: ButtonType; disabled?: boolean; - icon?: string | RegExp; + iconName?: string | RegExp; text?: string | RegExp; variant?: ButtonVariant; } diff --git a/src/material/button/testing/button-harness-filters.ts b/src/material/button/testing/button-harness-filters.ts index 67d0fe830c43..eb490a364773 100644 --- a/src/material/button/testing/button-harness-filters.ts +++ b/src/material/button/testing/button-harness-filters.ts @@ -35,5 +35,5 @@ export interface ButtonHarnessFilters extends BaseHarnessFilters { buttonType?: ButtonType; /** Only find instances that contain an icon whose name matches the given value. */ - icon?: string | RegExp; + iconName?: string | RegExp; } diff --git a/src/material/button/testing/button-harness.spec.ts b/src/material/button/testing/button-harness.spec.ts index 3618236b5da3..e63fd6bec0f8 100644 --- a/src/material/button/testing/button-harness.spec.ts +++ b/src/material/button/testing/button-harness.spec.ts @@ -116,7 +116,7 @@ describe('MatButtonHarness', () => { }); it('should be able to filter buttons containing a named icon', async () => { - const favBtn = await loader.getHarness(MatButtonHarness.with({icon: 'favorite'})); + const favBtn = await loader.getHarness(MatButtonHarness.with({iconName: 'favorite'})); expect(await (await favBtn.host()).getAttribute('id')).toBe('favorite-icon'); expect(await (await favBtn.getHarness(MatIconHarness)).getName()).toBe('favorite'); diff --git a/src/material/button/testing/button-harness.ts b/src/material/button/testing/button-harness.ts index 38911b6e71bf..49edebcb25ce 100644 --- a/src/material/button/testing/button-harness.ts +++ b/src/material/button/testing/button-harness.ts @@ -60,8 +60,8 @@ export class MatButtonHarness extends ContentContainerComponentHarness { .addOption('buttonType', options.buttonType, (harness, buttonType) => HarnessPredicate.stringMatches(harness.getType(), buttonType), ) - .addOption('icon', options.icon, (harness, icon) => { - return harness.hasHarness(MatIconHarness.with({name: icon})); + .addOption('iconName', options.iconName, (harness, iconName) => { + return harness.hasHarness(MatIconHarness.with({name: iconName})); }); }