From b67dd3de28dade7c8fb8fcc583b3ea8238b6f28f Mon Sep 17 00:00:00 2001 From: Diego Hernandez Date: Wed, 22 May 2019 18:57:17 -0500 Subject: [PATCH] fix(events): add selection-related properties to target --- src/__tests__/events.js | 13 +++++++++++++ src/events.js | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/__tests__/events.js b/src/__tests__/events.js index f0a28d21..ffe28af7 100644 --- a/src/__tests__/events.js +++ b/src/__tests__/events.js @@ -160,6 +160,19 @@ test('assigns target properties', () => { expect(node.value).toBe(value) }) +test('assigns selection-related target properties', () => { + const node = document.createElement('input') + const spy = jest.fn() + const value = 'ab' + const selectionStart = 1 + const selectionEnd = 2 + node.addEventListener('change', spy) + fireEvent.change(node, {target: {value, selectionStart, selectionEnd}}) + expect(node.value).toBe(value) + expect(node.selectionStart).toBe(selectionStart) + expect(node.selectionEnd).toBe(selectionEnd) +}) + test('assigning a value to a target that cannot have a value throws an error', () => { const node = document.createElement('div') expect(() => diff --git a/src/events.js b/src/events.js index d20228f7..4531a677 100644 --- a/src/events.js +++ b/src/events.js @@ -316,7 +316,6 @@ Object.keys(eventMap).forEach(key => { createEvent[key] = (node, init) => { const eventInit = {...defaultInit, ...init} const {target: {value, files, ...targetProperties} = {}} = eventInit - Object.assign(node, targetProperties) if (value !== undefined) { setNativeValue(node, value) } @@ -331,6 +330,7 @@ Object.keys(eventMap).forEach(key => { value: files, }) } + Object.assign(node, targetProperties) const window = getWindowFromNode(node) const EventConstructor = window[EventType] || window.Event return new EventConstructor(eventName, eventInit)