@@ -231,6 +231,26 @@ describe('MatMenu', () => {
231
231
expect ( document . activeElement ) . toBe ( triggerEl ) ;
232
232
} ) ;
233
233
234
+ it ( 'should move focus to another item if the active item is destroyed' , fakeAsync ( ( ) => {
235
+ const fixture = createComponent ( MenuWithRepeatedItems , [ ] , [ FakeIcon ] ) ;
236
+ fixture . detectChanges ( ) ;
237
+ const triggerEl = fixture . componentInstance . triggerEl . nativeElement ;
238
+
239
+ triggerEl . click ( ) ;
240
+ fixture . detectChanges ( ) ;
241
+ tick ( 500 ) ;
242
+
243
+ const items = overlayContainerElement . querySelectorAll ( '.mat-menu-panel .mat-menu-item' ) ;
244
+
245
+ expect ( document . activeElement ) . toBe ( items [ 0 ] ) ;
246
+
247
+ fixture . componentInstance . items . shift ( ) ;
248
+ fixture . detectChanges ( ) ;
249
+ tick ( 500 ) ;
250
+
251
+ expect ( document . activeElement ) . toBe ( items [ 1 ] ) ;
252
+ } ) ) ;
253
+
234
254
it ( 'should be able to set a custom class on the backdrop' , fakeAsync ( ( ) => {
235
255
const fixture = createComponent ( SimpleMenu , [ ] , [ FakeIcon ] ) ;
236
256
@@ -288,6 +308,7 @@ describe('MatMenu', () => {
288
308
// Add 50 items to make the menu scrollable
289
309
fixture . componentInstance . extraItems = new Array ( 50 ) . fill ( 'Hello there' ) ;
290
310
fixture . detectChanges ( ) ;
311
+ tick ( 50 ) ;
291
312
292
313
const triggerEl = fixture . componentInstance . triggerEl . nativeElement ;
293
314
dispatchFakeEvent ( triggerEl , 'mousedown' ) ;
@@ -2515,7 +2536,6 @@ class DynamicPanelMenu {
2515
2536
@ViewChild ( 'two' ) secondMenu : MatMenu ;
2516
2537
}
2517
2538
2518
-
2519
2539
@Component ( {
2520
2540
template : `
2521
2541
<button [matMenuTriggerFor]="menu">Toggle menu</button>
@@ -2590,3 +2610,18 @@ class LazyMenuWithOnPush {
2590
2610
@ViewChild ( 'triggerEl' , { read : ElementRef } ) rootTrigger : ElementRef ;
2591
2611
@ViewChild ( 'menuItem' , { read : ElementRef } ) menuItemWithSubmenu : ElementRef ;
2592
2612
}
2613
+
2614
+ @Component ( {
2615
+ template : `
2616
+ <button [matMenuTriggerFor]="menu" #triggerEl>Toggle menu</button>
2617
+ <mat-menu #menu="matMenu">
2618
+ <button *ngFor="let item of items" mat-menu-item>{{item}}</button>
2619
+ </mat-menu>
2620
+ `
2621
+ } )
2622
+ class MenuWithRepeatedItems {
2623
+ @ViewChild ( MatMenuTrigger , { static : false } ) trigger : MatMenuTrigger ;
2624
+ @ViewChild ( 'triggerEl' , { static : false } ) triggerEl : ElementRef < HTMLElement > ;
2625
+ @ViewChild ( MatMenu , { static : false } ) menu : MatMenu ;
2626
+ items = [ 'One' , 'Two' , 'Three' ] ;
2627
+ }
0 commit comments