Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
1 <?xml version="1.0"?>
2 <?xml-stylesheet href="chrome://global/skin" type="text/css"?>
3 <?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?>
4 <!--
5 XUL Widget Test for scale
6 -->
7 <window title="scale" width="500" height="600"
8 onload="setTimeout(testtag_scale, 0);"
9 xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
10 <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
11 <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script>
13 <hbox>
14 <vbox>
15 <scale id="scale-horizontal-normal"/>
16 <scale id="scale-horizontal-reverse" dir="reverse"/>
17 </vbox>
18 <scale id="scale-vertical-normal" orient="vertical"/>
19 <scale id="scale-vertical-reverse" orient="vertical" dir="reverse"/>
20 </hbox>
22 <body xmlns="http://www.w3.org/1999/xhtml">
23 <p id="display"></p>
24 <div id="content" style="display: none">
25 </div>
26 <pre id="test">
27 </pre>
28 </body>
30 <script>
31 <![CDATA[
33 SimpleTest.waitForExplicitFinish();
35 function testtag_scale()
36 {
37 testtag_scale_inner("scale-horizontal-normal", true, false);
38 testtag_scale_inner("scale-horizontal-reverse", true, true);
39 testtag_scale_inner("scale-vertical-normal", false, false);
40 testtag_scale_inner("scale-vertical-reverse", false, true);
42 SimpleTest.finish();
43 }
45 function testtag_scale_inner(elementid, horiz, reverse)
46 {
47 var testid = (horiz ? "horizontal " : "vertical ") +
48 (reverse ? "reverse " : "normal ");
50 var element = document.getElementById(elementid);
52 testtag_scale_States(element, 0, "", 0, 100, testid + "initial");
54 element.min = 0;
55 element.max = 10;
56 testtag_scale_States(element, 0, "", 0, 10, testid + "first set");
58 element.decrease();
59 is(element.value, 0, testid + "decrease");
60 element.increase();
61 is(element.value, 1, testid + "increase");
62 element.value = 0;
63 is(element.value, 0, testid + "set value");
65 testtag_scale_Increments(element, 0, 10, 6, 7, testid + "increase decrease");
67 // check if changing the min and max adjusts the value to fit in range
68 element.min = 5;
69 testtag_scale_States(element, 5, "5", 5, 10, testid + "change min");
70 element.value = 15;
71 is(element.value, 10, testid + "change minmax value set too high");
72 element.max = 8;
73 is(element.value, 8, testid + "change max");
74 element.value = 2;
75 is(element.value, 5, testid + "change minmax set too low");
77 // check negative values
78 element.min = -15;
79 element.max = -5;
80 testtag_scale_States(element, -5, "-5", -15, -5, testid + "minmax negative");
81 element.value = -15;
82 is(element.value, -15, testid + "change max negative");
83 testtag_scale_Increments(element, -15, -5, 7, 8, testid + "increase decrease negative");
85 // check case when min is negative and max is positive
86 element.min = -10;
87 element.max = 35;
88 testtag_scale_States(element, -10, "-10", -10, 35, testid + "minmax mixed sign");
89 testtag_scale_Increments(element, -10, 35, 25, 30, testid + "increase decrease mixed sign");
91 testtag_scale_UI(element, testid, horiz, reverse);
92 }
94 function testtag_scale_UI(element, testid, horiz, reverse)
95 {
96 element.min = 0;
97 element.max = 20;
98 element.value = 7;
99 element.increment = 2;
100 element.pageIncrement = 4;
102 element.focus();
104 var leftIncrements = horiz && reverse;
105 var upDecrements = !horiz && !reverse;
106 synthesizeKeyExpectEvent("VK_LEFT", { }, element, "change", testid + "key left");
107 is(element.value, leftIncrements ? 9 : 5, testid + " key left");
108 synthesizeKeyExpectEvent("VK_RIGHT", { }, element, "change", testid + "key right");
109 is(element.value, 7, testid + " key right");
110 synthesizeKeyExpectEvent("VK_UP", { }, element, "change", testid + "key up");
111 is(element.value, upDecrements ? 5 : 9, testid + " key up");
112 synthesizeKeyExpectEvent("VK_DOWN", { }, element, "change", testid + "key down");
113 is(element.value, 7, testid + " key down");
115 synthesizeKeyExpectEvent("VK_PAGE_UP", { }, element, "change", testid + "key page up");
116 is(element.value, upDecrements ? 3 : 11, testid + " key page up");
117 synthesizeKeyExpectEvent("VK_PAGE_DOWN", { }, element, "change", testid + "key page down");
118 is(element.value, 7, testid + " key page down");
120 synthesizeKeyExpectEvent("VK_HOME", { }, element, "change", testid + "key home");
121 is(element.value, reverse ? 20 : 0, testid + " key home");
122 synthesizeKeyExpectEvent("VK_END", { }, element, "change", testid + "key end");
123 is(element.value, reverse ? 0 : 20, testid + " key end");
125 testtag_scale_UI_Mouse(element, testid, horiz, reverse, 4);
127 element.min = 4;
128 element.pageIncrement = 3;
129 testtag_scale_UI_Mouse(element, testid + " with min", horiz, reverse, 3);
131 element.pageIncrement = 30;
132 testtag_scale_UI_Mouse(element, testid + " with min past", horiz, reverse, 30);
133 }
135 function testtag_scale_UI_Mouse(element, testid, horiz, reverse, pinc)
136 {
137 var initial = reverse ? 8 : 12;
138 var newval = initial + (reverse ? pinc : -pinc);
139 var endval = initial;
140 // in the pinc == 30 case, the page increment is large enough that it would
141 // just cause the thumb to reach the end of the scale. Make sure that the
142 // mouse click does not go past the end.
143 if (pinc == 30) {
144 newval = reverse ? 20 : 4;
145 endval = reverse ? 4 : 20;
146 }
147 element.value = initial;
149 var hmove = horiz ? 25 : 10;
150 var vmove = horiz ? 10 : 25;
152 var leftFn = function () { return reverse ? element.value < newval + 3 : element.value > newval - 3; }
153 var rightFn = function () { return reverse ? element.value < endval - 3 : element.value < endval + 3; }
155 // check that clicking the mouse on the trough moves the thumb properly
156 synthesizeMouseExpectEvent(element, hmove, vmove, { }, element, "change", testid + "mouse on left movetoclick=default");
158 if (navigator.platform.indexOf("Mac") >= 0) {
159 if (pinc == 30)
160 ok(element.value > 4, testid + " mouse on left movetoclick=default");
161 else
162 ok(leftFn, testid + " mouse on left movetoclick=default");
163 }
164 else {
165 is(element.value, newval, testid + " mouse on left movetoclick=default");
166 }
168 var rect = element.getBoundingClientRect();
169 synthesizeMouseExpectEvent(element, rect.right - rect.left - hmove,
170 rect.bottom - rect.top - vmove, { },
171 element, "change", testid + " mouse on right movetoclick=default");
173 if (navigator.platform.indexOf("Mac") >= 0) {
174 if (pinc == 30)
175 ok(element.value < 20, testid + " mouse on right movetoclick=default");
176 else
177 ok(rightFn, testid + " mouse on right movetoclick=default");
178 }
179 else {
180 is(element.value, endval, testid + " mouse on right movetoclick=default");
181 }
183 element.setAttribute("movetoclick", "true");
184 element.value = initial;
186 synthesizeMouseExpectEvent(element, hmove, vmove, { }, element, "change", testid + "mouse on left movetoclick=true");
187 if (pinc == 30)
188 ok(element.value > 4, testid + " mouse on left movetoclick=true");
189 else
190 ok(leftFn, testid + " mouse on left movetoclick=true");
192 var rect = element.getBoundingClientRect();
193 synthesizeMouseExpectEvent(element, rect.right - rect.left - hmove,
194 rect.bottom - rect.top - vmove, { },
195 element, "change", testid + " mouse on right movetoclick=true");
196 if (pinc == 30)
197 ok(element.value < 20, testid + " mouse on right movetoclick=true");
198 else
199 ok(rightFn, testid + " mouse on right movetoclick=true");
201 element.setAttribute("movetoclick", "false");
202 element.value = initial;
204 synthesizeMouseExpectEvent(element, hmove, vmove, { }, element, "change", testid + "mouse on left movetoclick=false");
205 is(element.value, newval, testid + " mouse on left movetoclick=false");
207 var rect = element.getBoundingClientRect();
208 synthesizeMouseExpectEvent(element, rect.right - rect.left - hmove,
209 rect.bottom - rect.top - vmove, { },
210 element, "change", testid + " mouse on right movetoclick=false");
211 is(element.value, endval, testid + " mouse on right movetoclick=false");
213 element.removeAttribute("movetoclick");
215 element.value = reverse ? element.max : element.min;
217 synthesizeMouse(element, 8, 8, { type: "mousedown" });
218 synthesizeMouse(element, horiz ? 2000 : 8, horiz ? 8 : 2000, { type: "mousemove" });
219 is(element.value, reverse ? element.min : element.max, testid + " move mouse too far after end");
220 synthesizeMouse(element, 2, 2, { type: "mouseup" });
222 synthesizeMouse(element, rect.width - 8, rect.height - 8, { type: "mousedown" });
223 synthesizeMouse(element, horiz ? -2000 : rect.width - 8, horiz ? rect.height - 8 : -2000, { type: "mousemove" });
224 is(element.value, reverse ? element.max : element.min, testid + " move mouse too far before start");
226 synthesizeMouse(element, 2, 2, { type: "mouseup" });
228 // now check if moving outside in both directions works. On Windows,
229 // it should snap back to the original location.
230 element.value = reverse ? element.max : element.min;
232 var expected = (navigator.platform.indexOf("Win") >= 0) ? element.value :
233 (reverse ? element.min : element.max);
234 synthesizeMouse(element, 7, 7, { type: "mousedown" });
235 synthesizeMouse(element, 2000, 2000, { type: "mousemove" });
236 is(element.value, expected, testid + " move mouse ouside in both directions");
237 synthesizeMouse(element, 2, 2, { type: "mouseup" });
238 }
240 function testtag_scale_States(element, evalue, evalueattr, emin, emax, testid)
241 {
242 is(element.getAttribute("value"), evalueattr, testid + " value attribute");
243 is(element.value, evalue, testid + " value");
244 is(element.min, emin, testid + " min");
245 is(element.max, emax, testid + " max");
246 }
248 function testtag_scale_Increments(element, min, max, increment, pageIncrement, testid)
249 {
250 // check the increase and decrease methods
251 element.increment = increment;
252 element.increase();
253 is(element.value, min + increment, testid + " increase 1");
254 element.increase();
255 is(element.value, max, testid + " increase 2");
256 element.decrease();
257 is(element.value, max - increment, testid + " decrease 1");
258 element.decrease();
259 is(element.value, min, testid + " decrease 2");
261 // check the increasePage and decreasePage methods
262 element.pageIncrement = pageIncrement;
263 element.increasePage();
264 is(element.value, min + pageIncrement, testid + " increasePage 1");
265 element.increasePage();
266 is(element.value, max, testid + " increasePage 2");
267 element.decreasePage();
268 is(element.value, max - pageIncrement, testid + " decreasePage 1");
269 element.decreasePage();
270 is(element.value, min, testid + " decreasePage 2");
271 }
273 ]]>
275 </script>
277 </window>