11import { TestBed , async } from '@angular/core/testing' ;
2- import { Component , ViewChild } from '@angular/core' ;
3- import { MdMenuModule , MdMenuTrigger } from './menu' ;
2+ import {
3+ Component ,
4+ EventEmitter ,
5+ Output ,
6+ TemplateRef ,
7+ ViewChild
8+ } from '@angular/core' ;
9+ import {
10+ MdMenuModule ,
11+ MdMenuTrigger ,
12+ MdMenuPanel ,
13+ MenuPositionX ,
14+ MenuPositionY
15+ } from './menu' ;
416import { OverlayContainer } from '../core/overlay/overlay-container' ;
517
618
@@ -10,7 +22,7 @@ describe('MdMenu', () => {
1022 beforeEach ( async ( ( ) => {
1123 TestBed . configureTestingModule ( {
1224 imports : [ MdMenuModule . forRoot ( ) ] ,
13- declarations : [ SimpleMenu ] ,
25+ declarations : [ CustomMenuPanel , CustomMenu , SimpleMenu ] ,
1426 providers : [
1527 { provide : OverlayContainer , useFactory : ( ) => {
1628 overlayContainerElement = document . createElement ( 'div' ) ;
@@ -30,7 +42,7 @@ describe('MdMenu', () => {
3042 fixture . componentInstance . trigger . openMenu ( ) ;
3143 fixture . componentInstance . trigger . openMenu ( ) ;
3244
33- expect ( overlayContainerElement . textContent . trim ( ) ) . toBe ( 'Content' ) ;
45+ expect ( overlayContainerElement . textContent . trim ( ) ) . toBe ( 'Simple Content' ) ;
3446 } ) . not . toThrowError ( ) ;
3547 } ) ;
3648
@@ -46,16 +58,59 @@ describe('MdMenu', () => {
4658 expect ( overlayContainerElement . textContent ) . toBe ( '' ) ;
4759 } ) ;
4860
61+ it ( 'should open a custom menu' , ( ) => {
62+ const fixture = TestBed . createComponent ( CustomMenu ) ;
63+ fixture . detectChanges ( ) ;
64+ expect ( overlayContainerElement . textContent ) . toBe ( '' ) ;
65+ expect ( ( ) => {
66+ fixture . componentInstance . trigger . openMenu ( ) ;
67+ fixture . componentInstance . trigger . openMenu ( ) ;
68+
69+ expect ( overlayContainerElement . textContent ) . toContain ( 'Custom Menu header' ) ;
70+ expect ( overlayContainerElement . textContent ) . toContain ( 'Custom Content' ) ;
71+ } ) . not . toThrowError ( ) ;
72+ } ) ;
73+
4974} ) ;
5075
5176@Component ( {
5277 template : `
5378 <button [md-menu-trigger-for]="menu">Toggle menu</button>
5479 <md-menu #menu="mdMenu">
55- <button md-menu-item> Content </button>
80+ <button md-menu-item> Simple Content </button>
5681 </md-menu>
5782 `
5883} )
5984class SimpleMenu {
6085 @ViewChild ( MdMenuTrigger ) trigger : MdMenuTrigger ;
6186}
87+
88+ @Component ( {
89+ selector : 'custom-menu' ,
90+ template : `
91+ <template>
92+ Custom Menu header
93+ <ng-content></ng-content>
94+ </template>
95+ ` ,
96+ exportAs : 'mdCustomMenu'
97+ } )
98+ class CustomMenuPanel implements MdMenuPanel {
99+ positionX : MenuPositionX = 'after' ;
100+ positionY : MenuPositionY = 'below' ;
101+ @ViewChild ( TemplateRef ) templateRef : TemplateRef < any > ;
102+ @Output ( ) close = new EventEmitter < void > ( ) ;
103+ focusFirstItem : ( ) => void ;
104+ }
105+
106+ @Component ( {
107+ template : `
108+ <button [md-menu-trigger-for]="menu">Toggle menu</button>
109+ <custom-menu #menu="mdCustomMenu">
110+ <button md-menu-item> Custom Content </button>
111+ </custom-menu>
112+ `
113+ } )
114+ class CustomMenu {
115+ @ViewChild ( MdMenuTrigger ) trigger : MdMenuTrigger ;
116+ }
0 commit comments