@@ -42,6 +42,7 @@ import {
4242 provideFakeDirectionality ,
4343} from '../../cdk/testing/private' ;
4444import { MATERIAL_ANIMATIONS , MatRipple } from '../core' ;
45+ import { MatButton } from '@angular/material/button' ;
4546import { MatMenu , MatMenuItem } from './index' ;
4647import {
4748 MAT_MENU_DEFAULT_OPTIONS ,
@@ -1279,6 +1280,23 @@ describe('MatMenu', () => {
12791280 } ) ) ;
12801281 } ) ;
12811282
1283+ it ( 'does not open if the trigger element is disabled (including disabledInteractive)' , fakeAsync ( ( ) => {
1284+ const fixture = TestBed . createComponent ( DisabledMenu ) ;
1285+ fixture . detectChanges ( ) ;
1286+
1287+ const trigger = fixture . componentInstance . triggerEl . nativeElement ;
1288+ trigger . click ( ) ;
1289+ fixture . detectChanges ( ) ;
1290+ tick ( 500 ) ;
1291+ expect ( overlayContainerElement . querySelector ( '.mat-mdc-menu-panel [mat-menu-item]' ) ) . toBeNull ( ) ;
1292+
1293+ dispatchKeyboardEvent ( trigger , 'keydown' , ENTER ) ;
1294+ trigger . click ( ) ;
1295+ fixture . detectChanges ( ) ;
1296+ tick ( 500 ) ;
1297+ expect ( overlayContainerElement . querySelector ( '.mat-mdc-menu-panel [mat-menu-item]' ) ) . toBeNull ( ) ;
1298+ } ) ) ;
1299+
12821300 describe ( 'positions' , ( ) => {
12831301 let fixture : ComponentFixture < PositionedMenu > ;
12841302 let trigger : HTMLElement ;
@@ -2634,6 +2652,20 @@ class SimpleMenu {
26342652} )
26352653class SimpleMenuOnPush extends SimpleMenu { }
26362654
2655+ @Component ( {
2656+ template : `
2657+ <button mat-button disabled [disabledInteractive]="true"
2658+ [matMenuTriggerFor]="menu" #triggerEl>Toggle menu</button>
2659+ <mat-menu #menu="matMenu">
2660+ <button mat-menu-item> Action! </button>
2661+ </mat-menu>
2662+ ` ,
2663+ imports : [ MatButton , MatMenuTrigger , MatMenu , MatMenuItem ] ,
2664+ } )
2665+ class DisabledMenu {
2666+ @ViewChild ( 'triggerEl' , { read : ElementRef } ) triggerEl ! : ElementRef < HTMLElement > ;
2667+ }
2668+
26372669@Component ( {
26382670 template : `
26392671 <button [matMenuTriggerFor]="menu" #triggerEl>Toggle menu</button>
@@ -2666,7 +2698,7 @@ interface TestableMenu {
26662698class OverlapMenu implements TestableMenu {
26672699 @Input ( ) overlapTrigger : boolean = false ;
26682700 @ViewChild ( MatMenuTrigger ) trigger ! : MatMenuTrigger ;
2669- @ViewChild ( 'triggerEl' ) triggerEl ! : ElementRef < HTMLElement > ;
2701+ @ViewChild ( 'triggerEl' , { read : ElementRef } ) triggerEl ! : ElementRef < HTMLElement > ;
26702702}
26712703
26722704@Component ( {
0 commit comments