1
1
import { 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' ;
4
16
import { OverlayContainer } from '../core/overlay/overlay-container' ;
5
17
6
18
@@ -10,7 +22,7 @@ describe('MdMenu', () => {
10
22
beforeEach ( async ( ( ) => {
11
23
TestBed . configureTestingModule ( {
12
24
imports : [ MdMenuModule . forRoot ( ) ] ,
13
- declarations : [ SimpleMenu ] ,
25
+ declarations : [ CustomMenuPanel , CustomMenu , SimpleMenu ] ,
14
26
providers : [
15
27
{ provide : OverlayContainer , useFactory : ( ) => {
16
28
overlayContainerElement = document . createElement ( 'div' ) ;
@@ -30,7 +42,7 @@ describe('MdMenu', () => {
30
42
fixture . componentInstance . trigger . openMenu ( ) ;
31
43
fixture . componentInstance . trigger . openMenu ( ) ;
32
44
33
- expect ( overlayContainerElement . textContent . trim ( ) ) . toBe ( 'Content' ) ;
45
+ expect ( overlayContainerElement . textContent . trim ( ) ) . toBe ( 'Simple Content' ) ;
34
46
} ) . not . toThrowError ( ) ;
35
47
} ) ;
36
48
@@ -46,16 +58,59 @@ describe('MdMenu', () => {
46
58
expect ( overlayContainerElement . textContent ) . toBe ( '' ) ;
47
59
} ) ;
48
60
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
+
49
74
} ) ;
50
75
51
76
@Component ( {
52
77
template : `
53
78
<button [md-menu-trigger-for]="menu">Toggle menu</button>
54
79
<md-menu #menu="mdMenu">
55
- <button md-menu-item> Content </button>
80
+ <button md-menu-item> Simple Content </button>
56
81
</md-menu>
57
82
`
58
83
} )
59
84
class SimpleMenu {
60
85
@ViewChild ( MdMenuTrigger ) trigger : MdMenuTrigger ;
61
86
}
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