@@ -210,7 +210,7 @@ describe('events', () => {
210210 expect ( handlePointerOut ) . toHaveBeenCalled ( )
211211 } )
212212
213- it ( 'can handle onDragOverEnter & onDragOverLeave' , async ( ) => {
213+ it ( 'can handle dragover events via onDragOverEnter & onDragOverLeave' , async ( ) => {
214214 const handleDragOverEnter = jest . fn ( )
215215 const handleDragOverLeave = jest . fn ( )
216216
@@ -226,7 +226,6 @@ describe('events', () => {
226226 } )
227227
228228 // 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
230229 // however, @react-testing/library does simulate it
231230 let evt = createEvent . dragOver ( getContainer ( ) )
232231 //@ts -ignore
@@ -248,12 +247,80 @@ describe('events', () => {
248247 expect ( handleDragOverLeave ) . toHaveBeenCalled ( )
249248 } )
250249
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 ( ) => {
252318 const handleOnDrop = jest . fn ( )
319+ const handleOnDropMissed = jest . fn ( )
253320
254321 await act ( async ( ) => {
255322 render (
256- < Canvas >
323+ < Canvas onDropMissed = { handleOnDropMissed } >
257324 < mesh onDrop = { handleOnDrop } >
258325 < boxGeometry args = { [ 2 , 2 ] } />
259326 < meshBasicMaterial />
@@ -263,7 +330,6 @@ describe('events', () => {
263330 } )
264331
265332 // 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
267333 // however, @react-testing/library does simulate it
268334 let evt = createEvent . drop ( getContainer ( ) )
269335 //@ts -ignore
@@ -284,6 +350,7 @@ describe('events', () => {
284350
285351 // second event shouldn't register
286352 expect ( handleOnDrop ) . toHaveBeenCalledTimes ( 1 )
353+ expect ( handleOnDropMissed ) . toHaveBeenCalled ( )
287354 } )
288355
289356 it ( 'should handle stopPropagation' , async ( ) => {
0 commit comments