@@ -298,6 +298,67 @@ describe('Trigger.Basic', () => {
298298 expect ( isPopupHidden ( ) ) . toBeTruthy ( ) ;
299299 } ) ;
300300
301+ it ( 'cancels refresh close detection when mouse returns to safe hover area' , ( ) => {
302+ const { container } = render (
303+ < Trigger
304+ action = { [ 'hover' ] }
305+ mouseLeaveDelay = { 0.1 }
306+ popup = { < strong > trigger</ strong > }
307+ >
308+ < div className = "target" > hover</ div >
309+ </ Trigger > ,
310+ ) ;
311+
312+ const target = container . querySelector ( '.target' ) ;
313+
314+ fireEvent . mouseEnter ( target , { clientX : 50 , clientY : 10 } ) ;
315+ act ( ( ) => jest . runAllTimers ( ) ) ;
316+
317+ const popup = document . querySelector ( '.rc-trigger-popup' ) ;
318+
319+ mockRect ( target , { left : 0 , top : 0 , width : 100 , height : 20 } ) ;
320+ mockRect ( popup , { left : 20 , top : 60 , width : 60 , height : 30 } ) ;
321+
322+ fireEvent . mouseLeave ( target , { clientX : 50 , clientY : 20 } ) ;
323+ fireEvent . mouseMove ( document , { clientX : 150 , clientY : 40 } ) ;
324+ fireEvent . mouseMove ( document , { clientX : 50 , clientY : 40 } ) ;
325+
326+ act ( ( ) => jest . advanceTimersByTime ( 100 ) ) ;
327+
328+ expect ( isPopupHidden ( ) ) . toBeFalsy ( ) ;
329+ } ) ;
330+
331+ it ( 'keeps pending refresh close detection while mouse remains unsafe' , ( ) => {
332+ const { container } = render (
333+ < Trigger
334+ action = { [ 'hover' ] }
335+ mouseLeaveDelay = { 0.1 }
336+ popup = { < strong > trigger</ strong > }
337+ >
338+ < div className = "target" > hover</ div >
339+ </ Trigger > ,
340+ ) ;
341+
342+ const target = container . querySelector ( '.target' ) ;
343+
344+ fireEvent . mouseEnter ( target , { clientX : 50 , clientY : 10 } ) ;
345+ act ( ( ) => jest . runAllTimers ( ) ) ;
346+
347+ const popup = document . querySelector ( '.rc-trigger-popup' ) ;
348+
349+ mockRect ( target , { left : 0 , top : 0 , width : 100 , height : 20 } ) ;
350+ mockRect ( popup , { left : 20 , top : 60 , width : 60 , height : 30 } ) ;
351+
352+ fireEvent . mouseLeave ( target , { clientX : 50 , clientY : 20 } ) ;
353+ fireEvent . mouseMove ( document , { clientX : 50 , clientY : 150 } ) ;
354+ fireEvent . mouseMove ( document , { clientX : 50 , clientY : 150 } ) ;
355+
356+ mockRect ( popup , { left : 20 , top : 60 , width : 60 , height : 200 } ) ;
357+ act ( ( ) => jest . advanceTimersByTime ( 100 ) ) ;
358+
359+ expect ( isPopupHidden ( ) ) . toBeFalsy ( ) ;
360+ } ) ;
361+
301362 it ( 'waits for mousemove to start refresh close detection after safe hover area disappears' , ( ) => {
302363 const { container } = render (
303364 < Trigger
0 commit comments