1 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" |
---|
2 | "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
---|
3 | <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> |
---|
4 | <head> |
---|
5 | <title>script.aculo.us Unit test file</title> |
---|
6 | <meta http-equiv="content-type" content="text/html; charset=utf-8" /> |
---|
7 | <script src="../../lib/prototype.js" type="text/javascript"></script> |
---|
8 | <script src="../../src/scriptaculous.js" type="text/javascript"></script> |
---|
9 | <script src="../../src/unittest.js" type="text/javascript"></script> |
---|
10 | <link rel="stylesheet" href="../test.css" type="text/css" /> |
---|
11 | </head> |
---|
12 | <body> |
---|
13 | <h1>script.aculo.us Unit test file</h1> |
---|
14 | <p> |
---|
15 | Tests for slider.js |
---|
16 | </p> |
---|
17 | |
---|
18 | <div id="track1" style="width:200px;background-color:#aaa;height:5px;"> |
---|
19 | <div id="handle1" style="width:15px;height:25px;background-color:#f00;"> </div> |
---|
20 | </div> |
---|
21 | |
---|
22 | <div id="track2-vertical" style="height:100px;background-color:#aaa;width:5px;"> |
---|
23 | <div id="handle2-vertical" style="width:25px;height:10px;background-color:#f00;"> </div> |
---|
24 | </div> |
---|
25 | |
---|
26 | <div id="track2-horizontal" style="height:5px;background-color:#aaa;width:100px;"> |
---|
27 | <div id="handle2-horizontal" style="width:10px;height:25px;background-color:#f00;"> </div> |
---|
28 | </div> |
---|
29 | |
---|
30 | <div id="track3" style="width:300px;background-color:#cfb;height:30px;"> |
---|
31 | <span id="handle3-1">1</span> |
---|
32 | <span id="handle3-2">2</span> |
---|
33 | <span id="handle3-3">3</span> |
---|
34 | </div> |
---|
35 | |
---|
36 | <div id="track4" style="width:300px;position:relative;background-color:#cbf;height:30px;"> |
---|
37 | <span id="handle4-1" style="top:0;left:0;position:absolute;background-color:#f00;">1</span> |
---|
38 | <span id="handle4-2" style="top:0;left:0;position:absolute;background-color:#0f0;">2</span> |
---|
39 | <span id="handle4-3" style="top:0;left:0;position:absolute;background-color:#00f;">3</span> |
---|
40 | </div> |
---|
41 | |
---|
42 | <div id="track5" style="width:300px;background-color:#cbf;height:30px;position:relative;z-index:0;"> |
---|
43 | <div id="handle5-1" style="top:0;left:0;position:absolute;background-color:#f00;z-index:2">1</div> |
---|
44 | <div id="handle5-2" style="top:0;left:0;position:absolute;background-color:#0f0;z-index:2">2</div> |
---|
45 | <div id="handle5-3" style="top:0;left:0;position:absolute;background-color:#00f;z-index:2">3</div> |
---|
46 | |
---|
47 | <div id="span5-1" style="top:0;left:0;position:absolute;background-color:#000;height:20px;z-index:1;"> </div> |
---|
48 | <div id="span5-2" style="top:0;left:0;position:absolute;background-color:#444;height:20px;z-index:1;"> </div> |
---|
49 | </div> |
---|
50 | |
---|
51 | <div id="track6" style="width:20px;background-color:#cbf;height:100px;position:relative;z-index:0;"> |
---|
52 | <div id="handle6-1" style="top:0;left:0;height:13px;position:absolute;background-color:#f00;z-index:2">1</div> |
---|
53 | <div id="handle6-2" style="top:0;left:0;height:13px;position:absolute;background-color:#0f0;z-index:2">2</div> |
---|
54 | <div id="handle6-3" style="top:0;left:0;height:13px;position:absolute;background-color:#00f;z-index:2">3</div> |
---|
55 | |
---|
56 | <div id="span6-1" style="top:0;left:0;position:absolute;background-color:#000;width:20px;z-index:1;"> </div> |
---|
57 | <div id="span6-2" style="top:0;left:0;position:absolute;background-color:#444;width:20px;z-index:1;"> </div> |
---|
58 | </div> |
---|
59 | |
---|
60 | <div id="track7" style="width:200px;background-color:#cbf;height:30px;position:relative;z-index:0;"> |
---|
61 | <div id="handle7-1" style="top:0;left:0;position:absolute;background-color:#f88;z-index:2">1</div> |
---|
62 | <div id="handle7-2" style="top:0;left:0;position:absolute;background-color:#8f8;z-index:2">2</div> |
---|
63 | <div id="handle7-3" style="top:0;left:0;position:absolute;background-color:#88f;z-index:2">3</div> |
---|
64 | |
---|
65 | <div id="span7-1" style="top:0;left:0;position:absolute;background-color:#000;height:20px;z-index:1;"> </div> |
---|
66 | <div id="span7-2" style="top:0;left:0;position:absolute;background-color:#444;height:20px;z-index:1;"> </div> |
---|
67 | |
---|
68 | <div id="span7-start" style="top:0;left:0;position:absolute;background-color:#f00;height:20px;z-index:1;"> </div> |
---|
69 | <div id="span7-end" style="top:0;left:0;position:absolute;background-color:#00f;height:20px;z-index:1;"> </div> |
---|
70 | </div> |
---|
71 | |
---|
72 | |
---|
73 | <div id="debug"> </div> |
---|
74 | |
---|
75 | <!-- Log output --> |
---|
76 | <div id="testlog"> </div> |
---|
77 | |
---|
78 | <!-- Tests follow --> |
---|
79 | <script type="text/javascript" language="javascript" charset="utf-8"> |
---|
80 | // <![CDATA[ |
---|
81 | var globalValue; |
---|
82 | |
---|
83 | new Test.Unit.Runner({ |
---|
84 | |
---|
85 | testSliderBasics: function() { with(this) { |
---|
86 | var slider = new Control.Slider('handle1', 'track1'); |
---|
87 | assertInstanceOf(Control.Slider, slider); |
---|
88 | |
---|
89 | assertEqual('horizontal', slider.axis); |
---|
90 | assertEqual(false, slider.disabled); |
---|
91 | assertEqual(0, slider.value); |
---|
92 | |
---|
93 | slider.dispose(); |
---|
94 | }}, |
---|
95 | |
---|
96 | testSliderValues: function() { with(this) { |
---|
97 | ['horizontal', 'vertical'].each( function(axis) { |
---|
98 | var slider = new Control.Slider('handle2-'+axis, 'track2-'+axis, {values:[0.2,0.4,0.6,0.8,1],axis:axis}); |
---|
99 | assertEqual(axis, slider.axis); |
---|
100 | assertEqual(0.2, slider.value); |
---|
101 | |
---|
102 | slider.setValue(0.35); |
---|
103 | assertEqual(0.4, slider.value); |
---|
104 | |
---|
105 | slider.setValueBy(0.1); |
---|
106 | assertEqual(0.6, slider.value); |
---|
107 | slider.setValueBy(-0.6); |
---|
108 | assertEqual(0.2, slider.value); |
---|
109 | |
---|
110 | slider.setValue(1); |
---|
111 | assertEqual(1, slider.value); |
---|
112 | |
---|
113 | slider.setValue(-2); |
---|
114 | assertEqual(0.2, slider.value); |
---|
115 | |
---|
116 | slider.setValue(55555); |
---|
117 | assertEqual(1, slider.value); |
---|
118 | |
---|
119 | // leave active to be able to play around with the sliders |
---|
120 | // slider.dispose(); |
---|
121 | }); |
---|
122 | assertEqual("90px", $('handle2-horizontal').style.left); |
---|
123 | assertEqual("90px", $('handle2-vertical').style.top); |
---|
124 | }}, |
---|
125 | |
---|
126 | testSliderInitialValues: function() { with(this) { |
---|
127 | var slider = new Control.Slider('handle1', 'track1',{sliderValue:0.5}); |
---|
128 | assertEqual(0.5, slider.value); |
---|
129 | |
---|
130 | var slider = new Control.Slider(['handle4-1','handle4-2','handle4-3'], 'track4', { |
---|
131 | sliderValue:[50,145,170], |
---|
132 | values:[50,150,160,170,180], |
---|
133 | range:$R(50,180) |
---|
134 | }); |
---|
135 | assertEqual(50, slider.value); |
---|
136 | assertEqual(50, slider.values[0]); |
---|
137 | assertEqual(150, slider.values[1]); |
---|
138 | assertEqual(170, slider.values[2]); |
---|
139 | slider.dispose(); |
---|
140 | |
---|
141 | var slider = new Control.Slider(['handle4-1','handle4-2','handle4-3'], 'track4', { |
---|
142 | sliderValue:[50,145,170], |
---|
143 | values:[50,150,160,170,180] |
---|
144 | }); |
---|
145 | assertEqual(50, slider.value); |
---|
146 | assertEqual(50, slider.values[0]); |
---|
147 | assertEqual(150, slider.values[1]); |
---|
148 | assertEqual(170, slider.values[2]); |
---|
149 | slider.dispose(); |
---|
150 | |
---|
151 | var slider = new Control.Slider(['handle4-1','handle4-2','handle4-3'], 'track4', { |
---|
152 | restricted:true, |
---|
153 | sliderValue:[50,145,170], |
---|
154 | values:[50,150,160,170,180] |
---|
155 | }); |
---|
156 | assertEqual(50, slider.value); |
---|
157 | assertEqual(50, slider.values[0]); |
---|
158 | assertEqual(150, slider.values[1]); |
---|
159 | assertEqual(170, slider.values[2]); |
---|
160 | slider.dispose(); |
---|
161 | }}, |
---|
162 | |
---|
163 | testSliderOnChange: function() { with(this) { |
---|
164 | var slider = new Control.Slider('handle1', 'track1', { onChange:function(v){ globalValue = v; } }); |
---|
165 | slider.setValue(1); |
---|
166 | assert(1, globalValue); |
---|
167 | assert(1, slider.value); |
---|
168 | |
---|
169 | slider.setDisabled(); |
---|
170 | slider.setValue(0.5); |
---|
171 | assert(1, globalValue); |
---|
172 | assert(1, slider.value); |
---|
173 | |
---|
174 | slider.setEnabled(); |
---|
175 | slider.setValue(0.2); |
---|
176 | assert(0.2, globalValue); |
---|
177 | assert(0.2, slider.value); |
---|
178 | |
---|
179 | // s.event should be null if setValue is called from script |
---|
180 | var slider = new Control.Slider(['handle3-1','handle3-2','handle3-3'], 'track3', { |
---|
181 | onChange:function(v, s){ if(!s.event) globalValue = v; } }); |
---|
182 | |
---|
183 | slider.setValue(0.5,1); |
---|
184 | assertEqual([0,0.5,0].inspect(), globalValue.inspect()); |
---|
185 | assert(!slider.event); |
---|
186 | |
---|
187 | slider.dispose(); |
---|
188 | }}, |
---|
189 | |
---|
190 | testMultipleHandles: function() { with(this) { |
---|
191 | var slider = new Control.Slider(['handle3-1','handle3-2','handle3-3'], 'track3', {range:$R(0,300)}); |
---|
192 | assertInstanceOf(Control.Slider, slider); |
---|
193 | |
---|
194 | slider.setValue(20, 0); |
---|
195 | slider.setValue(50, 1); |
---|
196 | slider.setValue(70, 2); |
---|
197 | assertEqual(20, slider.values[0]); |
---|
198 | assertEqual(50, slider.values[1]); |
---|
199 | assertEqual(70, slider.values[2]); |
---|
200 | assertEqual("20px", slider.handles[0].style.left); |
---|
201 | assertEqual("49px", slider.handles[1].style.left); |
---|
202 | assertEqual("68px", slider.handles[2].style.left); |
---|
203 | |
---|
204 | // should change last manipulated handled by -10, |
---|
205 | // so check for handle with idx 2 |
---|
206 | slider.setValueBy(-10); |
---|
207 | assertEqual(60, slider.values[2]); |
---|
208 | |
---|
209 | slider.setValueBy(10, 0); |
---|
210 | assertEqual(20, slider.values[0]); |
---|
211 | slider.setValueBy(10, 1); |
---|
212 | assertEqual(60, slider.values[1]); |
---|
213 | slider.setValueBy(20, slider.activeHandleIdx); |
---|
214 | assertEqual(80, slider.values[1]); |
---|
215 | }}, |
---|
216 | |
---|
217 | testMultipleHandlesValues: function() { with(this) { |
---|
218 | var slider = new Control.Slider(['handle4-1','handle4-2','handle4-3'], 'track4', {values:[50,150,160,170,180],range:$R(50,180)}); |
---|
219 | assertInstanceOf(Control.Slider, slider); |
---|
220 | |
---|
221 | slider.setValue(20, 0); |
---|
222 | slider.setValue(150, 2); |
---|
223 | slider.setValue(179, 1); |
---|
224 | |
---|
225 | assertEqual(50, slider.values[0]); |
---|
226 | assertEqual(150, slider.values[2]); |
---|
227 | assertEqual(180, slider.values[1]); |
---|
228 | |
---|
229 | assertEqual("0px", slider.handles[0].style.left); |
---|
230 | assertEqual("225px", slider.handles[2].style.left); |
---|
231 | assertEqual("293px", slider.handles[1].style.left); |
---|
232 | |
---|
233 | assertEqual($R(50,150).inspect(), slider.getRange().inspect()); |
---|
234 | assertEqual(30, slider.getRange(1).end-slider.getRange(1).start); |
---|
235 | }}, |
---|
236 | |
---|
237 | testMultipleHandlesSpans: function() { with(this) { |
---|
238 | var slider = new Control.Slider(['handle5-1','handle5-2','handle5-3'], 'track5', |
---|
239 | {spans:['span5-1','span5-2'],range:$R(0,300)}); |
---|
240 | assertInstanceOf(Control.Slider, slider); |
---|
241 | |
---|
242 | slider.setValue(20, 0); |
---|
243 | slider.setValue(100, 1); |
---|
244 | slider.setValue(150, 2); |
---|
245 | |
---|
246 | assertEqual("20px", $('span5-1').style.left); |
---|
247 | assertEqual("78px", $('span5-1').style.width); |
---|
248 | assertEqual("98px", $('span5-2').style.left); |
---|
249 | assertEqual("49px", $('span5-2').style.width); |
---|
250 | |
---|
251 | slider.setValue(30, 0); |
---|
252 | slider.setValue(110, 1); |
---|
253 | slider.setValue(90, 2); |
---|
254 | |
---|
255 | assertEqual("29px", $('span5-1').style.left); |
---|
256 | assertEqual("59px", $('span5-1').style.width); |
---|
257 | assertEqual("88px", $('span5-2').style.left); |
---|
258 | assertEqual("20px", $('span5-2').style.width); |
---|
259 | |
---|
260 | slider.dispose(); |
---|
261 | }}, |
---|
262 | |
---|
263 | testMultipleHandlesSpansStartEnd: function() { with(this) { |
---|
264 | var slider = new Control.Slider(['handle7-1','handle7-2','handle7-3'], 'track7', |
---|
265 | { spans:['span7-1','span7-2'], |
---|
266 | startSpan:'span7-start', |
---|
267 | endSpan:'span7-end', |
---|
268 | range:$R(0,200) }); |
---|
269 | assertInstanceOf(Control.Slider, slider); |
---|
270 | |
---|
271 | slider.setValue(20, 0); |
---|
272 | slider.setValue(100, 1); |
---|
273 | slider.setValue(150, 2); |
---|
274 | assertEqual("0px", $('span7-start').style.left); |
---|
275 | assertEqual("19px", $('span7-start').style.width); |
---|
276 | assertEqual("145px", $('span7-end').style.left); |
---|
277 | assertEqual("48px", $('span7-end').style.width); |
---|
278 | |
---|
279 | slider.dispose(); |
---|
280 | }}, |
---|
281 | |
---|
282 | testSingleHandleSpansStartEnd: function() { with(this) { |
---|
283 | var slider = new Control.Slider('handle7-1', 'track7', |
---|
284 | { spans:['span7-1','span7-2'], |
---|
285 | startSpan:'span7-start', |
---|
286 | endSpan:'span7-end', |
---|
287 | range:$R(0,200) }); |
---|
288 | assertInstanceOf(Control.Slider, slider); |
---|
289 | |
---|
290 | slider.setValue(20, 0); |
---|
291 | assertEqual("0px", $('span7-start').style.left); |
---|
292 | assertEqual("19px", $('span7-start').style.width); |
---|
293 | assertEqual("19px", $('span7-end').style.left); |
---|
294 | assertEqual("174px", $('span7-end').style.width); |
---|
295 | |
---|
296 | slider.dispose(); |
---|
297 | }}, |
---|
298 | |
---|
299 | testMultipleHandlesStyles: function() { with(this) { |
---|
300 | var slider = new Control.Slider(['handle7-1','handle7-2','handle7-3'], 'track7', |
---|
301 | { spans:['span7-1','span7-2'], |
---|
302 | startSpan:'span7-start', |
---|
303 | endSpan:'span7-end', |
---|
304 | range:$R(0,200) }); |
---|
305 | assertInstanceOf(Control.Slider, slider); |
---|
306 | assert(Element.hasClassName('handle7-1','selected')); |
---|
307 | assert(!Element.hasClassName('handle7-2','selected')); |
---|
308 | assert(!Element.hasClassName('handle7-3','selected')); |
---|
309 | |
---|
310 | slider.setValue(20, 0); |
---|
311 | assert(Element.hasClassName('handle7-1','selected')); |
---|
312 | assert(!Element.hasClassName('handle7-2','selected')); |
---|
313 | assert(!Element.hasClassName('handle7-3','selected')); |
---|
314 | |
---|
315 | slider.setValue(100, 1); |
---|
316 | assert(!Element.hasClassName('handle7-1','selected')); |
---|
317 | assert(Element.hasClassName('handle7-2','selected')); |
---|
318 | assert(!Element.hasClassName('handle7-3','selected')); |
---|
319 | |
---|
320 | slider.setValue(150, 2); |
---|
321 | assert(!Element.hasClassName('handle7-1','selected')); |
---|
322 | assert(!Element.hasClassName('handle7-2','selected')); |
---|
323 | assert(Element.hasClassName('handle7-3','selected')); |
---|
324 | |
---|
325 | slider.dispose(); |
---|
326 | }}, |
---|
327 | |
---|
328 | testMultipleHandlesSpansRestricted: function() { with(this) { |
---|
329 | var slider = new Control.Slider(['handle5-1','handle5-2','handle5-3'], 'track5', |
---|
330 | {restricted:true,spans:['span5-1','span5-2'],range:$R(0,300)}); |
---|
331 | assertInstanceOf(Control.Slider, slider); |
---|
332 | |
---|
333 | slider.setValue(20, 0); |
---|
334 | slider.setValue(100, 1); |
---|
335 | slider.setValue(150, 2); |
---|
336 | assertEqual(0, slider.values[0]); |
---|
337 | assertEqual(0, slider.values[1]); |
---|
338 | assertEqual(150, slider.values[2]); |
---|
339 | |
---|
340 | slider.setValue(150, 2); |
---|
341 | slider.setValue(100, 1); |
---|
342 | slider.setValue(20, 0); |
---|
343 | assertEqual(20, slider.values[0]); |
---|
344 | assertEqual(100, slider.values[1]); |
---|
345 | assertEqual(150, slider.values[2]); |
---|
346 | assertEqual("20px", $('span5-1').style.left); |
---|
347 | assertEqual("78px", $('span5-1').style.width); |
---|
348 | assertEqual("98px", $('span5-2').style.left); |
---|
349 | assertEqual("49px", $('span5-2').style.width); |
---|
350 | |
---|
351 | slider.setValue(30, 0); |
---|
352 | slider.setValue(110, 1); |
---|
353 | slider.setValue(90, 2); |
---|
354 | assertEqual(30, slider.values[0]); |
---|
355 | assertEqual(110, slider.values[1]); |
---|
356 | assertEqual(110, slider.values[2], '???'); |
---|
357 | |
---|
358 | assertEqual("29px", $('span5-1').style.left); |
---|
359 | assertEqual("78px", $('span5-1').style.width); |
---|
360 | assertEqual("107px", $('span5-2').style.left); |
---|
361 | assertEqual("0px", $('span5-2').style.width); |
---|
362 | |
---|
363 | slider.dispose(); |
---|
364 | }}, |
---|
365 | |
---|
366 | testMultipleHandlesSpansVertical: function() { with(this) { |
---|
367 | var slider = new Control.Slider(['handle6-1','handle6-2','handle6-3'], 'track6', {axis:'vertical',spans:['span6-1','span6-2'],range:$R(0,100)}); |
---|
368 | assertInstanceOf(Control.Slider, slider); |
---|
369 | |
---|
370 | slider.setValue(20, 0); |
---|
371 | slider.setValue(80, 1); |
---|
372 | slider.setValue(90, 2); |
---|
373 | |
---|
374 | assertEqual("17px", $('span6-1').style.top); |
---|
375 | assertEqual("52px", $('span6-1').style.height); |
---|
376 | assertEqual("70px", $('span6-2').style.top); |
---|
377 | assertEqual("9px", $('span6-2').style.height); |
---|
378 | |
---|
379 | slider.setValue(30, 0); |
---|
380 | slider.setValue(20, 1); |
---|
381 | slider.setValue(95, 2); |
---|
382 | |
---|
383 | assertEqual("17px", $('span6-1').style.top); |
---|
384 | assertEqual("9px", $('span6-1').style.height); |
---|
385 | assertEqual("26px", $('span6-2').style.top); |
---|
386 | assertEqual("57px", $('span6-2').style.height); |
---|
387 | }}, |
---|
388 | |
---|
389 | testRange: function() { with(this) { |
---|
390 | var slider = new Control.Slider('handle1','track1'); |
---|
391 | assertEqual(0, slider.value); |
---|
392 | slider.setValue(1); |
---|
393 | assertEqual("185px", $('handle1').style.left); |
---|
394 | slider.dispose(); |
---|
395 | |
---|
396 | var slider = new Control.Slider('handle1','track1',{range:$R(10,20)}); |
---|
397 | assertEqual(10, slider.value); |
---|
398 | assertEqual("0px", $('handle1').style.left); |
---|
399 | slider.setValue(15); |
---|
400 | assertEqual("93px", $('handle1').style.left); |
---|
401 | slider.setValue(20); |
---|
402 | assertEqual("185px", $('handle1').style.left); |
---|
403 | slider.dispose(); |
---|
404 | }}, |
---|
405 | |
---|
406 | // test for #3732 |
---|
407 | testRangeValues: function() { with(this) { |
---|
408 | // test for non-zero starting range |
---|
409 | var slider = new Control.Slider('handle1','track1',{ |
---|
410 | range:$R(1,3), values:[1,2,3] |
---|
411 | }); |
---|
412 | assertEqual(1, slider.value); |
---|
413 | assertEqual("0px", $('handle1').style.left); |
---|
414 | slider.setValue(2); |
---|
415 | assertEqual("93px", $('handle1').style.left); |
---|
416 | slider.setValue(3); |
---|
417 | assertEqual("185px", $('handle1').style.left); |
---|
418 | slider.dispose(); |
---|
419 | |
---|
420 | // test zero-starting range |
---|
421 | var slider = new Control.Slider('handle1','track1',{ |
---|
422 | range:$R(0,2), values:[0,1,2] |
---|
423 | }); |
---|
424 | assertEqual(0, slider.value); |
---|
425 | assertEqual("0px", $('handle1').style.left); |
---|
426 | slider.setValue(1); |
---|
427 | assertEqual("93px", $('handle1').style.left); |
---|
428 | slider.setValue(2); |
---|
429 | assertEqual("185px", $('handle1').style.left); |
---|
430 | slider.dispose(); |
---|
431 | }} |
---|
432 | |
---|
433 | }, "testlog"); |
---|
434 | // ]]> |
---|
435 | </script> |
---|
436 | </body> |
---|
437 | </html> |
---|