@@ -98,7 +98,7 @@ describe('MdMenu', () => {
9898 expect ( overlayContainerElement . textContent ) . toBe ( '' ) ;
9999 } ) ) ;
100100
101- it ( 'should close the menu when pressing escape ' , fakeAsync ( ( ) => {
101+ it ( 'should close the menu when pressing ESCAPE ' , fakeAsync ( ( ) => {
102102 const fixture = TestBed . createComponent ( SimpleMenu ) ;
103103 fixture . detectChanges ( ) ;
104104 fixture . componentInstance . trigger . openMenu ( ) ;
@@ -494,26 +494,40 @@ describe('MdMenu', () => {
494494 menuItem . click ( ) ;
495495 fixture . detectChanges ( ) ;
496496
497- expect ( fixture . componentInstance . closeCallback ) . toHaveBeenCalled ( ) ;
497+ expect ( fixture . componentInstance . closeCallback ) . toHaveBeenCalledWith ( 'click' ) ;
498+ expect ( fixture . componentInstance . closeCallback ) . toHaveBeenCalledTimes ( 1 ) ;
498499 } ) ;
499500
500501 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 ;
502504
503505 backdrop . click ( ) ;
504506 fixture . detectChanges ( ) ;
505507
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 ) ;
507520 } ) ;
508521
509522 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' ) ;
512525
513526 fixture . componentInstance . menu . close . subscribe ( emitCallback , null , completeCallback ) ;
514527 fixture . destroy ( ) ;
515528
516- expect ( emitCallback ) . toHaveBeenCalled ( ) ;
529+ expect ( emitCallback ) . toHaveBeenCalledWith ( undefined ) ;
530+ expect ( emitCallback ) . toHaveBeenCalledTimes ( 1 ) ;
517531 expect ( completeCallback ) . toHaveBeenCalled ( ) ;
518532 } ) ;
519533 } ) ;
@@ -995,6 +1009,9 @@ describe('MdMenu', () => {
9951009 tick ( 500 ) ;
9961010
9971011 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 ) ;
9981015 } ) ) ;
9991016
10001017 it ( 'should toggle a nested menu when its trigger is added after init' , fakeAsync ( ( ) => {
@@ -1059,7 +1076,7 @@ describe('MdMenu default overrides', () => {
10591076@Component ( {
10601077 template : `
10611078 <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 )">
10631080 <button md-menu-item> Item </button>
10641081 <button md-menu-item disabled> Disabled </button>
10651082 </md-menu>
@@ -1152,7 +1169,7 @@ class CustomMenu {
11521169 [mdMenuTriggerFor]="levelTwo"
11531170 #alternateTrigger="mdMenuTrigger">Toggle alternate menu</button>
11541171
1155- <md-menu #root="mdMenu">
1172+ <md-menu #root="mdMenu" (close)="rootCloseCallback($event)" >
11561173 <button md-menu-item
11571174 id="level-one-trigger"
11581175 [mdMenuTriggerFor]="levelOne"
@@ -1165,7 +1182,7 @@ class CustomMenu {
11651182 #lazyTrigger="mdMenuTrigger">Three</button>
11661183 </md-menu>
11671184
1168- <md-menu #levelOne="mdMenu">
1185+ <md-menu #levelOne="mdMenu" (close)="levelOneCloseCallback($event)" >
11691186 <button md-menu-item>Four</button>
11701187 <button md-menu-item
11711188 id="level-two-trigger"
@@ -1174,7 +1191,7 @@ class CustomMenu {
11741191 <button md-menu-item>Six</button>
11751192 </md-menu>
11761193
1177- <md-menu #levelTwo="mdMenu">
1194+ <md-menu #levelTwo="mdMenu" (close)="levelTwoCloseCallback($event)" >
11781195 <button md-menu-item>Seven</button>
11791196 <button md-menu-item>Eight</button>
11801197 <button md-menu-item>Nine</button>
@@ -1192,12 +1209,15 @@ class NestedMenu {
11921209 @ViewChild ( 'rootTrigger' ) rootTrigger : MdMenuTrigger ;
11931210 @ViewChild ( 'rootTriggerEl' ) rootTriggerEl : ElementRef ;
11941211 @ViewChild ( 'alternateTrigger' ) alternateTrigger : MdMenuTrigger ;
1212+ readonly rootCloseCallback = jasmine . createSpy ( 'root menu closed callback' ) ;
11951213
11961214 @ViewChild ( 'levelOne' ) levelOneMenu : MdMenu ;
11971215 @ViewChild ( 'levelOneTrigger' ) levelOneTrigger : MdMenuTrigger ;
1216+ readonly levelOneCloseCallback = jasmine . createSpy ( 'level one menu closed callback' ) ;
11981217
11991218 @ViewChild ( 'levelTwo' ) levelTwoMenu : MdMenu ;
12001219 @ViewChild ( 'levelTwoTrigger' ) levelTwoTrigger : MdMenuTrigger ;
1220+ readonly levelTwoCloseCallback = jasmine . createSpy ( 'level one menu closed callback' ) ;
12011221
12021222 @ViewChild ( 'lazy' ) lazyMenu : MdMenu ;
12031223 @ViewChild ( 'lazyTrigger' ) lazyTrigger : MdMenuTrigger ;
0 commit comments