@@ -210,7 +210,7 @@ describe('events', () => {
210
210
expect ( handlePointerOut ) . toHaveBeenCalled ( )
211
211
} )
212
212
213
- it ( 'can handle onDragOverEnter & onDragOverLeave' , async ( ) => {
213
+ it ( 'can handle dragover events via onDragOverEnter & onDragOverLeave' , async ( ) => {
214
214
const handleDragOverEnter = jest . fn ( )
215
215
const handleDragOverLeave = jest . fn ( )
216
216
@@ -226,7 +226,6 @@ describe('events', () => {
226
226
} )
227
227
228
228
// Note: DragEvent is not implemented in jsdom yet: https://github.com/jsdom/jsdom/issues/2913
229
- // https://developer.mozilla.org/en-US/docs/Web/API/DragEvent
230
229
// however, @react-testing/library does simulate it
231
230
let evt = createEvent . dragOver ( getContainer ( ) )
232
231
//@ts -ignore
@@ -248,12 +247,80 @@ describe('events', () => {
248
247
expect ( handleDragOverLeave ) . toHaveBeenCalled ( )
249
248
} )
250
249
251
- it ( 'can handle onDrop' , async ( ) => {
250
+ it ( 'can handle onDragOverMissed' , async ( ) => {
251
+ const handleDragOverMissed = jest . fn ( )
252
+
253
+ await act ( async ( ) => {
254
+ render (
255
+ < Canvas onDragOverMissed = { handleDragOverMissed } >
256
+ < mesh >
257
+ < boxGeometry args = { [ 2 , 2 ] } />
258
+ < meshBasicMaterial />
259
+ </ mesh >
260
+ </ Canvas > ,
261
+ )
262
+ } )
263
+
264
+ // Note: DragEvent is not implemented in jsdom yet: https://github.com/jsdom/jsdom/issues/2913
265
+ // https://developer.mozilla.org/en-US/docs/Web/API/DragEvent
266
+ // however, @react-testing/library does simulate it
267
+ let evt = createEvent . dragOver ( getContainer ( ) )
268
+ //@ts -ignore
269
+ evt . offsetX = 1
270
+ //@ts -ignore
271
+ evt . offsetY = 1
272
+
273
+ fireEvent ( getContainer ( ) , evt )
274
+
275
+ expect ( handleDragOverMissed ) . toHaveBeenCalled ( )
276
+ } )
277
+
278
+ it ( 'can handle onDragEnter & onDragLeave' , async ( ) => {
279
+ const handleDragEnter = jest . fn ( )
280
+ const handleDragLeave = jest . fn ( )
281
+
282
+ await act ( async ( ) => {
283
+ render (
284
+ < Canvas onDragEnter = { handleDragEnter } onDragLeave = { handleDragLeave } >
285
+ < mesh >
286
+ < boxGeometry args = { [ 2 , 2 ] } />
287
+ < meshBasicMaterial />
288
+ </ mesh >
289
+ </ Canvas > ,
290
+ )
291
+ } )
292
+
293
+ // Note: DragEvent is not implemented in jsdom yet: https://github.com/jsdom/jsdom/issues/2913
294
+ // https://developer.mozilla.org/en-US/docs/Web/API/DragEvent
295
+ // however, @react-testing/library does simulate it
296
+ let evt = createEvent . dragEnter ( getContainer ( ) )
297
+ //@ts -ignore
298
+ evt . offsetX = 10
299
+ //@ts -ignore
300
+ evt . offsetY = 10
301
+
302
+ fireEvent ( getContainer ( ) , evt )
303
+
304
+ expect ( handleDragEnter ) . toHaveBeenCalled ( )
305
+
306
+ evt = createEvent . dragLeave ( getContainer ( ) )
307
+ //@ts -ignore
308
+ evt . offsetX = 0
309
+ //@ts -ignore
310
+ evt . offsetY = 0
311
+
312
+ fireEvent ( getContainer ( ) , evt )
313
+
314
+ expect ( handleDragLeave ) . toHaveBeenCalled ( )
315
+ } )
316
+
317
+ it ( 'can handle onDrop & onDropMissed' , async ( ) => {
252
318
const handleOnDrop = jest . fn ( )
319
+ const handleOnDropMissed = jest . fn ( )
253
320
254
321
await act ( async ( ) => {
255
322
render (
256
- < Canvas >
323
+ < Canvas onDropMissed = { handleOnDropMissed } >
257
324
< mesh onDrop = { handleOnDrop } >
258
325
< boxGeometry args = { [ 2 , 2 ] } />
259
326
< meshBasicMaterial />
@@ -263,7 +330,6 @@ describe('events', () => {
263
330
} )
264
331
265
332
// Note: DragEvent is not implemented in jsdom yet: https://github.com/jsdom/jsdom/issues/2913
266
- // https://developer.mozilla.org/en-US/docs/Web/API/DragEvent
267
333
// however, @react-testing/library does simulate it
268
334
let evt = createEvent . drop ( getContainer ( ) )
269
335
//@ts -ignore
@@ -284,6 +350,7 @@ describe('events', () => {
284
350
285
351
// second event shouldn't register
286
352
expect ( handleOnDrop ) . toHaveBeenCalledTimes ( 1 )
353
+ expect ( handleOnDropMissed ) . toHaveBeenCalled ( )
287
354
} )
288
355
289
356
it ( 'should handle stopPropagation' , async ( ) => {
0 commit comments