@@ -443,6 +443,50 @@ describe('Standalone Menu Pattern', () => {
443443 expect ( submenu . visible ( ) ) . toBe ( false ) ;
444444 } ) ;
445445 } ) ;
446+
447+ describe ( '#setDefaultStateEffect' , ( ) => {
448+ it ( 'should set default state if not interacted' , ( ) => {
449+ const items = menu . inputs . items ( ) as TestMenuItem [ ] ;
450+ menu . inputs . activeItem . set ( undefined ) ;
451+ items [ 0 ] . inputs . disabled . set ( true ) ;
452+ items [ 1 ] . inputs . disabled . set ( true ) ;
453+ menu . setDefaultStateEffect ( ) ;
454+ expect ( menu . inputs . activeItem ( ) ?. id ( ) ) . toBe ( items [ 0 ] . id ( ) ) ; // Should reset to item0 because softDisabled is true
455+ } ) ;
456+
457+ it ( 'should NOT set default state if keyboard interacted' , ( ) => {
458+ const items = menu . inputs . items ( ) as TestMenuItem [ ] ;
459+ menu . inputs . activeItem . set ( undefined ) ;
460+ menu . onKeydown ( down ( ) ) ; // Interaction (ArrowDown moves to item0)
461+
462+ items [ 0 ] . inputs . disabled . set ( true ) ;
463+ items [ 1 ] . inputs . disabled . set ( true ) ;
464+ menu . setDefaultStateEffect ( ) ;
465+ expect ( menu . inputs . activeItem ( ) ) . toBe ( items [ 0 ] ) ; // Should stay on item0
466+ } ) ;
467+
468+ it ( 'should NOT set default state if pointer interacted' , ( ) => {
469+ const items = menu . inputs . items ( ) as TestMenuItem [ ] ;
470+ menu . inputs . activeItem . set ( undefined ) ;
471+ menu . onMouseOver ( { target : items [ 0 ] . element ( ) } as unknown as MouseEvent ) ; // Interaction
472+
473+ items [ 0 ] . inputs . disabled . set ( true ) ;
474+ items [ 1 ] . inputs . disabled . set ( true ) ;
475+ menu . setDefaultStateEffect ( ) ;
476+ expect ( menu . inputs . activeItem ( ) ) . toBe ( items [ 0 ] ) ; // Should stay on item0
477+ } ) ;
478+
479+ it ( 'should NOT set default state if focus-in occurred' , ( ) => {
480+ const items = menu . inputs . items ( ) as TestMenuItem [ ] ;
481+ menu . inputs . activeItem . set ( undefined ) ;
482+ menu . onFocusIn ( ) ; // Interaction
483+
484+ items [ 0 ] . inputs . disabled . set ( true ) ;
485+ items [ 1 ] . inputs . disabled . set ( true ) ;
486+ menu . setDefaultStateEffect ( ) ;
487+ expect ( menu . inputs . activeItem ( ) ) . toBeUndefined ( ) ; // Should stay undefined
488+ } ) ;
489+ } ) ;
446490} ) ;
447491
448492describe ( 'Menu Trigger Pattern' , ( ) => {
@@ -918,5 +962,38 @@ describe('Menu Bar Pattern', () => {
918962 expect ( menubar . inputs . activeItem ( ) ) . toBe ( menubarItems [ 0 ] ) ;
919963 } ) ;
920964 } ) ;
965+
966+ describe ( '#setDefaultStateEffect' , ( ) => {
967+ it ( 'should set default state if not interacted' , ( ) => {
968+ const items = menubar . inputs . items ( ) as TestMenuItem [ ] ;
969+ menubar . inputs . activeItem . set ( undefined ) ;
970+ items [ 0 ] . inputs . disabled . set ( true ) ;
971+ items [ 1 ] . inputs . disabled . set ( true ) ;
972+ menubar . setDefaultStateEffect ( ) ;
973+ expect ( menubar . inputs . activeItem ( ) ?. id ( ) ) . toBe ( items [ 0 ] . id ( ) ) ; // Should reset to item0 because softDisabled is true
974+ } ) ;
975+
976+ it ( 'should NOT set default state if keyboard interacted' , ( ) => {
977+ const items = menubar . inputs . items ( ) as TestMenuItem [ ] ;
978+ menubar . inputs . activeItem . set ( undefined ) ;
979+ menubar . onKeydown ( down ( ) ) ; // Interaction (ArrowDown moves to item1)
980+
981+ items [ 0 ] . inputs . disabled . set ( true ) ;
982+ items [ 1 ] . inputs . disabled . set ( true ) ;
983+ menubar . setDefaultStateEffect ( ) ;
984+ expect ( menubar . inputs . activeItem ( ) ) . toBeUndefined ( ) ; // Should stay undefined
985+ } ) ;
986+
987+ it ( 'should NOT set default state if focus-in occurred' , ( ) => {
988+ const items = menubar . inputs . items ( ) as TestMenuItem [ ] ;
989+ menubar . inputs . activeItem . set ( undefined ) ;
990+ menubar . onFocusIn ( ) ; // Interaction (stays on item0)
991+
992+ items [ 0 ] . inputs . disabled . set ( true ) ;
993+ items [ 1 ] . inputs . disabled . set ( true ) ;
994+ menubar . setDefaultStateEffect ( ) ;
995+ expect ( menubar . inputs . activeItem ( ) ) . toBeUndefined ( ) ; // Should stay undefined
996+ } ) ;
997+ } ) ;
921998 } ) ;
922999} ) ;
0 commit comments