@@ -37,6 +37,7 @@ import {
37
37
} from '@angular/cdk/testing' ;
38
38
import { Subject } from 'rxjs/Subject' ;
39
39
import { ScrollDispatcher } from '@angular/cdk/scrolling' ;
40
+ import { FocusMonitor } from '@angular/cdk/a11y' ;
40
41
41
42
42
43
describe ( 'MatMenu' , ( ) => {
@@ -105,42 +106,53 @@ describe('MatMenu', () => {
105
106
expect ( overlayContainerElement . textContent ) . toBe ( '' ) ;
106
107
} ) ) ;
107
108
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 ( ) ;
111
113
112
- const triggerEl = fixture . componentInstance . triggerEl . nativeElement ;
114
+ const triggerEl = fixture . componentInstance . triggerEl . nativeElement ;
113
115
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 ( ) ;
117
120
118
- expect ( overlayContainerElement . querySelector ( '.mat-menu-panel' ) ) . toBeTruthy ( ) ;
121
+ expect ( overlayContainerElement . querySelector ( '.mat-menu-panel' ) ) . toBeTruthy ( ) ;
119
122
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 ( ) ;
123
127
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
+ } ) ) ) ;
126
132
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 ( ) ;
130
137
131
- const triggerEl = fixture . componentInstance . triggerEl . nativeElement ;
132
- dispatchFakeEvent ( triggerEl , 'mousedown' ) ;
133
- triggerEl . click ( ) ;
134
- fixture . detectChanges ( ) ;
138
+ const triggerEl = fixture . componentInstance . triggerEl . nativeElement ;
135
139
136
- expect ( overlayContainerElement . querySelector ( '.mat-menu-panel' ) ) . toBeTruthy ( ) ;
140
+ dispatchFakeEvent ( triggerEl , 'mousedown' ) ;
141
+ triggerEl . click ( ) ;
142
+ fixture . detectChanges ( ) ;
137
143
138
- fixture . componentInstance . trigger . closeMenu ( ) ;
139
- fixture . detectChanges ( ) ;
140
- tick ( 500 ) ;
144
+ expect ( overlayContainerElement . querySelector ( '.mat-menu-panel' ) ) . toBeTruthy ( ) ;
141
145
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
+ } ) ) ) ;
144
156
145
157
it ( 'should close the menu when pressing ESCAPE' , fakeAsync ( ( ) => {
146
158
const fixture = TestBed . createComponent ( SimpleMenu ) ;
0 commit comments