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)