@@ -28,12 +28,6 @@ describe('material.components.menu', function() {
28
28
expect ( buildBadMenu ) . toThrow ( ) ;
29
29
} ) ) ;
30
30
31
- it ( 'removes everything but the first element' , function ( ) {
32
- var menu = setup ( ) [ 0 ] ;
33
- expect ( menu . children . length ) . toBe ( 1 ) ;
34
- expect ( menu . firstElementChild . nodeName ) . toBe ( 'BUTTON' ) ;
35
- } ) ;
36
-
37
31
it ( 'specifies button type' , inject ( function ( $compile , $rootScope ) {
38
32
var menu = setup ( ) [ 0 ] ;
39
33
expect ( menu . firstElementChild . getAttribute ( 'type' ) ) . toBe ( 'button' ) ;
@@ -42,35 +36,35 @@ describe('material.components.menu', function() {
42
36
it ( 'opens on click' , function ( ) {
43
37
var menu = setup ( ) ;
44
38
openMenu ( menu ) ;
45
- expect ( getOpenMenuContainer ( ) . length ) . toBe ( 1 ) ;
39
+ expect ( getOpenMenuContainer ( menu ) . length ) . toBe ( 1 ) ;
46
40
closeMenu ( menu ) ;
47
- expect ( getOpenMenuContainer ( ) . length ) . toBe ( 0 ) ;
41
+ expect ( getOpenMenuContainer ( menu ) . length ) . toBe ( 0 ) ;
48
42
} ) ;
49
43
50
44
it ( 'opens on click without $event' , function ( ) {
51
45
var noEvent = true ;
52
46
var menu = setup ( 'ng-click' , noEvent ) ;
53
47
openMenu ( menu ) ;
54
- expect ( getOpenMenuContainer ( ) . length ) . toBe ( 1 ) ;
48
+ expect ( getOpenMenuContainer ( menu ) . length ) . toBe ( 1 ) ;
55
49
closeMenu ( menu ) ;
56
- expect ( getOpenMenuContainer ( ) . length ) . toBe ( 0 ) ;
50
+ expect ( getOpenMenuContainer ( menu ) . length ) . toBe ( 0 ) ;
57
51
} ) ;
58
52
59
53
it ( 'opens on mouseEnter' , function ( ) {
60
54
var menu = setup ( 'ng-mouseenter' ) ;
61
55
openMenu ( menu , 'mouseenter' ) ;
62
- expect ( getOpenMenuContainer ( ) . length ) . toBe ( 1 ) ;
56
+ expect ( getOpenMenuContainer ( menu ) . length ) . toBe ( 1 ) ;
63
57
closeMenu ( menu ) ;
64
- expect ( getOpenMenuContainer ( ) . length ) . toBe ( 0 ) ;
58
+ expect ( getOpenMenuContainer ( menu ) . length ) . toBe ( 0 ) ;
65
59
} ) ;
66
60
67
61
it ( 'opens on mouseEnter without $event' , function ( ) {
68
62
var noEvent = true ;
69
63
var menu = setup ( 'ng-mouseenter' , noEvent ) ;
70
64
openMenu ( menu , 'mouseenter' ) ;
71
- expect ( getOpenMenuContainer ( ) . length ) . toBe ( 1 ) ;
65
+ expect ( getOpenMenuContainer ( menu ) . length ) . toBe ( 1 ) ;
72
66
closeMenu ( menu ) ;
73
- expect ( getOpenMenuContainer ( ) . length ) . toBe ( 0 ) ;
67
+ expect ( getOpenMenuContainer ( menu ) . length ) . toBe ( 0 ) ;
74
68
} ) ;
75
69
76
70
it ( 'should not propagate the click event' , function ( ) {
@@ -87,56 +81,49 @@ describe('material.components.menu', function() {
87
81
88
82
it ( 'closes on backdrop click' , inject ( function ( $document ) {
89
83
90
- openMenu ( setup ( ) ) ;
84
+ var menu = setup ( ) ;
85
+ openMenu ( menu ) ;
91
86
92
- expect ( getOpenMenuContainer ( ) . length ) . toBe ( 1 ) ;
87
+ expect ( getOpenMenuContainer ( menu ) . length ) . toBe ( 1 ) ;
93
88
94
89
$document . find ( 'md-backdrop' ) . triggerHandler ( 'click' ) ;
95
90
waitForMenuClose ( ) ;
96
91
97
- expect ( getOpenMenuContainer ( ) . length ) . toBe ( 0 ) ;
92
+ expect ( getOpenMenuContainer ( menu ) . length ) . toBe ( 0 ) ;
98
93
} ) ) ;
99
94
100
95
101
96
it ( 'closes on escape' , inject ( function ( $document , $mdConstant ) {
102
- openMenu ( setup ( ) ) ;
103
- expect ( getOpenMenuContainer ( ) . length ) . toBe ( 1 ) ;
97
+ var menu = setup ( ) ;
98
+ openMenu ( menu ) ;
99
+ expect ( getOpenMenuContainer ( menu ) . length ) . toBe ( 1 ) ;
104
100
105
- var openMenuEl = $document [ 0 ] . querySelector ( 'md-menu-content' ) ;
101
+ var openMenuEl = menu [ 0 ] . querySelector ( 'md-menu-content' ) ;
106
102
107
103
pressKey ( openMenuEl , $mdConstant . KEY_CODE . ESCAPE ) ;
108
104
waitForMenuClose ( ) ;
109
105
110
- expect ( getOpenMenuContainer ( ) . length ) . toBe ( 0 ) ;
111
- } ) ) ;
112
-
113
- it ( 'closes on $destroy' , inject ( function ( $document , $rootScope ) {
114
- var scope = $rootScope . $new ( ) ;
115
- openMenu ( setup ( null , false , scope ) ) ;
116
-
117
- expect ( getOpenMenuContainer ( ) . length ) . toBe ( 1 ) ;
118
- scope . $destroy ( ) ;
119
-
120
- expect ( getOpenMenuContainer ( ) . length ) . toBe ( 0 ) ;
106
+ expect ( getOpenMenuContainer ( menu ) . length ) . toBe ( 0 ) ;
121
107
} ) ) ;
122
108
123
109
describe ( 'closes with -' , function ( ) {
124
110
it ( 'closes on normal option click' , function ( ) {
125
- expect ( getOpenMenuContainer ( ) . length ) . toBe ( 0 ) ;
126
111
127
- openMenu ( setup ( ) ) ;
112
+ var menu = setup ( ) ;
113
+ expect ( getOpenMenuContainer ( menu ) . length ) . toBe ( 0 ) ;
114
+ openMenu ( menu ) ;
128
115
129
116
expect ( menuActionPerformed ) . toBeFalsy ( ) ;
130
- expect ( getOpenMenuContainer ( ) . length ) . toBe ( 1 ) ;
117
+ expect ( getOpenMenuContainer ( menu ) . length ) . toBe ( 1 ) ;
131
118
132
- var btn = getOpenMenuContainer ( ) [ 0 ] . querySelector ( 'md-button' ) ;
119
+ var btn = getOpenMenuContainer ( menu ) [ 0 ] . querySelector ( 'md-button' ) ;
133
120
btn . click ( ) ;
134
121
135
122
waitForMenuClose ( ) ;
136
123
137
124
expect ( menuActionPerformed ) . toBeTruthy ( ) ;
138
125
139
- expect ( getOpenMenuContainer ( ) . length ) . toBe ( 0 ) ;
126
+ expect ( getOpenMenuContainer ( menu ) . length ) . toBe ( 0 ) ;
140
127
} ) ;
141
128
142
129
itClosesWithAttributes ( [
@@ -151,7 +138,7 @@ describe('material.components.menu', function() {
151
138
}
152
139
153
140
function testAttribute ( attr ) {
154
- return inject ( function ( $rootScope , $compile , $timeout , $browser , $animate ) {
141
+ return inject ( function ( $rootScope , $compile , $timeout , $browser ) {
155
142
var template = '' +
156
143
'<md-menu>' +
157
144
' <button ng-click="$mdOpenMenu($event)">Hello World</button>' +
@@ -163,17 +150,18 @@ describe('material.components.menu', function() {
163
150
'</md-menu>' ;
164
151
165
152
166
- openMenu ( $compile ( template ) ( $rootScope ) ) ;
153
+ var menu = $compile ( template ) ( $rootScope ) ;
154
+ openMenu ( menu ) ;
167
155
168
- expect ( getOpenMenuContainer ( ) . length ) . toBe ( 1 ) ;
156
+ expect ( getOpenMenuContainer ( menu ) . length ) . toBe ( 1 ) ;
169
157
170
158
$timeout . flush ( ) ;
171
- var btn = getOpenMenuContainer ( ) [ 0 ] . querySelector ( 'md-button' ) ;
159
+ var btn = getOpenMenuContainer ( menu ) [ 0 ] . querySelector ( 'md-button' ) ;
172
160
btn . click ( ) ;
173
161
174
162
waitForMenuClose ( ) ;
175
163
176
- expect ( getOpenMenuContainer ( ) . length ) . toBe ( 0 ) ;
164
+ expect ( getOpenMenuContainer ( menu ) . length ) . toBe ( 0 ) ;
177
165
} ) ;
178
166
}
179
167
}
@@ -208,21 +196,27 @@ describe('material.components.menu', function() {
208
196
// Internal methods
209
197
// ********************************************
210
198
211
- function getOpenMenuContainer ( ) {
212
- var res ;
213
- inject ( function ( $document ) {
214
- res = angular . element ( $document [ 0 ] . querySelector ( '.md-open-menu-container' ) ) ;
215
- } ) ;
216
- return res ;
199
+ function getOpenMenuContainer ( el ) {
200
+ el = ( el instanceof angular . element ) ? el [ 0 ] : el ;
201
+ var container = el . querySelector ( '.md-open-menu-container' ) ;
202
+ if ( container . style . display == 'none' ) {
203
+ return angular . element ( [ ] ) ;
204
+ } else {
205
+ return angular . element ( container ) ;
206
+ }
217
207
}
218
208
219
209
function openMenu ( el , triggerType ) {
220
- el . children ( ) . eq ( 0 ) . triggerHandler ( triggerType || 'click' ) ;
221
- waitForMenuOpen ( ) ;
210
+ inject ( function ( $document ) {
211
+ el . children ( ) . eq ( 0 ) . triggerHandler ( triggerType || 'click' ) ;
212
+ $document [ 0 ] . body . appendChild ( el [ 0 ] ) ;
213
+ waitForMenuOpen ( ) ;
214
+ } ) ;
222
215
}
223
216
224
217
function closeMenu ( ) {
225
218
inject ( function ( $document ) {
219
+ $document . find ( 'md-backdrop' ) ;
226
220
$document . find ( 'md-backdrop' ) . triggerHandler ( 'click' ) ;
227
221
waitForMenuClose ( ) ;
228
222
} ) ;
0 commit comments