@@ -97,7 +97,7 @@ describe('MdMenu', () => {
97
97
expect ( overlayContainerElement . textContent ) . toBe ( '' ) ;
98
98
} ) ) ;
99
99
100
- it ( 'should close the menu when pressing escape ' , fakeAsync ( ( ) => {
100
+ it ( 'should close the menu when pressing ESCAPE ' , fakeAsync ( ( ) => {
101
101
const fixture = TestBed . createComponent ( SimpleMenu ) ;
102
102
fixture . detectChanges ( ) ;
103
103
fixture . componentInstance . trigger . openMenu ( ) ;
@@ -493,26 +493,40 @@ describe('MdMenu', () => {
493
493
menuItem . click ( ) ;
494
494
fixture . detectChanges ( ) ;
495
495
496
- expect ( fixture . componentInstance . closeCallback ) . toHaveBeenCalled ( ) ;
496
+ expect ( fixture . componentInstance . closeCallback ) . toHaveBeenCalledWith ( 'click' ) ;
497
+ expect ( fixture . componentInstance . closeCallback ) . toHaveBeenCalledTimes ( 1 ) ;
497
498
} ) ;
498
499
499
500
it ( 'should emit a close event when the backdrop is clicked' , ( ) => {
500
- const backdrop = < HTMLElement > overlayContainerElement . querySelector ( '.cdk-overlay-backdrop' ) ;
501
+ const backdrop = overlayContainerElement
502
+ . querySelector ( '.cdk-overlay-backdrop' ) as HTMLElement ;
501
503
502
504
backdrop . click ( ) ;
503
505
fixture . detectChanges ( ) ;
504
506
505
- expect ( fixture . componentInstance . closeCallback ) . toHaveBeenCalled ( ) ;
507
+ expect ( fixture . componentInstance . closeCallback ) . toHaveBeenCalledWith ( undefined ) ;
508
+ expect ( fixture . componentInstance . closeCallback ) . toHaveBeenCalledTimes ( 1 ) ;
509
+ } ) ;
510
+
511
+ it ( 'should emit an event when pressing ESCAPE' , ( ) => {
512
+ const menu = overlayContainerElement . querySelector ( '.mat-menu-panel' ) as HTMLElement ;
513
+
514
+ dispatchKeyboardEvent ( menu , 'keydown' , ESCAPE ) ;
515
+ fixture . detectChanges ( ) ;
516
+
517
+ expect ( fixture . componentInstance . closeCallback ) . toHaveBeenCalledWith ( 'keydown' ) ;
518
+ expect ( fixture . componentInstance . closeCallback ) . toHaveBeenCalledTimes ( 1 ) ;
506
519
} ) ;
507
520
508
521
it ( 'should complete the callback when the menu is destroyed' , ( ) => {
509
- let emitCallback = jasmine . createSpy ( 'emit callback' ) ;
510
- let completeCallback = jasmine . createSpy ( 'complete callback' ) ;
522
+ const emitCallback = jasmine . createSpy ( 'emit callback' ) ;
523
+ const completeCallback = jasmine . createSpy ( 'complete callback' ) ;
511
524
512
525
fixture . componentInstance . menu . close . subscribe ( emitCallback , null , completeCallback ) ;
513
526
fixture . destroy ( ) ;
514
527
515
- expect ( emitCallback ) . toHaveBeenCalled ( ) ;
528
+ expect ( emitCallback ) . toHaveBeenCalledWith ( undefined ) ;
529
+ expect ( emitCallback ) . toHaveBeenCalledTimes ( 1 ) ;
516
530
expect ( completeCallback ) . toHaveBeenCalled ( ) ;
517
531
} ) ;
518
532
} ) ;
@@ -994,6 +1008,9 @@ describe('MdMenu', () => {
994
1008
tick ( 500 ) ;
995
1009
996
1010
expect ( overlay . querySelectorAll ( '.mat-menu-panel' ) . length ) . toBe ( 0 , 'Expected no open menus' ) ;
1011
+ expect ( instance . rootCloseCallback ) . toHaveBeenCalledTimes ( 1 ) ;
1012
+ expect ( instance . levelOneCloseCallback ) . toHaveBeenCalledTimes ( 1 ) ;
1013
+ expect ( instance . levelTwoCloseCallback ) . toHaveBeenCalledTimes ( 1 ) ;
997
1014
} ) ) ;
998
1015
999
1016
it ( 'should toggle a nested menu when its trigger is added after init' , fakeAsync ( ( ) => {
@@ -1044,7 +1061,7 @@ describe('MdMenu default overrides', () => {
1044
1061
@Component ( {
1045
1062
template : `
1046
1063
<button [mdMenuTriggerFor]="menu" #triggerEl>Toggle menu</button>
1047
- <md-menu class="custom-one custom-two" #menu="mdMenu" (close)="closeCallback()">
1064
+ <md-menu class="custom-one custom-two" #menu="mdMenu" (close)="closeCallback($event )">
1048
1065
<button md-menu-item> Item </button>
1049
1066
<button md-menu-item disabled> Disabled </button>
1050
1067
</md-menu>
@@ -1137,7 +1154,7 @@ class CustomMenu {
1137
1154
[mdMenuTriggerFor]="levelTwo"
1138
1155
#alternateTrigger="mdMenuTrigger">Toggle alternate menu</button>
1139
1156
1140
- <md-menu #root="mdMenu">
1157
+ <md-menu #root="mdMenu" (close)="rootCloseCallback($event)" >
1141
1158
<button md-menu-item
1142
1159
id="level-one-trigger"
1143
1160
[mdMenuTriggerFor]="levelOne"
@@ -1150,7 +1167,7 @@ class CustomMenu {
1150
1167
#lazyTrigger="mdMenuTrigger">Three</button>
1151
1168
</md-menu>
1152
1169
1153
- <md-menu #levelOne="mdMenu">
1170
+ <md-menu #levelOne="mdMenu" (close)="levelOneCloseCallback($event)" >
1154
1171
<button md-menu-item>Four</button>
1155
1172
<button md-menu-item
1156
1173
id="level-two-trigger"
@@ -1159,7 +1176,7 @@ class CustomMenu {
1159
1176
<button md-menu-item>Six</button>
1160
1177
</md-menu>
1161
1178
1162
- <md-menu #levelTwo="mdMenu">
1179
+ <md-menu #levelTwo="mdMenu" (close)="levelTwoCloseCallback($event)" >
1163
1180
<button md-menu-item>Seven</button>
1164
1181
<button md-menu-item>Eight</button>
1165
1182
<button md-menu-item>Nine</button>
@@ -1177,12 +1194,15 @@ class NestedMenu {
1177
1194
@ViewChild ( 'rootTrigger' ) rootTrigger : MdMenuTrigger ;
1178
1195
@ViewChild ( 'rootTriggerEl' ) rootTriggerEl : ElementRef ;
1179
1196
@ViewChild ( 'alternateTrigger' ) alternateTrigger : MdMenuTrigger ;
1197
+ readonly rootCloseCallback = jasmine . createSpy ( 'root menu closed callback' ) ;
1180
1198
1181
1199
@ViewChild ( 'levelOne' ) levelOneMenu : MdMenu ;
1182
1200
@ViewChild ( 'levelOneTrigger' ) levelOneTrigger : MdMenuTrigger ;
1201
+ readonly levelOneCloseCallback = jasmine . createSpy ( 'level one menu closed callback' ) ;
1183
1202
1184
1203
@ViewChild ( 'levelTwo' ) levelTwoMenu : MdMenu ;
1185
1204
@ViewChild ( 'levelTwoTrigger' ) levelTwoTrigger : MdMenuTrigger ;
1205
+ readonly levelTwoCloseCallback = jasmine . createSpy ( 'level one menu closed callback' ) ;
1186
1206
1187
1207
@ViewChild ( 'lazy' ) lazyMenu : MdMenu ;
1188
1208
@ViewChild ( 'lazyTrigger' ) lazyTrigger : MdMenuTrigger ;
0 commit comments