Skip to content

Commit 2805fa7

Browse files
committed
Add tests for detecting added and removed options
This adds tests for ea79a19.
1 parent ea79a19 commit 2805fa7

3 files changed

Lines changed: 260 additions & 0 deletions

File tree

tests/integration.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
<script src="helpers.js" type="text/javascript"></script>
1616

17+
<script src="integration/dom-changes.js" type="text/javascript"></script>
1718
<script src="integration/jquery-calls.js" type="text/javascript"></script>
1819
<script src="integration/select2-methods.js" type="text/javascript"></script>
1920
</body>

tests/integration/dom-changes.js

Lines changed: 257 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,257 @@
1+
module('DOM integration');
2+
3+
test('adding a new unselected option changes nothing', function (assert) {
4+
// Any browsers which support mutation observers will not trigger the event
5+
var expected = 4;
6+
if (window.MutationObserver) {
7+
expected = 2;
8+
} else if (!window.addEventListener) {
9+
expected = 2;
10+
}
11+
12+
assert.expect(expected);
13+
14+
var asyncDone = null;
15+
var syncDone = assert.async();
16+
17+
if (expected != 2) {
18+
asyncDone = assert.async();
19+
}
20+
21+
var $ = require('jquery');
22+
var Options = require('select2/options');
23+
var Select2 = require('select2/core');
24+
25+
var $select = $(
26+
'<select>' +
27+
'<option>One</option>' +
28+
'<option>Two</option>' +
29+
'</select>'
30+
);
31+
32+
$('#qunit-fixture').append($select);
33+
34+
var select = new Select2($select);
35+
36+
select.on('selection:update', function (args) {
37+
assert.equal(
38+
args.data.length,
39+
1,
40+
'There was more than one selection'
41+
);
42+
43+
assert.equal(
44+
args.data[0].id,
45+
'One',
46+
'The selection changed to something other than One'
47+
);
48+
49+
if (expected != 2) {
50+
asyncDone();
51+
}
52+
});
53+
54+
assert.equal(
55+
$select.val(),
56+
'One'
57+
);
58+
59+
var $option = $('<option>Three</option>');
60+
61+
$select.append($option);
62+
63+
assert.equal(
64+
$select.val(),
65+
'One'
66+
);
67+
68+
syncDone();
69+
});
70+
71+
test('adding a new selected option changes the value', function (assert) {
72+
// handle IE 8 not being supported
73+
var expected = 4;
74+
if (!window.MutationObserver && !window.addEventListener) {
75+
expected = 2;
76+
}
77+
78+
assert.expect(expected);
79+
80+
var asyncDone = null;
81+
var syncDone = assert.async();
82+
83+
if (expected != 2) {
84+
asyncDone = assert.async();
85+
}
86+
87+
var $ = require('jquery');
88+
var Options = require('select2/options');
89+
var Select2 = require('select2/core');
90+
91+
var $select = $(
92+
'<select>' +
93+
'<option>One</option>' +
94+
'<option>Two</option>' +
95+
'</select>'
96+
);
97+
98+
$('#qunit-fixture').append($select);
99+
100+
var select = new Select2($select);
101+
102+
select.on('selection:update', function (args) {
103+
assert.equal(
104+
args.data.length,
105+
1,
106+
'There was more than one selection'
107+
);
108+
109+
assert.equal(
110+
args.data[0].id,
111+
'Three',
112+
'The selection did not change to Three'
113+
);
114+
115+
if (expected != 2) {
116+
asyncDone();
117+
}
118+
});
119+
120+
assert.equal(
121+
$select.val(),
122+
'One'
123+
);
124+
125+
var $option = $('<option selected>Three</option>');
126+
127+
$select.append($option);
128+
129+
assert.equal(
130+
$select.val(),
131+
'Three'
132+
);
133+
134+
syncDone();
135+
});
136+
137+
test('removing an unselected option changes nothing', function (assert) {
138+
// Any browsers which support mutation observers will not trigger the event
139+
var expected = 4;
140+
if (!window.MutationObserver && !window.addEventListener) {
141+
expected = 2;
142+
}
143+
144+
assert.expect(expected);
145+
146+
var asyncDone = null;
147+
var syncDone = assert.async();
148+
149+
if (expected != 2) {
150+
asyncDone = assert.async();
151+
}
152+
153+
var $ = require('jquery');
154+
var Options = require('select2/options');
155+
var Select2 = require('select2/core');
156+
157+
var $select = $(
158+
'<select>' +
159+
'<option>One</option>' +
160+
'<option>Two</option>' +
161+
'</select>'
162+
);
163+
164+
$('#qunit-fixture').append($select);
165+
166+
var select = new Select2($select);
167+
168+
select.on('selection:update', function (args) {
169+
assert.equal(
170+
args.data.length,
171+
1,
172+
'There was more than one selection'
173+
);
174+
175+
assert.equal(
176+
args.data[0].id,
177+
'One',
178+
'The selection changed to something other than One'
179+
);
180+
181+
if (expected != 2) {
182+
asyncDone();
183+
}
184+
});
185+
186+
assert.equal(
187+
$select.val(),
188+
'One'
189+
);
190+
191+
$select.children().eq(1).remove();
192+
193+
assert.equal(
194+
$select.val(),
195+
'One'
196+
);
197+
198+
syncDone();
199+
});
200+
201+
test('removing a selected option changes the value', function (assert) {
202+
// handle IE 8 not being supported
203+
var expected = 3;
204+
if (!window.MutationObserver && !window.addEventListener) {
205+
expected = 2;
206+
}
207+
208+
assert.expect(expected);
209+
210+
var asyncDone = null;
211+
var syncDone = assert.async();
212+
213+
if (expected != 2) {
214+
asyncDone = assert.async();
215+
}
216+
217+
var $ = require('jquery');
218+
var Options = require('select2/options');
219+
var Select2 = require('select2/core');
220+
221+
var $select = $(
222+
'<select>' +
223+
'<option>One</option>' +
224+
'<option>Two</option>' +
225+
'</select>'
226+
);
227+
228+
$('#qunit-fixture').append($select);
229+
230+
var select = new Select2($select);
231+
232+
select.on('selection:update', function (args) {
233+
assert.equal(
234+
args.data.length,
235+
1,
236+
'There was more than one selection'
237+
);
238+
239+
if (expected != 2) {
240+
asyncDone();
241+
}
242+
});
243+
244+
assert.equal(
245+
$select.val(),
246+
'One'
247+
);
248+
249+
$select.children().eq(0).remove();
250+
251+
assert.equal(
252+
$select.val(),
253+
'Two'
254+
);
255+
256+
syncDone();
257+
});

tests/integration/jquery-calls.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
module('select2(val)');
2+
13
test('multiple elements with arguments works', function (assert) {
24
var $ = require('jquery');
35
require('jquery.select2');

0 commit comments

Comments
 (0)