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) => {