Skip to content

Commit bf45f99

Browse files
andy9775mmalerba
authored andcommitted
test(cdk-experimental/menu): refactor tests to use smaller, more focused fixtures
1 parent 7c2b2fa commit bf45f99

File tree

1 file changed

+85
-58
lines changed

1 file changed

+85
-58
lines changed

src/cdk-experimental/menu/menu-group.spec.ts

Lines changed: 85 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -7,66 +7,85 @@ import {CdkMenu} from './menu';
77
import {By} from '@angular/platform-browser';
88

99
describe('MenuGroup', () => {
10-
describe('MenuItem', () => {
11-
let fixture: ComponentFixture<MenuGroups>;
10+
describe('with MenuItems as checkbox', () => {
11+
let fixture: ComponentFixture<CheckboxMenu>;
1212
let menuItems: Array<CdkMenuItem>;
1313

1414
beforeEach(async(() => {
1515
TestBed.configureTestingModule({
1616
imports: [CdkMenuModule],
17-
declarations: [MenuGroups],
17+
declarations: [CheckboxMenu],
1818
}).compileComponents();
1919

20-
fixture = TestBed.createComponent(MenuGroups);
20+
fixture = TestBed.createComponent(CheckboxMenu);
2121
fixture.detectChanges();
2222

2323
menuItems = fixture.debugElement
2424
.queryAll(By.directive(CdkMenuItem))
2525
.map(e => e.injector.get(CdkMenuItem));
2626
}));
2727

28-
it('should not change state of sibling menuitemcheckbox', () => {
28+
it('should not change state of sibling checked menuitemcheckbox', () => {
2929
menuItems[1].trigger();
3030

31-
expect(menuItems[0].checked).toBeTrue(); // default state true
31+
expect(menuItems[0].checked).toBeTrue();
3232
});
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+
}));
3352

3453
it('should change state of sibling menuitemradio in same group', () => {
35-
menuItems[3].trigger();
54+
menuItems[1].trigger();
3655

37-
expect(menuItems[3].checked).toBeTrue();
38-
expect(menuItems[2].checked).toBeFalse();
56+
expect(menuItems[1].checked).toBeTrue();
57+
expect(menuItems[0].checked).toBeFalse();
3958
});
4059

4160
it('should not change state of menuitemradio in sibling group', () => {
42-
menuItems[4].trigger();
61+
menuItems[3].trigger();
4362

44-
expect(menuItems[4].checked).toBeTrue();
45-
expect(menuItems[2].checked).toBeTrue();
63+
expect(menuItems[3].checked).toBeTrue();
64+
expect(menuItems[0].checked).toBeTrue();
4665
});
4766

4867
it('should not change radiogroup state with disabled button', () => {
49-
menuItems[3].disabled = true;
68+
menuItems[1].disabled = true;
5069

51-
menuItems[3].trigger();
70+
menuItems[1].trigger();
5271

53-
expect(menuItems[2].checked).toBeTrue();
54-
expect(menuItems[3].checked).toBeFalse();
72+
expect(menuItems[0].checked).toBeTrue();
73+
expect(menuItems[1].checked).toBeFalse();
5574
});
5675
});
5776

5877
describe('change events', () => {
59-
let fixture: ComponentFixture<MenuGroups>;
78+
let fixture: ComponentFixture<MenuWithMenuItemsAndRadioGroups>;
6079
let menu: CdkMenu;
6180
let menuItems: Array<CdkMenuItem>;
6281

6382
beforeEach(async(() => {
6483
TestBed.configureTestingModule({
6584
imports: [CdkMenuModule],
66-
declarations: [MenuGroups],
85+
declarations: [MenuWithMenuItemsAndRadioGroups],
6786
}).compileComponents();
6887

69-
fixture = TestBed.createComponent(MenuGroups);
88+
fixture = TestBed.createComponent(MenuWithMenuItemsAndRadioGroups);
7089
fixture.detectChanges();
7190

7291
menu = fixture.debugElement.query(By.directive(CdkMenu)).injector.get(CdkMenu);
@@ -85,7 +104,7 @@ describe('MenuGroup', () => {
85104
expect(spy).toHaveBeenCalledTimes(0);
86105
});
87106

88-
it('should emit from groups with clicked menu items', () => {
107+
it('should emit from enclosing radio group only', () => {
89108
const spies: Array<jasmine.Spy> = [];
90109

91110
fixture.debugElement.queryAll(By.directive(CdkMenuGroup)).forEach((group, index) => {
@@ -94,44 +113,26 @@ describe('MenuGroup', () => {
94113
group.injector.get(CdkMenuGroup).change.subscribe(spy);
95114
});
96115

97-
menuItems[2].trigger();
98-
menuItems[4].trigger();
116+
menuItems[0].trigger();
99117

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);
105122
});
106123

107124
it('should not emit with click on disabled button', () => {
108125
const spy = jasmine.createSpy('cdkMenuGroup change spy');
109126

110127
fixture.debugElement
111-
.queryAll(By.directive(CdkMenuGroup))[3]
128+
.queryAll(By.directive(CdkMenuGroup))[1]
112129
.injector.get(CdkMenuGroup)
113130
.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;
129132

130133
menuItems[0].trigger();
131134

132-
expect(spies[1]).toHaveBeenCalledTimes(1);
133-
expect(spies[2]).toHaveBeenCalledTimes(0);
134-
expect(spies[3]).toHaveBeenCalledTimes(0);
135+
expect(spy).toHaveBeenCalledTimes(0);
135136
});
136137

137138
it('should not emit on menuitem click', () => {
@@ -143,7 +144,7 @@ describe('MenuGroup', () => {
143144
group.injector.get(CdkMenuGroup).change.subscribe(spy);
144145
});
145146

146-
menuItems[7].trigger();
147+
menuItems[2].trigger();
147148

148149
spies.forEach(spy => expect(spy).toHaveBeenCalledTimes(0));
149150
});
@@ -153,7 +154,6 @@ describe('MenuGroup', () => {
153154
@Component({
154155
template: `
155156
<ul cdkMenu>
156-
<!-- Checkbox group -->
157157
<li role="none">
158158
<ul cdkMenuGroup>
159159
<li #first role="none">
@@ -168,51 +168,78 @@ describe('MenuGroup', () => {
168168
</li>
169169
</ul>
170170
</li>
171-
<!-- Radio group -->
171+
</ul>
172+
`,
173+
})
174+
class CheckboxMenu {}
175+
176+
@Component({
177+
template: `
178+
<ul cdkMenu>
172179
<li role="none">
173180
<ul cdkMenuGroup>
174181
<li role="none">
175182
<button checked="true" role="menuitemradio" cdkMenuItem>
176-
three
183+
one
177184
</button>
178185
</li>
179186
<li role="none">
180187
<button role="menuitemradio" cdkMenuItem>
181-
four
188+
two
182189
</button>
183190
</li>
184191
</ul>
185192
</li>
186-
<!-- Radio group -->
187193
<li role="none">
188194
<ul cdkMenuGroup>
189195
<li role="none">
190196
<button role="menuitemradio" cdkMenuItem>
191-
five
197+
three
198+
</button>
199+
</li>
200+
<li role="none">
201+
<button role="menuitemradio" cdkMenuItem>
202+
four
192203
</button>
193204
</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>
194217
<li role="none">
195218
<button role="menuitemradio" cdkMenuItem>
196-
six
219+
one
197220
</button>
198221
</li>
199222
</ul>
200223
</li>
201224
<li role="none">
202225
<ul cdkMenuGroup>
203226
<li role="none">
204-
<button cdkMenuItem>
205-
seven
227+
<button role="menuitemradio" cdkMenuItem>
228+
two
206229
</button>
207230
</li>
231+
</ul>
232+
</li>
233+
<li role="none">
234+
<ul cdkMenuGroup>
208235
<li role="none">
209236
<button cdkMenuItem>
210-
eight
237+
three
211238
</button>
212239
</li>
213240
</ul>
214241
</li>
215242
</ul>
216243
`,
217244
})
218-
class MenuGroups {}
245+
class MenuWithMenuItemsAndRadioGroups {}

0 commit comments

Comments
 (0)