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+ } ) ;
0 commit comments