From 16b6010a692edf1e758720e8141c62290d4a5e7d Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Thu, 20 Jul 2023 15:46:42 +0300 Subject: [PATCH] fix(cdk/testing): allow for comma key to be sent Adds a comma key to `TestKey` since commas aren't treated correctly in strings sent through `sendKeys` and it's common for them to be used as separators in chip lists. --- .../testing/protractor/protractor-element.ts | 1 + .../selenium-webdriver-keys.ts | 1 + src/cdk/testing/test-element.ts | 1 + src/cdk/testing/testbed/unit-test-element.ts | 1 + src/material/chips/testing/BUILD.bazel | 1 + .../chips/testing/chip-input-harness.spec.ts | 19 +++++++++++++++++-- tools/public_api_guard/cdk/testing.md | 2 ++ 7 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/cdk/testing/protractor/protractor-element.ts b/src/cdk/testing/protractor/protractor-element.ts index af512de19368..85cd25f942c9 100644 --- a/src/cdk/testing/protractor/protractor-element.ts +++ b/src/cdk/testing/protractor/protractor-element.ts @@ -50,6 +50,7 @@ const keyMap = { [TestKey.F11]: Key.F11, [TestKey.F12]: Key.F12, [TestKey.META]: Key.META, + [TestKey.COMMA]: ',', }; /** Converts a `ModifierKeys` object to a list of Protractor `Key`s. */ diff --git a/src/cdk/testing/selenium-webdriver/selenium-webdriver-keys.ts b/src/cdk/testing/selenium-webdriver/selenium-webdriver-keys.ts index 20184588e9c6..c3d0deb292e3 100644 --- a/src/cdk/testing/selenium-webdriver/selenium-webdriver-keys.ts +++ b/src/cdk/testing/selenium-webdriver/selenium-webdriver-keys.ts @@ -44,6 +44,7 @@ export const seleniumWebDriverKeyMap = { [TestKey.F11]: webdriver.Key.F11, [TestKey.F12]: webdriver.Key.F12, [TestKey.META]: webdriver.Key.META, + [TestKey.COMMA]: ',', }; /** Gets a list of WebDriver `Key`s for the given `ModifierKeys`. */ diff --git a/src/cdk/testing/test-element.ts b/src/cdk/testing/test-element.ts index 50cffb3cf1db..02542fcdb4c0 100644 --- a/src/cdk/testing/test-element.ts +++ b/src/cdk/testing/test-element.ts @@ -65,6 +65,7 @@ export enum TestKey { F11, F12, META, + COMMA, // Commas are a common separator key. } /** diff --git a/src/cdk/testing/testbed/unit-test-element.ts b/src/cdk/testing/testbed/unit-test-element.ts index 41e6271e6261..f441fd43af6b 100644 --- a/src/cdk/testing/testbed/unit-test-element.ts +++ b/src/cdk/testing/testbed/unit-test-element.ts @@ -61,6 +61,7 @@ const keyMap = { [TestKey.F11]: {keyCode: keyCodes.F11, key: 'F11'}, [TestKey.F12]: {keyCode: keyCodes.F12, key: 'F12'}, [TestKey.META]: {keyCode: keyCodes.META, key: 'Meta'}, + [TestKey.COMMA]: {keyCode: keyCodes.COMMA, key: ','}, }; /** A `TestElement` implementation for unit tests. */ diff --git a/src/material/chips/testing/BUILD.bazel b/src/material/chips/testing/BUILD.bazel index e5c99a2f0de7..7fd0738229ba 100644 --- a/src/material/chips/testing/BUILD.bazel +++ b/src/material/chips/testing/BUILD.bazel @@ -19,6 +19,7 @@ ng_test_library( srcs = glob(["**/*.spec.ts"]), deps = [ ":testing", + "//src/cdk/keycodes", "//src/cdk/testing", "//src/cdk/testing/testbed", "//src/material/chips", diff --git a/src/material/chips/testing/chip-input-harness.spec.ts b/src/material/chips/testing/chip-input-harness.spec.ts index c6338dfa6974..cf177d67a52b 100644 --- a/src/material/chips/testing/chip-input-harness.spec.ts +++ b/src/material/chips/testing/chip-input-harness.spec.ts @@ -1,4 +1,5 @@ -import {HarnessLoader} from '@angular/cdk/testing'; +import {HarnessLoader, TestKey} from '@angular/cdk/testing'; +import {COMMA} from '@angular/cdk/keycodes'; import {TestbedHarnessEnvironment} from '@angular/cdk/testing/testbed'; import {Component} from '@angular/core'; import {ComponentFixture, TestBed} from '@angular/core/testing'; @@ -69,12 +70,24 @@ describe('MatChipInputHarness', () => { await harness.blur(); expect(await harness.isFocused()).toBe(false); }); + + it('should be able to trigger a separator key', async () => { + const input = await loader.getHarness(MatChipInputHarness); + await input.setValue('Hello'); + await input.sendSeparatorKey(TestKey.COMMA); + expect(fixture.componentInstance.add).toHaveBeenCalled(); + }); }); @Component({ template: ` - + @@ -84,4 +97,6 @@ describe('MatChipInputHarness', () => { }) class ChipInputHarnessTest { required = false; + add = jasmine.createSpy('add spy'); + separatorKeyCodes = [COMMA]; } diff --git a/tools/public_api_guard/cdk/testing.md b/tools/public_api_guard/cdk/testing.md index 0c6db94a29b3..411a6feddfd0 100644 --- a/tools/public_api_guard/cdk/testing.md +++ b/tools/public_api_guard/cdk/testing.md @@ -263,6 +263,8 @@ export enum TestKey { // (undocumented) BACKSPACE = 0, // (undocumented) + COMMA = 30, + // (undocumented) CONTROL = 4, // (undocumented) DELETE = 16,