Skip to content

Commit 16033e5

Browse files
committed
Merge pull request Dogfalo#2356 from Dogfalo/selectTest
Select tests
2 parents 8600af5 + e2cf79d commit 16033e5

File tree

3 files changed

+196
-0
lines changed

3 files changed

+196
-0
lines changed

_SpecRunner.html

+2
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@
3434

3535
<script src="tests/spec/collapsible/collapsibleSpec.js"></script>
3636

37+
<script src="tests/spec/select/selectSpec.js"></script>
38+
3739
<script src="tests/spec/toast/toastSpec.js"></script>
3840

3941
<script src=".grunt/grunt-contrib-jasmine/reporter.js"></script>

tests/spec/select/selectFixture.html

+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<div class="row">
2+
<div class="input-field col s12">
3+
<select class="normal">
4+
<option value="" disabled>Choose your option</option>
5+
<option value="1">Option 1</option>
6+
<option value="2">Option 2</option>
7+
<option value="3" selected>Option 3</option>
8+
</select>
9+
<label>Materialize Select</label>
10+
</div>
11+
</div>
12+
13+
<div class="row">
14+
<div class="input-field col s12">
15+
<select multiple class="multiple">
16+
<option value="" disabled>Choose your option</option>
17+
<option value="1">Option 1</option>
18+
<option value="2">Option 2</option>
19+
<option value="3" selected>Option 3</option>
20+
</select>
21+
<label>Materialize Select</label>
22+
</div>
23+
</div>
24+
25+
<div class="row">
26+
<div class="input-field col s12">
27+
<select class="optgroup">
28+
<optgroup label="team 1">
29+
<option value="1">Option 1</option>
30+
<option value="2">Option 2</option>
31+
</optgroup>
32+
<optgroup label="team 2">
33+
<option value="3">Option 3</option>
34+
<option value="4">Option 4</option>
35+
</optgroup>
36+
</select>
37+
<label>Materialize Select</label>
38+
</div>
39+
</div>

tests/spec/select/selectSpec.js

