@@ -643,7 +643,9 @@ describe('Keyboard interactions', () => {
643
643
< Menu . Item as = "button" onClick = { clickHandler } >
644
644
Item B
645
645
</ Menu . Item >
646
- < Menu . Item as = "a" > Item C</ Menu . Item >
646
+ < Menu . Item >
647
+ < button onClick = { clickHandler } > Item C</ button >
648
+ </ Menu . Item >
647
649
</ Menu . Items >
648
650
</ Menu >
649
651
)
@@ -673,6 +675,18 @@ describe('Keyboard interactions', () => {
673
675
674
676
// Verify the button got "clicked"
675
677
expect ( clickHandler ) . toHaveBeenCalledTimes ( 1 )
678
+
679
+ // Click the menu button again
680
+ await click ( getMenuButton ( ) )
681
+
682
+ // Active the last menu item
683
+ await hover ( getMenuItems ( ) [ 2 ] )
684
+
685
+ // Close menu, and invoke the item
686
+ await press ( Keys . Enter )
687
+
688
+ // Verify the button got "clicked"
689
+ expect ( clickHandler ) . toHaveBeenCalledTimes ( 2 )
676
690
} )
677
691
)
678
692
@@ -2467,6 +2481,48 @@ describe('Mouse interactions', () => {
2467
2481
} )
2468
2482
)
2469
2483
2484
+ it (
2485
+ 'should be possible to click a menu item, which closes the menu and invokes the @click handler' ,
2486
+ suppressConsoleLogs ( async ( ) => {
2487
+ const clickHandler = jest . fn ( )
2488
+ render (
2489
+ < Menu >
2490
+ < Menu . Button > Trigger</ Menu . Button >
2491
+ < Menu . Items >
2492
+ < Menu . Item as = "a" > alice</ Menu . Item >
2493
+ < Menu . Item as = "button" onClick = { clickHandler } >
2494
+ bob
2495
+ </ Menu . Item >
2496
+ < Menu . Item >
2497
+ < button onClick = { clickHandler } > charlie</ button >
2498
+ </ Menu . Item >
2499
+ </ Menu . Items >
2500
+ </ Menu >
2501
+ )
2502
+
2503
+ // Open menu
2504
+ await click ( getMenuButton ( ) )
2505
+ assertMenu ( getMenu ( ) , { state : MenuState . Open } )
2506
+
2507
+ // We should be able to click the first item
2508
+ await click ( getMenuItems ( ) [ 1 ] )
2509
+ assertMenu ( getMenu ( ) , { state : MenuState . Closed } )
2510
+
2511
+ // Verify the callback has been called
2512
+ expect ( clickHandler ) . toHaveBeenCalledTimes ( 1 )
2513
+
2514
+ // Let's re-open the window for now
2515
+ await click ( getMenuButton ( ) )
2516
+
2517
+ // Click the last item, which should close and invoke the handler
2518
+ await click ( getMenuItems ( ) [ 2 ] )
2519
+ assertMenu ( getMenu ( ) , { state : MenuState . Closed } )
2520
+
2521
+ // Verify the callback has been called
2522
+ expect ( clickHandler ) . toHaveBeenCalledTimes ( 2 )
2523
+ } )
2524
+ )
2525
+
2470
2526
it (
2471
2527
'should be possible to click a disabled menu item, which is a no-op' ,
2472
2528
suppressConsoleLogs ( async ( ) => {
@@ -2567,8 +2623,8 @@ describe('Mouse interactions', () => {
2567
2623
< Menu . Item as = "a" onClick = { clickHandler } disabled >
2568
2624
bob
2569
2625
</ Menu . Item >
2570
- < Menu . Item as = "a" onClick = { clickHandler } >
2571
- charlie
2626
+ < Menu . Item disabled >
2627
+ < button onClick = { clickHandler } > charlie</ button >
2572
2628
</ Menu . Item >
2573
2629
</ Menu . Items >
2574
2630
</ Menu >
@@ -2581,9 +2637,11 @@ describe('Mouse interactions', () => {
2581
2637
const items = getMenuItems ( )
2582
2638
2583
2639
await focus ( items [ 0 ] )
2584
- await focus ( items [ 1 ] )
2585
- await press ( Keys . Enter )
2640
+ await click ( items [ 1 ] )
2641
+ expect ( clickHandler ) . not . toHaveBeenCalled ( )
2586
2642
2643
+ // Activate the last item
2644
+ await click ( getMenuItems ( ) [ 2 ] )
2587
2645
expect ( clickHandler ) . not . toHaveBeenCalled ( )
2588
2646
} )
2589
2647
)
0 commit comments