Skip to content

Commit b1659cf

Browse files
authored
fix(fireEvent): copy non-enumerable data transfer props (#734)
* Copy non enumerable data transfer prop * Create a test for dataTransfer prop copying * Make dataTransfer test more generic Closes #727
1 parent 01e0242 commit b1659cf

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed

src/__tests__/events.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,26 @@ test('assigns dataTransfer properties', () => {
295295
expect(spy.mock.calls[0][0]).toHaveProperty('dataTransfer.dropEffect', 'move')
296296
})
297297

298+
test('assigns dataTransfer non-enumerable properties', () => {
299+
window.DataTransfer = function DataTransfer() {}
300+
const node = document.createElement('div')
301+
const spy = jest.fn()
302+
const item = {};
303+
const dataTransfer = new window.DataTransfer();
304+
305+
Object.defineProperty(dataTransfer, 'items', {
306+
value: [item],
307+
enumerable: false
308+
})
309+
node.addEventListener('drop', spy)
310+
fireEvent.drop(node, {dataTransfer})
311+
312+
expect(spy).toHaveBeenCalledTimes(1)
313+
expect(spy.mock.calls[0][0].dataTransfer.items).toHaveLength(1)
314+
315+
delete window.DataTransfer
316+
})
317+
298318
test('assigning the files property on dataTransfer', () => {
299319
const node = document.createElement('div')
300320
const file = new document.defaultView.File(['(⌐□_□)'], 'chucknorris.png', {

src/events.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,12 @@ function createEvent(
7171
/* istanbul ignore if */
7272
if (typeof window.DataTransfer === 'function') {
7373
Object.defineProperty(event, dataTransferKey, {
74-
value: Object.assign(new window.DataTransfer(), dataTransferValue),
74+
value: Object
75+
.getOwnPropertyNames(dataTransferValue)
76+
.reduce((acc, propName) => {
77+
Object.defineProperty(acc, propName, {value: dataTransferValue[propName]});
78+
return acc;
79+
}, new window.DataTransfer())
7580
})
7681
} else {
7782
Object.defineProperty(event, dataTransferKey, {

0 commit comments

Comments
 (0)