@@ -7,66 +7,85 @@ import {CdkMenu} from './menu';
7
7
import { By } from '@angular/platform-browser' ;
8
8
9
9
describe ( 'MenuGroup' , ( ) => {
10
- describe ( 'MenuItem ' , ( ) => {
11
- let fixture : ComponentFixture < MenuGroups > ;
10
+ describe ( 'with MenuItems as checkbox ' , ( ) => {
11
+ let fixture : ComponentFixture < CheckboxMenu > ;
12
12
let menuItems : Array < CdkMenuItem > ;
13
13
14
14
beforeEach ( async ( ( ) => {
15
15
TestBed . configureTestingModule ( {
16
16
imports : [ CdkMenuModule ] ,
17
- declarations : [ MenuGroups ] ,
17
+ declarations : [ CheckboxMenu ] ,
18
18
} ) . compileComponents ( ) ;
19
19
20
- fixture = TestBed . createComponent ( MenuGroups ) ;
20
+ fixture = TestBed . createComponent ( CheckboxMenu ) ;
21
21
fixture . detectChanges ( ) ;
22
22
23
23
menuItems = fixture . debugElement
24
24
. queryAll ( By . directive ( CdkMenuItem ) )
25
25
. map ( e => e . injector . get ( CdkMenuItem ) ) ;
26
26
} ) ) ;
27
27
28
- it ( 'should not change state of sibling menuitemcheckbox' , ( ) => {
28
+ it ( 'should not change state of sibling checked menuitemcheckbox' , ( ) => {
29
29
menuItems [ 1 ] . trigger ( ) ;
30
30
31
- expect ( menuItems [ 0 ] . checked ) . toBeTrue ( ) ; // default state true
31
+ expect ( menuItems [ 0 ] . checked ) . toBeTrue ( ) ;
32
32
} ) ;
33
+ } ) ;
34
+
35
+ describe ( 'with MenuItems as radio button' , ( ) => {
36
+ let fixture : ComponentFixture < MenuWithMultipleRadioGroups > ;
37
+ let menuItems : Array < CdkMenuItem > ;
38
+
39
+ beforeEach ( async ( ( ) => {
40
+ TestBed . configureTestingModule ( {
41
+ imports : [ CdkMenuModule ] ,
42
+ declarations : [ MenuWithMultipleRadioGroups ] ,
43
+ } ) . compileComponents ( ) ;
44
+
45
+ fixture = TestBed . createComponent ( MenuWithMultipleRadioGroups ) ;
46
+ fixture . detectChanges ( ) ;
47
+
48
+ menuItems = fixture . debugElement
49
+ . queryAll ( By . directive ( CdkMenuItem ) )
50
+ . map ( e => e . injector . get ( CdkMenuItem ) ) ;
51
+ } ) ) ;
33
52
34
53
it ( 'should change state of sibling menuitemradio in same group' , ( ) => {
35
- menuItems [ 3 ] . trigger ( ) ;
54
+ menuItems [ 1 ] . trigger ( ) ;
36
55
37
- expect ( menuItems [ 3 ] . checked ) . toBeTrue ( ) ;
38
- expect ( menuItems [ 2 ] . checked ) . toBeFalse ( ) ;
56
+ expect ( menuItems [ 1 ] . checked ) . toBeTrue ( ) ;
57
+ expect ( menuItems [ 0 ] . checked ) . toBeFalse ( ) ;
39
58
} ) ;
40
59
41
60
it ( 'should not change state of menuitemradio in sibling group' , ( ) => {
42
- menuItems [ 4 ] . trigger ( ) ;
61
+ menuItems [ 3 ] . trigger ( ) ;
43
62
44
- expect ( menuItems [ 4 ] . checked ) . toBeTrue ( ) ;
45
- expect ( menuItems [ 2 ] . checked ) . toBeTrue ( ) ;
63
+ expect ( menuItems [ 3 ] . checked ) . toBeTrue ( ) ;
64
+ expect ( menuItems [ 0 ] . checked ) . toBeTrue ( ) ;
46
65
} ) ;
47
66
48
67
it ( 'should not change radiogroup state with disabled button' , ( ) => {
49
- menuItems [ 3 ] . disabled = true ;
68
+ menuItems [ 1 ] . disabled = true ;
50
69
51
- menuItems [ 3 ] . trigger ( ) ;
70
+ menuItems [ 1 ] . trigger ( ) ;
52
71
53
- expect ( menuItems [ 2 ] . checked ) . toBeTrue ( ) ;
54
- expect ( menuItems [ 3 ] . checked ) . toBeFalse ( ) ;
72
+ expect ( menuItems [ 0 ] . checked ) . toBeTrue ( ) ;
73
+ expect ( menuItems [ 1 ] . checked ) . toBeFalse ( ) ;
55
74
} ) ;
56
75
} ) ;
57
76
58
77
describe ( 'change events' , ( ) => {
59
- let fixture : ComponentFixture < MenuGroups > ;
78
+ let fixture : ComponentFixture < MenuWithMenuItemsAndRadioGroups > ;
60
79
let menu : CdkMenu ;
61
80
let menuItems : Array < CdkMenuItem > ;
62
81
63
82
beforeEach ( async ( ( ) => {
64
83
TestBed . configureTestingModule ( {
65
84
imports : [ CdkMenuModule ] ,
66
- declarations : [ MenuGroups ] ,
85
+ declarations : [ MenuWithMenuItemsAndRadioGroups ] ,
67
86
} ) . compileComponents ( ) ;
68
87
69
- fixture = TestBed . createComponent ( MenuGroups ) ;
88
+ fixture = TestBed . createComponent ( MenuWithMenuItemsAndRadioGroups ) ;
70
89
fixture . detectChanges ( ) ;
71
90
72
91
menu = fixture . debugElement . query ( By . directive ( CdkMenu ) ) . injector . get ( CdkMenu ) ;
@@ -85,7 +104,7 @@ describe('MenuGroup', () => {
85
104
expect ( spy ) . toHaveBeenCalledTimes ( 0 ) ;
86
105
} ) ;
87
106
88
- it ( 'should emit from groups with clicked menu items ' , ( ) => {
107
+ it ( 'should emit from enclosing radio group only ' , ( ) => {
89
108
const spies : Array < jasmine . Spy > = [ ] ;
90
109
91
110
fixture . debugElement . queryAll ( By . directive ( CdkMenuGroup ) ) . forEach ( ( group , index ) => {
@@ -94,44 +113,26 @@ describe('MenuGroup', () => {
94
113
group . injector . get ( CdkMenuGroup ) . change . subscribe ( spy ) ;
95
114
} ) ;
96
115
97
- menuItems [ 2 ] . trigger ( ) ;
98
- menuItems [ 4 ] . trigger ( ) ;
116
+ menuItems [ 0 ] . trigger ( ) ;
99
117
100
- expect ( spies [ 1 ] ) . toHaveBeenCalledTimes ( 0 ) ;
101
- expect ( spies [ 2 ] ) . toHaveBeenCalledTimes ( 1 ) ;
102
- expect ( spies [ 2 ] ) . toHaveBeenCalledWith ( menuItems [ 2 ] ) ;
103
- expect ( spies [ 3 ] ) . toHaveBeenCalledTimes ( 1 ) ;
104
- expect ( spies [ 3 ] ) . toHaveBeenCalledWith ( menuItems [ 4 ] ) ;
118
+ expect ( spies [ 1 ] ) . toHaveBeenCalledTimes ( 1 ) ;
119
+ expect ( spies [ 1 ] ) . toHaveBeenCalledWith ( menuItems [ 0 ] ) ;
120
+ expect ( spies [ 2 ] ) . toHaveBeenCalledTimes ( 0 ) ;
121
+ expect ( spies [ 3 ] ) . toHaveBeenCalledTimes ( 0 ) ;
105
122
} ) ;
106
123
107
124
it ( 'should not emit with click on disabled button' , ( ) => {
108
125
const spy = jasmine . createSpy ( 'cdkMenuGroup change spy' ) ;
109
126
110
127
fixture . debugElement
111
- . queryAll ( By . directive ( CdkMenuGroup ) ) [ 3 ]
128
+ . queryAll ( By . directive ( CdkMenuGroup ) ) [ 1 ]
112
129
. injector . get ( CdkMenuGroup )
113
130
. change . subscribe ( spy ) ;
114
- menuItems [ 4 ] . disabled = true ;
115
-
116
- menuItems [ 4 ] . trigger ( ) ;
117
-
118
- expect ( spy ) . toHaveBeenCalledTimes ( 0 ) ;
119
- } ) ;
120
-
121
- it ( 'should not emit from sibling groups' , ( ) => {
122
- const spies : Array < jasmine . Spy > = [ ] ;
123
-
124
- fixture . debugElement . queryAll ( By . directive ( CdkMenuGroup ) ) . forEach ( ( group , index ) => {
125
- const spy = jasmine . createSpy ( `cdkMenuGroup ${ index } change spy` ) ;
126
- spies . push ( spy ) ;
127
- group . injector . get ( CdkMenuGroup ) . change . subscribe ( spy ) ;
128
- } ) ;
131
+ menuItems [ 0 ] . disabled = true ;
129
132
130
133
menuItems [ 0 ] . trigger ( ) ;
131
134
132
- expect ( spies [ 1 ] ) . toHaveBeenCalledTimes ( 1 ) ;
133
- expect ( spies [ 2 ] ) . toHaveBeenCalledTimes ( 0 ) ;
134
- expect ( spies [ 3 ] ) . toHaveBeenCalledTimes ( 0 ) ;
135
+ expect ( spy ) . toHaveBeenCalledTimes ( 0 ) ;
135
136
} ) ;
136
137
137
138
it ( 'should not emit on menuitem click' , ( ) => {
@@ -143,7 +144,7 @@ describe('MenuGroup', () => {
143
144
group . injector . get ( CdkMenuGroup ) . change . subscribe ( spy ) ;
144
145
} ) ;
145
146
146
- menuItems [ 7 ] . trigger ( ) ;
147
+ menuItems [ 2 ] . trigger ( ) ;
147
148
148
149
spies . forEach ( spy => expect ( spy ) . toHaveBeenCalledTimes ( 0 ) ) ;
149
150
} ) ;
@@ -153,7 +154,6 @@ describe('MenuGroup', () => {
153
154
@Component ( {
154
155
template : `
155
156
<ul cdkMenu>
156
- <!-- Checkbox group -->
157
157
<li role="none">
158
158
<ul cdkMenuGroup>
159
159
<li #first role="none">
@@ -168,51 +168,78 @@ describe('MenuGroup', () => {
168
168
</li>
169
169
</ul>
170
170
</li>
171
- <!-- Radio group -->
171
+ </ul>
172
+ ` ,
173
+ } )
174
+ class CheckboxMenu { }
175
+
176
+ @Component ( {
177
+ template : `
178
+ <ul cdkMenu>
172
179
<li role="none">
173
180
<ul cdkMenuGroup>
174
181
<li role="none">
175
182
<button checked="true" role="menuitemradio" cdkMenuItem>
176
- three
183
+ one
177
184
</button>
178
185
</li>
179
186
<li role="none">
180
187
<button role="menuitemradio" cdkMenuItem>
181
- four
188
+ two
182
189
</button>
183
190
</li>
184
191
</ul>
185
192
</li>
186
- <!-- Radio group -->
187
193
<li role="none">
188
194
<ul cdkMenuGroup>
189
195
<li role="none">
190
196
<button role="menuitemradio" cdkMenuItem>
191
- five
197
+ three
198
+ </button>
199
+ </li>
200
+ <li role="none">
201
+ <button role="menuitemradio" cdkMenuItem>
202
+ four
192
203
</button>
193
204
</li>
205
+ </ul>
206
+ </li>
207
+ </ul>
208
+ ` ,
209
+ } )
210
+ class MenuWithMultipleRadioGroups { }
211
+
212
+ @Component ( {
213
+ template : `
214
+ <ul cdkMenu>
215
+ <li role="none">
216
+ <ul cdkMenuGroup>
194
217
<li role="none">
195
218
<button role="menuitemradio" cdkMenuItem>
196
- six
219
+ one
197
220
</button>
198
221
</li>
199
222
</ul>
200
223
</li>
201
224
<li role="none">
202
225
<ul cdkMenuGroup>
203
226
<li role="none">
204
- <button cdkMenuItem>
205
- seven
227
+ <button role="menuitemradio" cdkMenuItem>
228
+ two
206
229
</button>
207
230
</li>
231
+ </ul>
232
+ </li>
233
+ <li role="none">
234
+ <ul cdkMenuGroup>
208
235
<li role="none">
209
236
<button cdkMenuItem>
210
- eight
237
+ three
211
238
</button>
212
239
</li>
213
240
</ul>
214
241
</li>
215
242
</ul>
216
243
` ,
217
244
} )
218
- class MenuGroups { }
245
+ class MenuWithMenuItemsAndRadioGroups { }
0 commit comments