@@ -92,6 +92,7 @@ describe("createPickerModule", () => {
9292 picker . enablePickMode ( ) ;
9393 picker . enablePickMode ( ) ;
9494 expect ( document . body . classList . contains ( "__hf-pick-active" ) ) . toBe ( true ) ;
95+ picker . disablePickMode ( ) ;
9596 } ) ;
9697
9798 it ( "disabling when not active is safe" , ( ) => {
@@ -353,6 +354,39 @@ describe("createPickerModule", () => {
353354 } ) ;
354355 } ) ;
355356
357+ describe ( "pick mode under a resting pointer" , ( ) => {
358+ const at = ( id : string ) => document . getElementById ( id ) ! ;
359+ const move = ( ) =>
360+ document . dispatchEvent (
361+ new MouseEvent ( "mousemove" , { clientX : 10 , clientY : 10 , bubbles : true } ) ,
362+ ) ;
363+
364+ it ( "keeps the highlight on what the pointer is over, and offers it on click" , ( ) => {
365+ const postMessage = createMockPostMessage ( ) ;
366+ const picker = createPickerModule ( { postMessage } ) ;
367+ picker . installPickerApi ( ) ;
368+ document . body . innerHTML = `<div id="bg" style="background: rgb(245, 238, 220)"><h1 id="title">Hi</h1></div>` ;
369+ const restore = emulateHitTest ( ( ) => [ at ( "title" ) , at ( "bg" ) ] ) ;
370+ try {
371+ picker . enablePickMode ( ) ;
372+ move ( ) ;
373+ move ( ) ;
374+ expect ( at ( "title" ) . classList . contains ( "__hf-pick-highlight" ) ) . toBe ( true ) ;
375+ expect ( at ( "bg" ) . classList . contains ( "__hf-pick-highlight" ) ) . toBe ( false ) ;
376+ document . dispatchEvent (
377+ new MouseEvent ( "click" , { clientX : 10 , clientY : 10 , bubbles : true } ) ,
378+ ) ;
379+ const picked = postMessage . mock . calls
380+ . map ( ( [ message ] ) => message )
381+ . find ( ( message ) => message . type === "element-pick-candidates" ) ;
382+ expect ( picked . candidates . map ( ( c : any ) => c . selector ) ) . toEqual ( [ "#title" , "#bg" ] ) ;
383+ } finally {
384+ picker . disablePickMode ( ) ;
385+ restore ( ) ;
386+ }
387+ } ) ;
388+ } ) ;
389+
356390 describe ( "escape key handler" , ( ) => {
357391 it ( "disables pick mode and posts cancel message on Escape" , ( ) => {
358392 const postMessage = createMockPostMessage ( ) ;
@@ -377,6 +411,7 @@ describe("createPickerModule", () => {
377411
378412 document . dispatchEvent ( new KeyboardEvent ( "keydown" , { key : "Enter" , bubbles : true } ) ) ;
379413 expect ( document . body . classList . contains ( "__hf-pick-active" ) ) . toBe ( true ) ;
414+ picker . disablePickMode ( ) ;
380415 } ) ;
381416 } ) ;
382417
0 commit comments