+155
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
jasmine.getFixtures().fixturesPath = 'tests/spec';
2+
3+
describe("Select Plugin", function () {
4+
beforeEach(function() {
5+
loadFixtures('select/selectFixture.html');
6+
$('select').not('.disabled').material_select();
7+
});
8+
9+
describe("Select", function () {
10+
var browserSelect, normalInput, normalDropdown;
11+
12+
beforeEach(function() {
13+
browserSelect = $('select.normal');
14+
});
15+
16+
it("should open dropdown and select option", function (done) {
17+
normalInput = browserSelect.parent().find('input.select-dropdown');
18+
normalDropdown = browserSelect.parent().find('ul.select-dropdown');
19+
20+
expect(normalInput).toExist('Should dynamically generate select dropdown structure.');
21+
expect(normalDropdown).toExist('Should dynamically generate select dropdown structure.');
22+
expect(normalInput).toBeVisible('Should be hidden before dropdown is opened.');
23+
expect(normalDropdown).toBeHidden('Should be hidden before dropdown is opened.');
24+
25+
normalInput.click();
26+
27+
setTimeout(function() {
28+
expect(normalDropdown).toBeVisible('Should be visible after opening.');
29+
var firstOption = normalDropdown.find('li:not(.disabled)').first();
30+
firstOption.click();
31+
normalInput.blur();
32+
33+
setTimeout(function() {
34+
expect(normalDropdown).toBeHidden('Should be hidden after choosing item.');
35+
expect(normalInput.val()).toEqual(firstOption[0].innerText, 'Value should equal chosen option.');
36+
done();
37+
}, 400);
38+
}, 400);
39+
});
40+
41+
it("should have pre-selected value", function () {
42+
normalInput = browserSelect.parent().find('input.select-dropdown');
43+
normalDropdown = browserSelect.parent().find('ul.select-dropdown');
44+
45+
var firstOption = browserSelect.find('option[selected]');
46+
expect(normalInput.val()).toEqual(firstOption.text(), 'Value should be equal to preselected option.');
47+
});
48+
});
49+
50+
describe("Multiple Select", function () {
51+
var browserSelect, multipleInput, multipleDropdown;
52+
53+
beforeEach(function() {
54+
browserSelect = $('select.multiple');
55+
});
56+
57+
it("should open dropdown and select multiple options", function(done) {
58+
multipleInput = browserSelect.parent().find('input.select-dropdown');
59+
multipleDropdown = browserSelect.parent().find('ul.select-dropdown');
60+
61+
expect(multipleInput).toExist('Should dynamically generate select dropdown structure.');
62+
expect(multipleDropdown).toExist('Should dynamically generate select dropdown structure.');
63+
expect(multipleInput).toBeVisible('Should be hidden before dropdown is opened.');
64+
expect(multipleDropdown).toBeHidden('Should be hidden before dropdown is opened.');
65+
66+
multipleInput.click();
67+
68+
setTimeout(function() {
69+
expect(multipleDropdown).toBeVisible('Should be visible after opening.');
70+
var firstOption = multipleDropdown.find('li:not(.disabled)').first();
71+
var thirdOption = multipleDropdown.find('li:not(.disabled)').eq(2);
72+
firstOption.click();
73+
thirdOption.click();
74+
$('body').click();
75+
76+
setTimeout(function() {
77+
expect(multipleDropdown).toBeHidden('Should be hidden after choosing item.');
78+
expect(multipleInput.val()).toEqual(firstOption[0].innerText + ', ' + thirdOption[0].innerText, 'Value should equal chosen multiple options.');
79+
done();
80+
}, 400);
81+
}, 400);
82+
});
83+
84+
});
85+
86+
describe("Optgroup Select", function () {
87+
var browserSelect, optInput, optDropdown;
88+
89+
beforeEach(function() {
90+
browserSelect = $('select.optgroup');
91+
});
92+
93+
it("should open dropdown and select options", function(done) {
94+
optInput = browserSelect.parent().find('input.select-dropdown');
95+
optDropdown = browserSelect.parent().find('ul.select-dropdown');
96+
97+
var optgroups = optDropdown.find('li.optgroup');
98+
browserSelect.find('optgroup').each(function(i) {
99+
expect($(this).attr('label')).toEqual(optgroups.eq(i)[0].innerText, 'should generate optgroup structure.');
100+
});
101+
102+
expect(optInput).toExist('Should dynamically generate select dropdown structure.');
103+
expect(optDropdown).toExist('Should dynamically generate select dropdown structure.');
104+
expect(optInput).toBeVisible('Should be hidden before dropdown is opened.');
105+
expect(optDropdown).toBeHidden('Should be hidden before dropdown is opened.');
106+
107+
optInput.click();
108+
109+
setTimeout(function() {
110+
expect(optDropdown).toBeVisible('Should be visible after opening.');
111+
var secondOption = optDropdown.find('li:not(.disabled):not(.optgroup)').eq(1);
112+
secondOption.click();
113+
optInput.blur();
114+
115+
setTimeout(function() {
116+
expect(optDropdown).toBeHidden('Should be hidden after choosing item.');
117+
expect(optInput.val()).toEqual(secondOption[0].innerText, 'Value should be equal to selected option.');
118+
done();
119+
}, 400);
120+
}, 400);
121+
});
122+
123+
it("should not do anything when optgroup li clicked", function(done) {
124+
optInput = browserSelect.parent().find('input.select-dropdown');
125+
optDropdown = browserSelect.parent().find('ul.select-dropdown');
126+
var originalVal = optInput.val();
127+
128+
var optgroups = optDropdown.find('li.optgroup');
129+
browserSelect.find('optgroup').each(function(i) {
130+
expect($(this).attr('label')).toEqual(optgroups.eq(i)[0].innerText, 'should generate optgroup structure.');
131+
});
132+
133+
expect(optInput).toExist('Should dynamically generate select dropdown structure.');
134+
expect(optDropdown).toExist('Should dynamically generate select dropdown structure.');
135+
expect(optInput).toBeVisible('Should be hidden before dropdown is opened.');
136+
expect(optDropdown).toBeHidden('Should be hidden before dropdown is opened.');
137+
138+
optInput.click();
139+
140+
setTimeout(function() {
141+
expect(optDropdown).toBeVisible('Should be visible after opening.');
142+
var optgroup = optDropdown.find('li.optgroup').first();
143+
optgroup.click();
144+
optInput.blur();
145+
146+
setTimeout(function() {
147+
expect(optDropdown).toBeHidden('Should be hidden after choosing invalid item.');
148+
expect(optInput.val()).toEqual(originalVal, 'Value should be equal to original option.');
149+
done();
150+
}, 400);
151+
}, 400);
152+
});
153+
154+
});
155+
});

0 commit comments

Comments
 (0)