From 33d8934477feb2826d4495ef90daafa07cba4069 Mon Sep 17 00:00:00 2001 From: John Date: Tue, 22 Dec 2020 20:57:50 +0000 Subject: [PATCH] fix: use a data transfewr object supplied by the event caller --- src/__tests__/events.js | 17 +++++++++++++++++ src/events.js | 5 ++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/__tests__/events.js b/src/__tests__/events.js index 5fc9d7fd..0ee5bb42 100644 --- a/src/__tests__/events.js +++ b/src/__tests__/events.js @@ -327,6 +327,23 @@ test('assigning the files property on dataTransfer', () => { expect(spy.mock.calls[0][0]).toHaveProperty('dataTransfer.files', [file]) }) +test('uses the supplied data transfer instance if passed in by the caller', () => { + function FakeDataTransfer() {} + + window.DataTransfer = FakeDataTransfer + + const node = document.createElement('div') + const spy = jest.fn() + node.addEventListener('drop', spy) + + const dataTransfer = new FakeDataTransfer() + + fireEvent.drop(node, {dataTransfer}) + expect(spy).toHaveBeenCalledTimes(1) + expect(spy.mock.calls[0][0].dataTransfer).toEqual(dataTransfer) + delete window.DataTransfer +}) + test('assigns clipboardData properties', () => { const node = document.createElement('div') const spy = jest.fn() diff --git a/src/events.js b/src/events.js index 57446bf8..f3506105 100644 --- a/src/events.js +++ b/src/events.js @@ -69,7 +69,10 @@ function createEvent( if (typeof dataTransferValue === 'object') { /* istanbul ignore if */ - if (typeof window.DataTransfer === 'function') { + if ( + typeof window.DataTransfer === 'function' && + !(dataTransferValue instanceof window.DataTransfer) + ) { Object.defineProperty(event, dataTransferKey, { value: Object.getOwnPropertyNames(dataTransferValue).reduce( (acc, propName) => {