From 76d3ee2f83e09d56954cbb666ddc3dfccd2867c6 Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Thu, 24 Mar 2022 08:57:13 +0100 Subject: [PATCH] fix(cdk/testing): entering negative number values not working with reactive forms We were entering negative values into number inputs character-by-character which doesn't appear to work with Angular's reactive forms. These changes switch to entering the entire value all at once. Fixes #24414. --- src/cdk/testing/testbed/fake-events/type-in-element.ts | 2 +- src/cdk/testing/tests/cross-environment.spec.ts | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/cdk/testing/testbed/fake-events/type-in-element.ts b/src/cdk/testing/testbed/fake-events/type-in-element.ts index 69a43acf5791..92d8c8d52a1c 100644 --- a/src/cdk/testing/testbed/fake-events/type-in-element.ts +++ b/src/cdk/testing/testbed/fake-events/type-in-element.ts @@ -97,7 +97,7 @@ export function typeInElement(element: HTMLElement, ...modifiersAndKeys: any[]) const enterValueIncrementally = inputType === 'number' ? // The value can be set character by character in number inputs if it doesn't have any decimals. - keys.every(key => key.key !== '.' && key.keyCode !== PERIOD) + keys.every(key => key.key !== '.' && key.key !== '-' && key.keyCode !== PERIOD) : incrementalInputTypes.has(inputType); triggerFocus(element); diff --git a/src/cdk/testing/tests/cross-environment.spec.ts b/src/cdk/testing/tests/cross-environment.spec.ts index 9e6455a5789e..4be33f64d34c 100644 --- a/src/cdk/testing/tests/cross-environment.spec.ts +++ b/src/cdk/testing/tests/cross-environment.spec.ts @@ -483,6 +483,15 @@ export function crossEnvironmentSpecs( expect(await value.text()).toBe('Number value: 123.456'); }); + it('should be able to set a negative input value on a reactive form control', async () => { + const input = await harness.numberInput(); + const value = await harness.numberInputValue(); + await input.sendKeys('-123'); + + expect(await input.getProperty('value')).toBe('-123'); + expect(await value.text()).toBe('Number value: -123'); + }); + it('should be able to retrieve dimensions', async () => { const dimensions = await (await harness.title()).getDimensions(); expect(dimensions).toEqual(jasmine.objectContaining({height: 100, width: 200}));