@@ -44,19 +44,35 @@ Object.keys(eventMap).forEach(key => {
44
44
Object . assign ( node , targetProperties )
45
45
const window = getWindowFromNode ( node )
46
46
const EventConstructor = window [ EventType ] || window . Event
47
+ let event
47
48
/* istanbul ignore else */
48
49
if ( typeof EventConstructor === 'function' ) {
49
- return new EventConstructor ( eventName , eventInit )
50
+ event = new EventConstructor ( eventName , eventInit )
50
51
} else {
51
52
// IE11 polyfill from https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent#Polyfill
52
- const event = window . document . createEvent ( EventType )
53
+ event = window . document . createEvent ( EventType )
53
54
const { bubbles, cancelable, detail, ...otherInit } = eventInit
54
55
event . initEvent ( eventName , bubbles , cancelable , detail )
55
56
Object . keys ( otherInit ) . forEach ( eventKey => {
56
57
event [ eventKey ] = otherInit [ eventKey ]
57
58
} )
58
- return event
59
59
}
60
+
61
+ const { dataTransfer} = eventInit
62
+ if ( typeof dataTransfer === 'object' ) {
63
+ // DataTransfer is not supported in jsdom: https://github.com/jsdom/jsdom/issues/1568
64
+ /* istanbul ignore if */
65
+ if ( typeof window . DataTransfer === 'function' ) {
66
+ Object . defineProperty ( event , 'dataTransfer' , {
67
+ value : Object . assign ( new window . DataTransfer ( ) , dataTransfer )
68
+ } )
69
+ } else {
70
+ Object . defineProperty ( event , 'dataTransfer' , {
71
+ value : dataTransfer
72
+ } )
73
+ }
74
+ }
75
+ return event
60
76
}
61
77
62
78
fireEvent [ key ] = ( node , init ) => fireEvent ( node , createEvent [ key ] ( node , init ) )
0 commit comments