@@ -479,4 +479,66 @@ test.describe("Toolbar", () => {
479
479
await button3 . click ( ) ;
480
480
await expect ( button3 ) . toBeFocused ( ) ;
481
481
} ) ;
482
+
483
+ test ( "should not focus clicked item when focus is moved outside of the toolbar by an event handler" , async ( ) => {
484
+ await root . evaluate ( node => {
485
+ node . innerHTML = /* html */ `
486
+ <fast-toolbar>
487
+ <button slot="start">Start Slot Button</button>
488
+ <button id="toolbar-button-1">Button 1</button>
489
+ <button id="toolbar-button-1">Button 2</button>
490
+ <button>Button 3</button>
491
+ <button>Button 4</button>
492
+ <button>Button 5</button>
493
+ <button slot="end">End Slot Button</button>
494
+ </fast-toolbar>
495
+ <button id="outside-button">Button Outside Toolbar</button>
496
+ ` ;
497
+ } ) ;
498
+
499
+ const buttonOutsideToolbar = page . locator ( "button" , { hasText : "Button Outside Toolbar" } ) ;
500
+ const button1 = element . locator ( "button" , { hasText : "Button 1" } ) ;
501
+ const button2 = element . locator ( "button" , { hasText : "Button 2" } ) ;
502
+ const button3 = element . locator ( "button" , { hasText : "Button 3" } ) ;
503
+
504
+ const wasButton1Clicked = await button1 . evaluate ( node => new Promise ( resolve => {
505
+ node . addEventListener ( "mousedown" , ( e : MouseEvent ) => {
506
+ document . querySelector < HTMLButtonElement > ( '#outside-button' ) ?. focus ( ) ;
507
+ resolve ( true )
508
+ } )
509
+
510
+ node . dispatchEvent ( new MouseEvent ( "mousedown" , { bubbles : true , cancelable : true } ) )
511
+ } ) )
512
+
513
+ expect . soft ( wasButton1Clicked ) . toEqual ( true )
514
+ await expect . soft ( buttonOutsideToolbar ) . toBeFocused ( ) ;
515
+ buttonOutsideToolbar . evaluate ( node => { node . blur ( ) } )
516
+
517
+ const [ wasButton2Clicked ] = await Promise . all ( [
518
+ button2 . evaluate ( node => new Promise ( resolve => {
519
+ node . addEventListener ( "click" , ( ) => {
520
+ document . querySelector < HTMLButtonElement > ( '#outside-button' ) ?. focus ( ) ;
521
+ resolve ( true )
522
+ } )
523
+ } ) ) ,
524
+ button2 . click ( )
525
+ ] )
526
+
527
+ expect . soft ( wasButton2Clicked ) . toEqual ( true )
528
+ await expect . soft ( buttonOutsideToolbar ) . toBeFocused ( ) ;
529
+ buttonOutsideToolbar . evaluate ( node => { node . blur ( ) } )
530
+
531
+ const [ wasButton3Clicked ] = await Promise . all ( [
532
+ button3 . evaluate ( node => new Promise ( resolve => {
533
+ node . addEventListener ( "click" , ( ) => {
534
+ resolve ( true )
535
+ } )
536
+ } ) ) ,
537
+ button3 . click ( )
538
+ ] )
539
+
540
+ expect . soft ( wasButton3Clicked ) . toEqual ( true )
541
+ await expect . soft ( buttonOutsideToolbar ) . not . toBeFocused ( ) ;
542
+ await expect ( button3 ) . toBeFocused ( ) ;
543
+ } ) ;
482
544
} ) ;
0 commit comments