From 9e0f32a4a523102795c69bd4e58fac18e7ace250 Mon Sep 17 00:00:00 2001 From: Ben Kucera <14625260+Bkucera@users.noreply.github.com> Date: Mon, 23 Dec 2019 13:23:56 -0500 Subject: [PATCH] address feedback on #6033 (#6034) --- packages/driver/src/cy/keyboard.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/driver/src/cy/keyboard.ts b/packages/driver/src/cy/keyboard.ts index 478c53a134..bf92fdc292 100644 --- a/packages/driver/src/cy/keyboard.ts +++ b/packages/driver/src/cy/keyboard.ts @@ -64,6 +64,7 @@ const timeRe = /^([0-1]\d|2[0-3]):[0-5]\d(:[0-5]\d)?(\.[0-9]{1,3})?/ const dateTimeRe = /^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}/ const numberRe = /^-?(\d+|\d+\.\d+|\.\d+)([eE][-+]?\d+)?$/i const charsBetweenCurlyBracesRe = /({.+?})/ +const isValidNumberInputChar = /[-+eE\d\.]/ const INITIAL_MODIFIERS = { alt: false, @@ -260,12 +261,15 @@ const shouldUpdateValue = (el: HTMLElement, key: KeyDetails, options) => { if (!(numberRe.test(potentialValue))) { debug('skipping inserting value since number input would be invalid', key.text, potentialValue) - if (key.text.match(/[-+eE\d\.]/)) { - options.prevVal = needsValue + key.text - } else { + // when typing in a number input, only certain whitelisted chars will insert text + if (!key.text.match(isValidNumberInputChar)) { options.prevVal = '' + + return } + options.prevVal = needsValue + key.text + return } @@ -481,6 +485,7 @@ function _getEndIndex (str, substr) { // Simulated default actions for select few keys. const simulatedDefaultKeyMap: { [key: string]: SimulatedDefault } = { Enter: (el, key, options) => { + // if input element, Enter key does not insert text if (!$elements.isInput(el)) { $selection.replaceSelectionContents(el, '\n') }