1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/toolkit/content/tests/chrome/test_scaledrag.xul Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,197 @@ 1.4 +<?xml version="1.0"?> 1.5 +<?xml-stylesheet href="chrome://global/skin" type="text/css"?> 1.6 +<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?> 1.7 +<!-- 1.8 +XUL <scale> dragging tests 1.9 +--> 1.10 +<window title="Dragging XUL scale tests" width="500" height="600" 1.11 + xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> 1.12 + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> 1.13 + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script> 1.14 + 1.15 + <hbox flex="1"> 1.16 + <scale id="scale1" orient="horizontal" flex="1" min="0" max="4" value="2"/> 1.17 + <scale id="scale2" orient="vertical" flex="1" min="0" max="4" value="2"/> 1.18 + <scale id="scale3" orient="horizontal" flex="1" movetoclick="true" min="0" max="4" value="2"/> 1.19 + </hbox> 1.20 + 1.21 +<body xmlns="http://www.w3.org/1999/xhtml"> 1.22 +<p id="display"></p> 1.23 +<div id="content" style="display: none"> 1.24 +</div> 1.25 +<pre id="test"> 1.26 +</pre> 1.27 +</body> 1.28 + 1.29 +<script> 1.30 +<![CDATA[ 1.31 + 1.32 +SimpleTest.waitForExplicitFinish(); 1.33 +function getThumb(aScale) { 1.34 + return document.getAnonymousElementByAttribute(aScale, "class", "scale-thumb"); 1.35 +} 1.36 + 1.37 +function sendTouch(aType, aRect, aDX, aDY, aMods) { 1.38 + var cwu = SpecialPowers.getDOMWindowUtils(window); 1.39 + var x = aRect.left + aRect.width/2 + aDX; 1.40 + var y = aRect.top + aRect.height/2 + aDY; 1.41 + if (/mouse/.test(aType)) 1.42 + cwu.sendMouseEvent(aType, x, y, 0, 1, aMods || 0, false); 1.43 + else 1.44 + cwu.sendTouchEvent(aType, [0], [x], [y], [1], [1], [0], [1], 1, aMods || 0, true); 1.45 +} 1.46 + 1.47 +function getOffset(aScale, aDir) { 1.48 + var rect = aScale.getBoundingClientRect(); 1.49 + var d = aScale.orient == "horizontal" ? rect.width/4 : rect.height/4; 1.50 + switch (aDir) { 1.51 + case "right": return [ d, 0]; 1.52 + case "left": return [-1*d, 0]; 1.53 + case "up": return [ 0,-1*d]; 1.54 + case "down": return [ 0, d]; 1.55 + case "downleft": return [ -1*d, d]; 1.56 + case "upleft": return [ -1*d,-1*d]; 1.57 + case "downright": return [d, d]; 1.58 + case "upright": return [d,-1*d]; 1.59 + } 1.60 + return [0,0]; 1.61 +} 1.62 + 1.63 +function testTouchDragThumb(aDesc, aId, aDir, aVal1, aVal2, aMods) { 1.64 + info(aDesc); 1.65 + var scale = document.getElementById(aId); 1.66 + var [x,y] = getOffset(scale, aDir); 1.67 + 1.68 + sendTouch("touchstart", getThumb(scale).getBoundingClientRect(), 0, 0, aMods); 1.69 + is(scale.value, aVal1, "Touchstart on thumb has correct value"); 1.70 + sendTouch("touchmove", getThumb(scale).getBoundingClientRect(), x, y, aMods); 1.71 + sendTouch("touchend", getThumb(scale).getBoundingClientRect(), 0, 0, aMods); 1.72 + is(scale.value, aVal2, "After touch " + (aDir ? ("and drag " + aDir + " ") : "") + "on thumb, scale has correct value"); 1.73 + 1.74 + scale.value = 2; 1.75 +} 1.76 + 1.77 +function testMouseDragThumb(aDesc, aId, aDir, aVal1, aVal2, aMods) { 1.78 + info(aDesc); 1.79 + var scale = document.getElementById(aId); 1.80 + var [x,y] = getOffset(scale, aDir); 1.81 + 1.82 + sendTouch("mousedown", getThumb(scale).getBoundingClientRect(), 0, 0, aMods); 1.83 + is(scale.value, aVal1, "Mousedown on thumb has correct value"); 1.84 + sendTouch("mousemove", getThumb(scale).getBoundingClientRect(), x, y, aMods); 1.85 + sendTouch("mouseup", getThumb(scale).getBoundingClientRect(), 0, 0, aMods); 1.86 + is(scale.value, aVal2, "After mouseup " + (aDir ? ("and drag " + aDir + " ") : "") + "on thumb, scale has correct value"); 1.87 + 1.88 + scale.value = 2; 1.89 +} 1.90 + 1.91 +function testTouchDragSlider(aDesc, aId, aDir, aVal1, aVal2, aMods) { 1.92 + info(aDesc); 1.93 + var scale = document.getElementById(aId); 1.94 + var [x,y] = getOffset(scale, aDir); 1.95 + 1.96 + sendTouch("touchstart", getThumb(scale).getBoundingClientRect(), x, y, aMods); 1.97 + is(scale.value, aVal1, "Touchstart on slider has correct value"); 1.98 + sendTouch("touchmove", getThumb(scale).getBoundingClientRect(), -x, -y, aMods); 1.99 + sendTouch("touchend", getThumb(scale).getBoundingClientRect(), 0, 0, aMods); 1.100 + is(scale.value, aVal2, "After touch " + (aDir ? ("and drag " + aDir + " ") : "") + "on slider, scale has correct value"); 1.101 + 1.102 + scale.value = 2; 1.103 +} 1.104 + 1.105 +function testMouseDragSlider(aDesc, aId, aDir, aVal1, aVal2, aMods) { 1.106 + info(aDesc); 1.107 + var scale = document.getElementById(aId); 1.108 + var [x,y] = getOffset(scale, aDir); 1.109 + 1.110 + sendTouch("mousedown", getThumb(scale).getBoundingClientRect(), x, y, aMods); 1.111 + is(scale.value, aVal1, "Mousedown on slider has correct value"); 1.112 + sendTouch("mousemove", getThumb(scale).getBoundingClientRect(), -x, -y, aMods); 1.113 + sendTouch("mouseup", getThumb(scale).getBoundingClientRect(), 0, 0, aMods); 1.114 + is(scale.value, aVal2, "After mouseup " + (aDir ? ("and drag " + aDir + " ") : "") + "on slider, scale has correct value"); 1.115 + 1.116 + scale.value = 2; 1.117 +} 1.118 + 1.119 +function runTests() { 1.120 + // test dragging a horizontal slider with touch events by tapping on the thumb 1.121 + testTouchDragThumb("Touch Horizontal Thumb", "scale1", "", 2, 2); 1.122 + testTouchDragThumb("TouchDrag Horizontal Thumb Left", "scale1", "left", 2, 1); 1.123 + testTouchDragThumb("TouchDrag Horizontal Thumb Right", "scale1", "right", 2, 3); 1.124 + testTouchDragThumb("TouchDrag Horizontal Thumb Up", "scale1", "up", 2, 2); 1.125 + testTouchDragThumb("TouchDrag Horizontal Thumb Down", "scale1", "down", 2, 2); 1.126 + testTouchDragThumb("TouchDrag Horizontal Thumb Downleft", "scale1", "downleft", 2, 1); 1.127 + testTouchDragThumb("TouchDrag Horizontal Thumb Upleft", "scale1", "upleft", 2, 1); 1.128 + testTouchDragThumb("TouchDrag Horizontal Thumb Upright", "scale1", "upright", 2, 3); 1.129 + testTouchDragThumb("TouchDrag Horizontal Thumb Downright", "scale1", "downright", 2, 3); 1.130 + 1.131 + // test dragging a horizontal slider with mouse events by clicking on the thumb 1.132 + testMouseDragThumb("Click Horizontal Thumb", "scale1", "", 2, 2); 1.133 + testMouseDragThumb("MouseDrag Horizontal Thumb Left", "scale1", "left", 2, 1); 1.134 + testMouseDragThumb("MouseDrag Horizontal Thumb Right", "scale1", "right", 2, 3); 1.135 + testMouseDragThumb("MouseDrag Horizontal Thumb Up", "scale1", "up", 2, 2); 1.136 + testMouseDragThumb("MouseDrag Horizontal Thumb Down", "scale1", "down", 2, 2); 1.137 + testMouseDragThumb("MouseDrag Horizontal Thumb Downleft", "scale1", "downleft", 2, 1); 1.138 + testMouseDragThumb("MouseDrag Horizontal Thumb Upleft", "scale1", "upleft", 2, 1); 1.139 + testMouseDragThumb("MouseDrag Horizontal Thumb Upright", "scale1", "upright", 2, 3); 1.140 + testMouseDragThumb("MouseDrag Horizontal Thumb Downright", "scale1", "downright", 2, 3); 1.141 + 1.142 + // test dragging a vertical slider with touch events by tapping on the thumb 1.143 + testTouchDragThumb("Touch Vertical Thumb", "scale2", "", 2, 2); 1.144 + testTouchDragThumb("TouchDrag Vertical Thumb Left", "scale2", "left", 2, 2); 1.145 + testTouchDragThumb("TouchDrag Vertical Thumb Right", "scale2", "right", 2, 2); 1.146 + testTouchDragThumb("TouchDrag Vertical Thumb Up", "scale2", "up", 2, 1); 1.147 + testTouchDragThumb("TouchDrag Vertical Thumb Down", "scale2", "down", 2, 3); 1.148 + testTouchDragThumb("TouchDrag Vertical Thumb Downleft", "scale2", "downleft", 2, 3); 1.149 + testTouchDragThumb("TouchDrag Vertical Thumb Upleft", "scale2", "upleft", 2, 1); 1.150 + testTouchDragThumb("TouchDrag Vertical Thumb Upright", "scale2", "upright", 2, 1); 1.151 + testTouchDragThumb("TouchDrag Vertical Thumb Downright", "scale2", "downright", 2, 3); 1.152 + 1.153 + // test dragging a vertical slider with mouse events by clicking on the thumb 1.154 + testMouseDragThumb("Click Vertical Thumb", "scale2", "", 2, 2); 1.155 + testMouseDragThumb("MouseDrag Vertical Thumb Left", "scale2", "left", 2, 2); 1.156 + testMouseDragThumb("MouseDrag Vertical Thumb Right", "scale2", "right", 2, 2); 1.157 + testMouseDragThumb("MouseDrag Vertical Thumb Up", "scale2", "up", 2, 1); 1.158 + testMouseDragThumb("MouseDrag Vertical Thumb Down", "scale2", "down", 2, 3); 1.159 + testMouseDragThumb("MouseDrag Vertical Thumb Downleft", "scale2", "downleft", 2, 3); 1.160 + testMouseDragThumb("MouseDrag Vertical Thumb Upleft", "scale2", "upleft", 2, 1); 1.161 + testMouseDragThumb("MouseDrag Vertical Thumb Upright", "scale2", "upright", 2, 1); 1.162 + testMouseDragThumb("MouseDrag Vertical Thumb Downright", "scale2", "downright", 2, 3); 1.163 + 1.164 + var isMac = /Mac/.test(navigator.platform); 1.165 + 1.166 + // test dragging a slider by tapping off the thumb 1.167 + testTouchDragSlider("TouchDrag Slider Left", "scale1", "left", isMac ? 1 : 0, isMac ? 2 : 0); 1.168 + testTouchDragSlider("TouchDrag Slider Right", "scale1", "right", isMac ? 3 : 4, isMac ? 2 : 4); 1.169 + testMouseDragSlider("MouseDrag Slider Left", "scale1", "left", isMac ? 1 : 0, isMac ? 2 : 0); 1.170 + testMouseDragSlider("MouseDrag Slider Right", "scale1", "right", isMac ? 3 : 4, isMac ? 2 : 4); 1.171 + 1.172 + // test dragging a slider by tapping off the thumb and holding shift 1.173 + // modifiers don't affect touch events 1.174 + var mods = /Mac/.test(navigator.platform) ? Components.interfaces.nsIDOMNSEvent.ALT_MASK : 1.175 + Components.interfaces.nsIDOMNSEvent.SHIFT_MASK; 1.176 + testTouchDragSlider("TouchDrag Slider Left+Shift", "scale1", "left", isMac ? 1 : 0, isMac ? 2 : 0, mods); 1.177 + testTouchDragSlider("TouchDrag Slider Right+Shift", "scale1", "right", isMac ? 3 : 4, isMac ? 2 : 4, mods); 1.178 + testMouseDragSlider("MouseDrag Slider Left+Shift", "scale1", "left", isMac ? 0 : 1, isMac ? 0 : 2, mods); 1.179 + testMouseDragSlider("MouseDrag Slider Right+Shift", "scale1", "right", isMac ? 4 : 3, isMac ? 4 : 2, mods); 1.180 + 1.181 + // test dragging a slider with movetoclick="true" by tapping off the thumb 1.182 + testTouchDragSlider("TouchDrag Slider Left+MoveToClick", "scale3", "left", 1, 2); 1.183 + testTouchDragSlider("TouchDrag Slider Right+MoveToClick", "scale3", "right", 3, 2); 1.184 + testMouseDragSlider("MouseDrag Slider Left+MoveToClick", "scale3", "left", 1, 2); 1.185 + testMouseDragSlider("MouseDrag Slider Right+MoveToClick", "scale3", "right", 3, 2); 1.186 + 1.187 + // test dragging a slider by tapping off the thumb and holding shift 1.188 + // modifiers don't affect touch events 1.189 + testTouchDragSlider("MouseDrag Slider Left+MoveToClick+Shift", "scale3", "left", 1, 2, mods); 1.190 + testTouchDragSlider("MouseDrag Slider Right+MoveToClick+Shift", "scale3", "right", 3, 2, mods); 1.191 + testMouseDragSlider("MouseDrag Slider Left+MoveToClick+Shift", "scale3", "left", 0, 0, mods); 1.192 + testMouseDragSlider("MouseDrag Slider Right+MoveToClick+Shift", "scale3", "right", 4, 4, mods); 1.193 + 1.194 + SimpleTest.finish(); 1.195 +} 1.196 + 1.197 +addLoadEvent(function() { SimpleTest.executeSoon(runTests); }); 1.198 +]]></script> 1.199 + 1.200 +</window>