From cb48c81f30c51e0aa88accc9fc174d107df46363 Mon Sep 17 00:00:00 2001 From: Igor Nabebin Date: Wed, 31 Jul 2019 12:00:56 +0300 Subject: [PATCH 1/2] Fixed trigger custom keyCode overriding by key code from modifiers list --- packages/test-utils/src/create-dom-event.js | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/packages/test-utils/src/create-dom-event.js b/packages/test-utils/src/create-dom-event.js index eeb6f4258..19cbe124d 100644 --- a/packages/test-utils/src/create-dom-event.js +++ b/packages/test-utils/src/create-dom-event.js @@ -1,4 +1,5 @@ import eventTypes from 'dom-event-types' +import { warn } from 'shared/util' const defaultEventType = { eventInterface: 'Event', @@ -35,13 +36,20 @@ function createEvent( ? window[eventInterface] : window.Event + if (options && options.keyCode && modifier) { + warn( + `event modifier ".${modifier}" will be overridden ` + + `by specified key code "${options.keyCode}"` + ) + } + const event = new SupportedEventInterface(type, { // event properties can only be added when the event is instantiated // custom properties must be added after the event has been instantiated + keyCode: modifiers[modifier], ...options, bubbles, - cancelable, - keyCode: modifiers[modifier] + cancelable }) return event @@ -50,11 +58,13 @@ function createEvent( function createOldEvent( type, modifier, - { eventInterface, bubbles, cancelable } + { eventInterface, bubbles, cancelable }, + options ) { const event = document.createEvent('Event') event.initEvent(type, bubbles, cancelable) - event.keyCode = modifiers[modifier] + event.keyCode = + options && options.keyCode ? options.keyCode : modifiers[modifier] return event } @@ -66,7 +76,7 @@ export default function createDOMEvent(type, options) { const event = typeof window.Event === 'function' ? createEvent(eventType, modifier, meta, options) - : createOldEvent(eventType, modifier, meta) + : createOldEvent(eventType, modifier, meta, options) const eventPrototype = Object.getPrototypeOf(event) Object.keys(options || {}).forEach(key => { From 5c36a56527dbe740ae42d9298558ad42a26dea3a Mon Sep 17 00:00:00 2001 From: Igor Nabebin Date: Wed, 31 Jul 2019 12:01:11 +0300 Subject: [PATCH 2/2] Added tests for triggering events with keyCode option --- test/specs/wrapper/trigger.spec.js | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/test/specs/wrapper/trigger.spec.js b/test/specs/wrapper/trigger.spec.js index 79c78511c..a498b0443 100644 --- a/test/specs/wrapper/trigger.spec.js +++ b/test/specs/wrapper/trigger.spec.js @@ -11,6 +11,10 @@ import { itDoNotRunIf } from 'conditional-specs' describeWithShallowAndMount('trigger', mountingMethod => { const sandbox = sinon.createSandbox() + beforeEach(() => { + sandbox.stub(console, 'error').callThrough() + }) + afterEach(() => { sandbox.reset() sandbox.restore() @@ -76,6 +80,20 @@ describeWithShallowAndMount('trigger', mountingMethod => { } }) + it('adds key code to event', () => { + const keyupHandler = sandbox.stub() + const wrapper = mountingMethod(ComponentWithEvents, { + propsData: { keyupHandler } + }) + // All printable keys + for (let keyCode = 49; keyCode <= 90; keyCode++) { + wrapper.find('.keydown').trigger(`keyup`, { + keyCode: keyCode + }) + expect(keyupHandler.lastCall.args[0].keyCode).to.equal(keyCode) + } + }) + it('causes DOM to update after clickHandler method that changes components data is called', async () => { const wrapper = mountingMethod(ComponentWithEvents) const toggle = wrapper.find('.toggle') @@ -163,6 +181,14 @@ describeWithShallowAndMount('trigger', mountingMethod => { } ) + it('throws Vue warning when both modifier and keyCode are specified in event', () => { + const wrapper = mountingMethod(ComponentWithEvents) + wrapper.find('.keydown').trigger(`keyup.enter`, { + keyCode: 49 + }) + expect(console.error).calledWith(sandbox.match('[vue-test-utils]')) + }) + it('throws error if options contains a target value', () => { const wrapper = mountingMethod({ render: h => h('div') }) const div = wrapper.find('div')