layout/xul/test/window_resizer.xul

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/layout/xul/test/window_resizer.xul	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,113 @@
     1.4 +<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
     1.5 +<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
     1.6 +    screenX="200" screenY="200" width="300" height="300"
     1.7 +	onload="setTimeout(doTest, 0)">
     1.8 +<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script>
     1.9 +<script><![CDATA[
    1.10 +var is = window.opener.SimpleTest.is;
    1.11 +
    1.12 +function doTest() {
    1.13 +  // from test_resizer.xul
    1.14 +  var expectX = 200;
    1.15 +  var expectY = 200;
    1.16 +  var expectXMost = 500;
    1.17 +  var expectYMost = 500;
    1.18 +  var screenScale = expectX/window.screenX;
    1.19 +  var root = document.documentElement;
    1.20 +
    1.21 +  var oldScreenX = window.screenX;
    1.22 +  var oldScreenY = window.screenY;
    1.23 +  var oldWidth = window.outerWidth;
    1.24 +  var oldHeight = window.outerHeight;
    1.25 +
    1.26 +  function testResizer(dx, dy) {
    1.27 +    var offset = 20;
    1.28 +    var scale = 5;
    1.29 +    // target the centre of the resizer
    1.30 +    var offsetX = window.innerWidth/2 + (window.innerWidth/3)*dx;
    1.31 +    var offsetY = window.innerHeight/2 + (window.innerHeight/3)*dy;
    1.32 +
    1.33 +    for (var mouseX = -1; mouseX <= 1; ++mouseX) {
    1.34 +      for (var mouseY = -1; mouseY <= 1; ++mouseY) {
    1.35 +        var newExpectX = expectX;
    1.36 +        var newExpectXMost = expectXMost;
    1.37 +        var newExpectY = expectY;
    1.38 +        var newExpectYMost = expectYMost;
    1.39 +        if (dx < 0) {
    1.40 +          newExpectX += mouseX*scale;
    1.41 +        } else if (dx > 0) {
    1.42 +          newExpectXMost += mouseX*scale;
    1.43 +        }
    1.44 +        if (dy < 0) {
    1.45 +          newExpectY += mouseY*scale;
    1.46 +        } else if (dy > 0) {
    1.47 +          newExpectYMost += mouseY*scale;
    1.48 +        }
    1.49 +
    1.50 +        synthesizeMouse(root, offsetX, offsetY, { type:"mousedown" });
    1.51 +        synthesizeMouse(root, offsetX + mouseX*scale, offsetY + mouseY*scale, { type:"mousemove" });
    1.52 +        is(window.screenX*screenScale, newExpectX,
    1.53 +           "Bad x for " + dx + "," + dy + " moving " + mouseX + "," + mouseY);
    1.54 +        is(window.screenY*screenScale, newExpectY,
    1.55 +           "Bad y for " + dx + "," + dy + " moving " + mouseX + "," + mouseY);
    1.56 +        is(window.outerWidth, newExpectXMost - newExpectX,
    1.57 +           "Bad width for " + dx + "," + dy + " moving " + mouseX + "," + mouseY);
    1.58 +        is(window.outerHeight, newExpectYMost - newExpectY,
    1.59 +           "Bad height for " + dx + "," + dy + " moving " + mouseX + "," + mouseY);
    1.60 +
    1.61 +        // move it back before we release! Adjust for any window movement
    1.62 +        synthesizeMouse(root, offsetX - (newExpectX - expectX),
    1.63 +                              offsetY - (newExpectY - expectY), { type:"mousemove" });
    1.64 +        synthesizeMouse(root, offsetX, offsetY, { type:"mouseup" });
    1.65 +      }
    1.66 +    }
    1.67 +  }
    1.68 +
    1.69 +  testResizer(-1, -1);
    1.70 +  testResizer(-1, 0);
    1.71 +  testResizer(-1, 1);
    1.72 +  testResizer(0, -1);
    1.73 +  testResizer(0, 1);
    1.74 +  testResizer(1, -1);
    1.75 +  testResizer(1, 0);
    1.76 +  testResizer(1, 1);
    1.77 +
    1.78 +  var resizers = document.getElementsByTagName("resizer");
    1.79 +  Array.forEach(resizers, function (element) {
    1.80 +    is(getComputedStyle(element, "").cursor,
    1.81 +       element.getAttribute("expectedcursor"),
    1.82 +       "cursor for " + element.dir);
    1.83 +  });
    1.84 +
    1.85 +  // now check the cursors in rtl. The bottomend resizer
    1.86 +  // should be reversed
    1.87 +  document.getElementById("bottomend").setAttribute("rtl", "true");
    1.88 +  Array.forEach(resizers, function (element) {
    1.89 +    is(getComputedStyle(element, "").cursor,
    1.90 +       element.dir == "bottomend" ? "sw-resize" :
    1.91 +         element.getAttribute("expectedcursor"),
    1.92 +       "cursor for " + element.dir);
    1.93 +  });
    1.94 +
    1.95 +  window.close();
    1.96 +  window.opener.lastResizerTest();
    1.97 +}
    1.98 +]]></script>
    1.99 +	<hbox id="container" flex="1">
   1.100 +		<vbox flex="1">
   1.101 +			<resizer dir="topleft" expectedcursor="nw-resize" flex="1"/>
   1.102 +			<resizer dir="left" expectedcursor="ew-resize" flex="1"/>
   1.103 +			<resizer dir="bottomleft" expectedcursor="sw-resize" flex="1"/>
   1.104 +		</vbox>
   1.105 +		<vbox flex="1">
   1.106 +			<resizer dir="top" expectedcursor="ns-resize" flex="1"/>
   1.107 +			<resizer id="bottomend" dir="bottomend" expectedcursor="se-resize" flex="1"/>
   1.108 +			<resizer dir="bottom" expectedcursor="ns-resize" flex="1"/>
   1.109 +		</vbox>
   1.110 +		<vbox flex="1">
   1.111 +			<resizer dir="topright" expectedcursor="ne-resize" flex="1"/>
   1.112 +			<resizer dir="right" expectedcursor="ew-resize" flex="1"/>
   1.113 +			<resizer dir="bottomright" expectedcursor="se-resize" flex="1"/>
   1.114 +		</vbox>
   1.115 +	</hbox>
   1.116 +</window>

mercurial