@@ -98,7 +98,7 @@ describe('MdMenu', () => {
98
98
expect ( overlayContainerElement . textContent ) . toBe ( '' ) ;
99
99
} ) ) ;
100
100
101
- it ( 'should close the menu when pressing escape ' , fakeAsync ( ( ) => {
101
+ it ( 'should close the menu when pressing ESCAPE ' , fakeAsync ( ( ) => {
102
102
const fixture = TestBed . createComponent ( SimpleMenu ) ;
103
103
fixture . detectChanges ( ) ;
104
104
fixture . componentInstance . trigger . openMenu ( ) ;
@@ -494,26 +494,40 @@ describe('MdMenu', () => {
494
494
menuItem . click ( ) ;
495
495
fixture . detectChanges ( ) ;
496
496
497
- expect ( fixture . componentInstance . closeCallback ) . toHaveBeenCalled ( ) ;
497
+ expect ( fixture . componentInstance . closeCallback ) . toHaveBeenCalledWith ( 'click' ) ;
498
+ expect ( fixture . componentInstance . closeCallback ) . toHaveBeenCalledTimes ( 1 ) ;
498
499
} ) ;
499
500
500
501
it ( 'should emit a close event when the backdrop is clicked' , ( ) => {
501
- const backdrop = < HTMLElement > overlayContainerElement . querySelector ( '.cdk-overlay-backdrop' ) ;
502
+ const backdrop = overlayContainerElement
503
+ . querySelector ( '.cdk-overlay-backdrop' ) as HTMLElement ;
502
504
503
505
backdrop . click ( ) ;
504
506
fixture . detectChanges ( ) ;
505
507
506
- expect ( fixture . componentInstance . closeCallback ) . toHaveBeenCalled ( ) ;
508
+ expect ( fixture . componentInstance . closeCallback ) . toHaveBeenCalledWith ( undefined ) ;
509
+ expect ( fixture . componentInstance . closeCallback ) . toHaveBeenCalledTimes ( 1 ) ;
510
+ } ) ;
511
+
512
+ it ( 'should emit an event when pressing ESCAPE' , ( ) => {
513
+ const menu = overlayContainerElement . querySelector ( '.mat-menu-panel' ) as HTMLElement ;
514
+
515
+ dispatchKeyboardEvent ( menu , 'keydown' , ESCAPE ) ;
516
+ fixture . detectChanges ( ) ;
517
+
518
+ expect ( fixture . componentInstance . closeCallback ) . toHaveBeenCalledWith ( 'keydown' ) ;
519
+ expect ( fixture . componentInstance . closeCallback ) . toHaveBeenCalledTimes ( 1 ) ;
507
520
} ) ;
508
521
509
522
it ( 'should complete the callback when the menu is destroyed' , ( ) => {
510
- let emitCallback = jasmine . createSpy ( 'emit callback' ) ;
511
- let completeCallback = jasmine . createSpy ( 'complete callback' ) ;
523
+ const emitCallback = jasmine . createSpy ( 'emit callback' ) ;
524
+ const completeCallback = jasmine . createSpy ( 'complete callback' ) ;
512
525
513
526
fixture . componentInstance . menu . close . subscribe ( emitCallback , null , completeCallback ) ;
514
527
fixture . destroy ( ) ;
515
528
516
- expect ( emitCallback ) . toHaveBeenCalled ( ) ;
529
+ expect ( emitCallback ) . toHaveBeenCalledWith ( undefined ) ;
530
+ expect ( emitCallback ) . toHaveBeenCalledTimes ( 1 ) ;
517
531
expect ( completeCallback ) . toHaveBeenCalled ( ) ;
518
532
} ) ;
519
533
} ) ;
@@ -995,6 +1009,9 @@ describe('MdMenu', () => {
995
1009
tick ( 500 ) ;
996
1010
997
1011
expect ( overlay . querySelectorAll ( '.mat-menu-panel' ) . length ) . toBe ( 0 , 'Expected no open menus' ) ;
1012
+ expect ( instance . rootCloseCallback ) . toHaveBeenCalledTimes ( 1 ) ;
1013
+ expect ( instance . levelOneCloseCallback ) . toHaveBeenCalledTimes ( 1 ) ;
1014
+ expect ( instance . levelTwoCloseCallback ) . toHaveBeenCalledTimes ( 1 ) ;
998
1015
} ) ) ;
999
1016
1000
1017
it ( 'should toggle a nested menu when its trigger is added after init' , fakeAsync ( ( ) => {
@@ -1059,7 +1076,7 @@ describe('MdMenu default overrides', () => {
1059
1076
@Component ( {
1060
1077
template : `
1061
1078
<button [mdMenuTriggerFor]="menu" #triggerEl>Toggle menu</button>
1062
- <md-menu class="custom-one custom-two" #menu="mdMenu" (close)="closeCallback()">
1079
+ <md-menu class="custom-one custom-two" #menu="mdMenu" (close)="closeCallback($event )">
1063
1080
<button md-menu-item> Item </button>
1064
1081
<button md-menu-item disabled> Disabled </button>
1065
1082
</md-menu>
@@ -1152,7 +1169,7 @@ class CustomMenu {
1152
1169
[mdMenuTriggerFor]="levelTwo"
1153
1170
#alternateTrigger="mdMenuTrigger">Toggle alternate menu</button>
1154
1171
1155
- <md-menu #root="mdMenu">
1172
+ <md-menu #root="mdMenu" (close)="rootCloseCallback($event)" >
1156
1173
<button md-menu-item
1157
1174
id="level-one-trigger"
1158
1175
[mdMenuTriggerFor]="levelOne"
@@ -1165,7 +1182,7 @@ class CustomMenu {
1165
1182
#lazyTrigger="mdMenuTrigger">Three</button>
1166
1183
</md-menu>
1167
1184
1168
- <md-menu #levelOne="mdMenu">
1185
+ <md-menu #levelOne="mdMenu" (close)="levelOneCloseCallback($event)" >
1169
1186
<button md-menu-item>Four</button>
1170
1187
<button md-menu-item
1171
1188
id="level-two-trigger"
@@ -1174,7 +1191,7 @@ class CustomMenu {
1174
1191
<button md-menu-item>Six</button>
1175
1192
</md-menu>
1176
1193
1177
- <md-menu #levelTwo="mdMenu">
1194
+ <md-menu #levelTwo="mdMenu" (close)="levelTwoCloseCallback($event)" >
1178
1195
<button md-menu-item>Seven</button>
1179
1196
<button md-menu-item>Eight</button>
1180
1197
<button md-menu-item>Nine</button>
@@ -1192,12 +1209,15 @@ class NestedMenu {
1192
1209
@ViewChild ( 'rootTrigger' ) rootTrigger : MdMenuTrigger ;
1193
1210
@ViewChild ( 'rootTriggerEl' ) rootTriggerEl : ElementRef ;
1194
1211
@ViewChild ( 'alternateTrigger' ) alternateTrigger : MdMenuTrigger ;
1212
+ readonly rootCloseCallback = jasmine . createSpy ( 'root menu closed callback' ) ;
1195
1213
1196
1214
@ViewChild ( 'levelOne' ) levelOneMenu : MdMenu ;
1197
1215
@ViewChild ( 'levelOneTrigger' ) levelOneTrigger : MdMenuTrigger ;
1216
+ readonly levelOneCloseCallback = jasmine . createSpy ( 'level one menu closed callback' ) ;
1198
1217
1199
1218
@ViewChild ( 'levelTwo' ) levelTwoMenu : MdMenu ;
1200
1219
@ViewChild ( 'levelTwoTrigger' ) levelTwoTrigger : MdMenuTrigger ;
1220
+ readonly levelTwoCloseCallback = jasmine . createSpy ( 'level one menu closed callback' ) ;
1201
1221
1202
1222
@ViewChild ( 'lazy' ) lazyMenu : MdMenu ;
1203
1223
@ViewChild ( 'lazyTrigger' ) lazyTrigger : MdMenuTrigger ;
0 commit comments