Tue, 06 Jan 2015 21:39:09 +0100
Conditionally force memory storage according to privacy.thirdparty.isolate;
This solves Tor bug #9701, complying with disk avoidance documented in
https://www.torproject.org/projects/torbrowser/design/#disk-avoidance.
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
73 <div id="debug"> </div>
75 <!-- Log output -->
76 <div id="testlog"> </div>
78 <!-- Tests follow -->
79 <script type="text/javascript" language="javascript" charset="utf-8">
80 // <![CDATA[
81 var globalValue;
83 new Test.Unit.Runner({
85 testSliderBasics: function() { with(this) {
86 var slider = new Control.Slider('handle1', 'track1');
87 assertInstanceOf(Control.Slider, slider);
88 assertEqual(Prototype.Browser.IE ? 5 : 4, Event.observers.length);
90 assertEqual('horizontal', slider.axis);
91 assertEqual(false, slider.disabled);
92 assertEqual(0, slider.value);
94 slider.dispose();
95 }},
97 testSliderValues: function() { with(this) {
98 ['horizontal', 'vertical'].each( function(axis) {
99 var slider = new Control.Slider('handle2-'+axis, 'track2-'+axis, {values:[0.2,0.4,0.6,0.8,1],axis:axis});
100 assertEqual(axis, slider.axis);
101 assertEqual(0.2, slider.value);
103 slider.setValue(0.35);
104 assertEqual(0.4, slider.value);
106 slider.setValueBy(0.1);
107 assertEqual(0.6, slider.value);
108 slider.setValueBy(-0.6);
109 assertEqual(0.2, slider.value);
111 slider.setValue(1);
112 assertEqual(1, slider.value);
114 slider.setValue(-2);
115 assertEqual(0.2, slider.value);
117 slider.setValue(55555);
118 assertEqual(1, slider.value);
120 // leave active to be able to play around with the sliders
121 // slider.dispose();
122 });
123 assertEqual("90px", $('handle2-horizontal').style.left);
124 assertEqual("90px", $('handle2-vertical').style.top);
125 }},
127 testSliderInitialValues: function() { with(this) {
128 var slider = new Control.Slider('handle1', 'track1',{sliderValue:0.5});
129 assertEqual(0.5, slider.value);
131 var slider = new Control.Slider(['handle4-1','handle4-2','handle4-3'], 'track4', {
132 sliderValue:[50,145,170],
133 values:[50,150,160,170,180],
134 range:$R(50,180)
135 });
136 assertEqual(50, slider.value);
137 assertEqual(50, slider.values[0]);
138 assertEqual(150, slider.values[1]);
139 assertEqual(170, slider.values[2]);
140 slider.dispose();
142 var slider = new Control.Slider(['handle4-1','handle4-2','handle4-3'], 'track4', {
143 sliderValue:[50,145,170],
144 values:[50,150,160,170,180]
145 });
146 assertEqual(50, slider.value);
147 assertEqual(50, slider.values[0]);
148 assertEqual(150, slider.values[1]);
149 assertEqual(170, slider.values[2]);
150 slider.dispose();
152 var slider = new Control.Slider(['handle4-1','handle4-2','handle4-3'], 'track4', {
153 restricted:true,
154 sliderValue:[50,145,170],
155 values:[50,150,160,170,180]
156 });
157 assertEqual(50, slider.value);
158 assertEqual(50, slider.values[0]);
159 assertEqual(150, slider.values[1]);
160 assertEqual(170, slider.values[2]);
161 slider.dispose();
162 }},
164 testSliderOnChange: function() { with(this) {
165 var slider = new Control.Slider('handle1', 'track1', { onChange:function(v){ globalValue = v; } });
166 slider.setValue(1);
167 assert(1, globalValue);
168 assert(1, slider.value);
170 slider.setDisabled();
171 slider.setValue(0.5);
172 assert(1, globalValue);
173 assert(1, slider.value);
175 slider.setEnabled();
176 slider.setValue(0.2);
177 assert(0.2, globalValue);
178 assert(0.2, slider.value);
180 // s.event should be null if setValue is called from script
181 var slider = new Control.Slider(['handle3-1','handle3-2','handle3-3'], 'track3', {
182 onChange:function(v, s){ if(!s.event) globalValue = v; } });
184 slider.setValue(0.5,1);
185 assertEqual([0,0.5,0].inspect(), globalValue.inspect());
186 assert(!slider.event);
188 slider.dispose();
189 }},
191 testMultipleHandles: function() { with(this) {
192 var slider = new Control.Slider(['handle3-1','handle3-2','handle3-3'], 'track3', {range:$R(0,300)});
193 assertInstanceOf(Control.Slider, slider);
195 slider.setValue(20, 0);
196 slider.setValue(50, 1);
197 slider.setValue(70, 2);
198 assertEqual(20, slider.values[0]);
199 assertEqual(50, slider.values[1]);
200 assertEqual(70, slider.values[2]);
201 assertEqual("20px", slider.handles[0].style.left);
202 assertEqual("49px", slider.handles[1].style.left);
203 assertEqual("68px", slider.handles[2].style.left);
205 // should change last manipulated handled by -10,
206 // so check for handle with idx 2
207 slider.setValueBy(-10);
208 assertEqual(60, slider.values[2]);
210 slider.setValueBy(10, 0);
211 assertEqual(20, slider.values[0]);
212 slider.setValueBy(10, 1);
213 assertEqual(60, slider.values[1]);
214 slider.setValueBy(20, slider.activeHandleIdx);
215 assertEqual(80, slider.values[1]);
216 }},
218 testMultipleHandlesValues: function() { with(this) {
219 var slider = new Control.Slider(['handle4-1','handle4-2','handle4-3'], 'track4', {values:[50,150,160,170,180],range:$R(50,180)});
220 assertInstanceOf(Control.Slider, slider);
222 slider.setValue(20, 0);
223 slider.setValue(150, 2);
224 slider.setValue(179, 1);
226 assertEqual(50, slider.values[0]);
227 assertEqual(150, slider.values[2]);
228 assertEqual(180, slider.values[1]);
230 assertEqual("0px", slider.handles[0].style.left);
231 assertEqual("225px", slider.handles[2].style.left);
232 assertEqual("293px", slider.handles[1].style.left);
234 assertEqual($R(50,150).inspect(), slider.getRange().inspect());
235 assertEqual(30, slider.getRange(1).end-slider.getRange(1).start);
236 }},
238 testMultipleHandlesSpans: function() { with(this) {
239 var slider = new Control.Slider(['handle5-1','handle5-2','handle5-3'], 'track5',
240 {spans:['span5-1','span5-2'],range:$R(0,300)});
241 assertInstanceOf(Control.Slider, slider);
243 slider.setValue(20, 0);
244 slider.setValue(100, 1);
245 slider.setValue(150, 2);
247 assertEqual("20px", $('span5-1').style.left);
248 assertEqual("78px", $('span5-1').style.width);
249 assertEqual("98px", $('span5-2').style.left);
250 assertEqual("49px", $('span5-2').style.width);
252 slider.setValue(30, 0);
253 slider.setValue(110, 1);
254 slider.setValue(90, 2);
256 assertEqual("29px", $('span5-1').style.left);
257 assertEqual("59px", $('span5-1').style.width);
258 assertEqual("88px", $('span5-2').style.left);
259 assertEqual("20px", $('span5-2').style.width);
261 slider.dispose();
262 }},
264 testMultipleHandlesSpansStartEnd: function() { with(this) {
265 var slider = new Control.Slider(['handle7-1','handle7-2','handle7-3'], 'track7',
266 { spans:['span7-1','span7-2'],
267 startSpan:'span7-start',
268 endSpan:'span7-end',
269 range:$R(0,200) });
270 assertInstanceOf(Control.Slider, slider);
272 slider.setValue(20, 0);
273 slider.setValue(100, 1);
274 slider.setValue(150, 2);
275 assertEqual("0px", $('span7-start').style.left);
276 assertEqual("19px", $('span7-start').style.width);
277 assertEqual("145px", $('span7-end').style.left);
278 assertEqual("48px", $('span7-end').style.width);
280 slider.dispose();
281 }},
283 testSingleHandleSpansStartEnd: function() { with(this) {
284 var slider = new Control.Slider('handle7-1', 'track7',
285 { spans:['span7-1','span7-2'],
286 startSpan:'span7-start',
287 endSpan:'span7-end',
288 range:$R(0,200) });
289 assertInstanceOf(Control.Slider, slider);
291 slider.setValue(20, 0);
292 assertEqual("0px", $('span7-start').style.left);
293 assertEqual("19px", $('span7-start').style.width);
294 assertEqual("19px", $('span7-end').style.left);
295 assertEqual("174px", $('span7-end').style.width);
297 slider.dispose();
298 }},
300 testMultipleHandlesStyles: function() { with(this) {
301 var slider = new Control.Slider(['handle7-1','handle7-2','handle7-3'], 'track7',
302 { spans:['span7-1','span7-2'],
303 startSpan:'span7-start',
304 endSpan:'span7-end',
305 range:$R(0,200) });
306 assertInstanceOf(Control.Slider, slider);
307 assert(Element.hasClassName('handle7-1','selected'));
308 assert(!Element.hasClassName('handle7-2','selected'));
309 assert(!Element.hasClassName('handle7-3','selected'));
311 slider.setValue(20, 0);
312 assert(Element.hasClassName('handle7-1','selected'));
313 assert(!Element.hasClassName('handle7-2','selected'));
314 assert(!Element.hasClassName('handle7-3','selected'));
316 slider.setValue(100, 1);
317 assert(!Element.hasClassName('handle7-1','selected'));
318 assert(Element.hasClassName('handle7-2','selected'));
319 assert(!Element.hasClassName('handle7-3','selected'));
321 slider.setValue(150, 2);
322 assert(!Element.hasClassName('handle7-1','selected'));
323 assert(!Element.hasClassName('handle7-2','selected'));
324 assert(Element.hasClassName('handle7-3','selected'));
326 slider.dispose();
327 }},
329 testMultipleHandlesSpansRestricted: function() { with(this) {
330 var slider = new Control.Slider(['handle5-1','handle5-2','handle5-3'], 'track5',
331 {restricted:true,spans:['span5-1','span5-2'],range:$R(0,300)});
332 assertInstanceOf(Control.Slider, slider);
334 slider.setValue(20, 0);
335 slider.setValue(100, 1);
336 slider.setValue(150, 2);
337 assertEqual(0, slider.values[0]);
338 assertEqual(0, slider.values[1]);
339 assertEqual(150, slider.values[2]);
341 slider.setValue(150, 2);
342 slider.setValue(100, 1);
343 slider.setValue(20, 0);
344 assertEqual(20, slider.values[0]);
345 assertEqual(100, slider.values[1]);
346 assertEqual(150, slider.values[2]);
347 assertEqual("20px", $('span5-1').style.left);
348 assertEqual("78px", $('span5-1').style.width);
349 assertEqual("98px", $('span5-2').style.left);
350 assertEqual("49px", $('span5-2').style.width);
352 slider.setValue(30, 0);
353 slider.setValue(110, 1);
354 slider.setValue(90, 2);
355 assertEqual(30, slider.values[0]);
356 assertEqual(110, slider.values[1]);
357 assertEqual(110, slider.values[2], '???');
359 assertEqual("29px", $('span5-1').style.left);
360 assertEqual("78px", $('span5-1').style.width);
361 assertEqual("107px", $('span5-2').style.left);
362 assertEqual("0px", $('span5-2').style.width);
364 slider.dispose();
365 }},
367 testMultipleHandlesSpansVertical: function() { with(this) {
368 var slider = new Control.Slider(['handle6-1','handle6-2','handle6-3'], 'track6', {axis:'vertical',spans:['span6-1','span6-2'],range:$R(0,100)});
369 assertInstanceOf(Control.Slider, slider);
371 slider.setValue(20, 0);
372 slider.setValue(80, 1);
373 slider.setValue(90, 2);
375 assertEqual("17px", $('span6-1').style.top);
376 assertEqual("52px", $('span6-1').style.height);
377 assertEqual("70px", $('span6-2').style.top);
378 assertEqual("9px", $('span6-2').style.height);
380 slider.setValue(30, 0);
381 slider.setValue(20, 1);
382 slider.setValue(95, 2);
384 assertEqual("17px", $('span6-1').style.top);
385 assertEqual("9px", $('span6-1').style.height);
386 assertEqual("26px", $('span6-2').style.top);
387 assertEqual("57px", $('span6-2').style.height);
388 }},
390 testRange: function() { with(this) {
391 var slider = new Control.Slider('handle1','track1');
392 assertEqual(0, slider.value);
393 slider.setValue(1);
394 assertEqual("185px", $('handle1').style.left);
395 slider.dispose();
397 var slider = new Control.Slider('handle1','track1',{range:$R(10,20)});
398 assertEqual(10, slider.value);
399 assertEqual("0px", $('handle1').style.left);
400 slider.setValue(15);
401 assertEqual("93px", $('handle1').style.left);
402 slider.setValue(20);
403 assertEqual("185px", $('handle1').style.left);
404 slider.dispose();
405 }},
407 // test for #3732
408 testRangeValues: function() { with(this) {
409 // test for non-zero starting range
410 var slider = new Control.Slider('handle1','track1',{
411 range:$R(1,3), values:[1,2,3]
412 });
413 assertEqual(1, slider.value);
414 assertEqual("0px", $('handle1').style.left);
415 slider.setValue(2);
416 assertEqual("93px", $('handle1').style.left);
417 slider.setValue(3);
418 assertEqual("185px", $('handle1').style.left);
419 slider.dispose();
421 // test zero-starting range
422 var slider = new Control.Slider('handle1','track1',{
423 range:$R(0,2), values:[0,1,2]
424 });
425 assertEqual(0, slider.value);
426 assertEqual("0px", $('handle1').style.left);
427 slider.setValue(1);
428 assertEqual("93px", $('handle1').style.left);
429 slider.setValue(2);
430 assertEqual("185px", $('handle1').style.left);
431 slider.dispose();
432 }}
434 }, "testlog");
435 // ]]>
436 </script>
437 </body>
438 </html>