@@ -817,6 +817,37 @@ describe('MDC-based MatMenu', () => {
817817 flush ( ) ;
818818 } ) ) ;
819819
820+ it ( 'should sync the focus order when an item is focused programmatically' , fakeAsync ( ( ) => {
821+ const fixture = createComponent ( SimpleMenuWithRepeater ) ;
822+
823+ // Add some more items to work with.
824+ for ( let i = 0 ; i < 5 ; i ++ ) {
825+ fixture . componentInstance . items . push ( { label : `Extra ${ i } ` , disabled : false } ) ;
826+ }
827+
828+ fixture . detectChanges ( ) ;
829+ fixture . componentInstance . trigger . openMenu ( ) ;
830+ fixture . detectChanges ( ) ;
831+ tick ( 500 ) ;
832+
833+ const menuPanel = document . querySelector ( '.mat-mdc-menu-panel' ) ! ;
834+ const items = menuPanel . querySelectorAll ( '.mat-mdc-menu-panel [mat-menu-item]' ) ;
835+
836+ expect ( document . activeElement ) . toBe ( items [ 0 ] , 'Expected first item to be focused on open' ) ;
837+
838+ fixture . componentInstance . itemInstances . toArray ( ) [ 3 ] . focus ( ) ;
839+ fixture . detectChanges ( ) ;
840+
841+ expect ( document . activeElement ) . toBe ( items [ 3 ] , 'Expected fourth item to be focused' ) ;
842+
843+ dispatchKeyboardEvent ( menuPanel , 'keydown' , DOWN_ARROW ) ;
844+ fixture . detectChanges ( ) ;
845+ tick ( ) ;
846+
847+ expect ( document . activeElement ) . toBe ( items [ 4 ] , 'Expected fifth item to be focused' ) ;
848+ flush ( ) ;
849+ } ) ) ;
850+
820851 it ( 'should focus the menu panel if all items are disabled' , fakeAsync ( ( ) => {
821852 const fixture = createComponent ( SimpleMenuWithRepeater , [ ] , [ FakeIcon ] ) ;
822853 fixture . componentInstance . items . forEach ( item => item . disabled = true ) ;
@@ -2443,5 +2474,6 @@ class MenuWithCheckboxItems {
24432474class SimpleMenuWithRepeater {
24442475 @ViewChild ( MatMenuTrigger ) trigger : MatMenuTrigger ;
24452476 @ViewChild ( MatMenu ) menu : MatMenu ;
2477+ @ViewChildren ( MatMenuItem ) itemInstances : QueryList < MatMenuItem > ;
24462478 items = [ { label : 'Pizza' , disabled : false } , { label : 'Pasta' , disabled : false } ] ;
24472479}
0 commit comments