@@ -37,6 +37,7 @@ import {
3737} from '@angular/cdk/testing' ;
3838import { Subject } from 'rxjs/Subject' ;
3939import { ScrollDispatcher } from '@angular/cdk/scrolling' ;
40+ import { FocusMonitor } from '@angular/cdk/a11y' ;
4041
4142
4243describe ( 'MatMenu' , ( ) => {
@@ -105,42 +106,53 @@ describe('MatMenu', () => {
105106 expect ( overlayContainerElement . textContent ) . toBe ( '' ) ;
106107 } ) ) ;
107108
108- it ( 'should restore focus to the trigger when the menu was opened by keyboard' , fakeAsync ( ( ) => {
109- const fixture = TestBed . createComponent ( SimpleMenu ) ;
110- fixture . detectChanges ( ) ;
109+ it ( 'should restore focus to the trigger when the menu was opened by keyboard' ,
110+ fakeAsync ( inject ( [ FocusMonitor ] , ( focusMonitor : FocusMonitor ) => {
111+ const fixture = TestBed . createComponent ( SimpleMenu ) ;
112+ fixture . detectChanges ( ) ;
111113
112- const triggerEl = fixture . componentInstance . triggerEl . nativeElement ;
114+ const triggerEl = fixture . componentInstance . triggerEl . nativeElement ;
113115
114- // A click without a mousedown before it is considered a keyboard open.
115- triggerEl . click ( ) ;
116- fixture . detectChanges ( ) ;
116+ // A click without a mousedown before it is considered a keyboard open.
117+ focusMonitor . monitor ( triggerEl , false ) ;
118+ triggerEl . click ( ) ;
119+ fixture . detectChanges ( ) ;
117120
118- expect ( overlayContainerElement . querySelector ( '.mat-menu-panel' ) ) . toBeTruthy ( ) ;
121+ expect ( overlayContainerElement . querySelector ( '.mat-menu-panel' ) ) . toBeTruthy ( ) ;
119122
120- fixture . componentInstance . trigger . closeMenu ( ) ;
121- fixture . detectChanges ( ) ;
122- tick ( 500 ) ;
123+ fixture . componentInstance . trigger . closeMenu ( ) ;
124+ fixture . detectChanges ( ) ;
125+ tick ( 500 ) ;
126+ fixture . detectChanges ( ) ;
123127
124- expect ( document . activeElement ) . toBe ( triggerEl ) ;
125- } ) ) ;
128+ expect ( document . activeElement ) . toBe ( triggerEl ) ;
129+ expect ( triggerEl . classList ) . toContain ( 'cdk-program-focused' ) ;
130+ focusMonitor . stopMonitoring ( triggerEl ) ;
131+ } ) ) ) ;
126132
127- it ( 'should restore focus to the root trigger when the menu was opened by mouse' , fakeAsync ( ( ) => {
128- const fixture = TestBed . createComponent ( SimpleMenu ) ;
129- fixture . detectChanges ( ) ;
133+ it ( 'should restore focus to the root trigger when the menu was opened by mouse' ,
134+ fakeAsync ( inject ( [ FocusMonitor ] , ( focusMonitor : FocusMonitor ) => {
135+ const fixture = TestBed . createComponent ( SimpleMenu ) ;
136+ fixture . detectChanges ( ) ;
130137
131- const triggerEl = fixture . componentInstance . triggerEl . nativeElement ;
132- dispatchFakeEvent ( triggerEl , 'mousedown' ) ;
133- triggerEl . click ( ) ;
134- fixture . detectChanges ( ) ;
138+ const triggerEl = fixture . componentInstance . triggerEl . nativeElement ;
135139
136- expect ( overlayContainerElement . querySelector ( '.mat-menu-panel' ) ) . toBeTruthy ( ) ;
140+ dispatchFakeEvent ( triggerEl , 'mousedown' ) ;
141+ triggerEl . click ( ) ;
142+ fixture . detectChanges ( ) ;
137143
138- fixture . componentInstance . trigger . closeMenu ( ) ;
139- fixture . detectChanges ( ) ;
140- tick ( 500 ) ;
144+ expect ( overlayContainerElement . querySelector ( '.mat-menu-panel' ) ) . toBeTruthy ( ) ;
141145
142- expect ( document . activeElement ) . toBe ( triggerEl ) ;
143- } ) ) ;
146+ focusMonitor . monitor ( triggerEl , false ) ;
147+ fixture . componentInstance . trigger . closeMenu ( ) ;
148+ fixture . detectChanges ( ) ;
149+ tick ( 500 ) ;
150+ fixture . detectChanges ( ) ;
151+
152+ expect ( document . activeElement ) . toBe ( triggerEl ) ;
153+ expect ( triggerEl . classList ) . toContain ( 'cdk-mouse-focused' ) ;
154+ focusMonitor . stopMonitoring ( triggerEl ) ;
155+ } ) ) ) ;
144156
145157 it ( 'should close the menu when pressing ESCAPE' , fakeAsync ( ( ) => {
146158 const fixture = TestBed . createComponent ( SimpleMenu ) ;
0 commit comments