mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-13 23:17:57 +00:00
137 lines
4.7 KiB
XML
137 lines
4.7 KiB
XML
<?xml version="1.0"?>
|
|
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
|
<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?>
|
|
<!--
|
|
XUL Widget Test for positioning
|
|
-->
|
|
<window title="position" width="500" height="600"
|
|
onload="setTimeout(runTest, 0);"
|
|
style="margin: 0; border: 0; padding; 0;"
|
|
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
|
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
|
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script>
|
|
|
|
|
|
<hbox id="box1">
|
|
<button label="0" width="100" height="40" style="margin: 3px;"/>
|
|
</hbox>
|
|
<scrollbox id="box2" orient="vertical" align="start" width="200" height="50"
|
|
style="overflow: hidden; margin-left: 2px; padding: 1px;">
|
|
<deck>
|
|
<scrollbox id="box3" orient="vertical" align="start" height="100"
|
|
style="overflow: scroll; margin: 1px; padding: 0;">
|
|
<vbox id="innerscroll" width="200" align="start">
|
|
<button id="button1" label="1" width="90" maxwidth="100"
|
|
minheight="25" height="35" maxheight="50"
|
|
style="min-width: 80px; margin: 5px; border: 4px; padding: 7px;
|
|
-moz-appearance: none;"/>
|
|
<menu id="menu">
|
|
<menupopup id="popup" style="-moz-appearance: none; margin:0; border: 0; padding: 0;"
|
|
onpopupshown="menuOpened()"
|
|
onpopuphidden="if (event.target == this) SimpleTest.finish()">
|
|
<menuitem label="One"/>
|
|
<menu id="submenu" label="Three">
|
|
<menupopup id="subpopup" style="-moz-appearance: none; margin:0; border: 0; padding: 0;"
|
|
onpopupshown="submenuOpened()">
|
|
<menuitem label="Four"/>
|
|
</menupopup>
|
|
</menu>
|
|
</menupopup>
|
|
</menu>
|
|
<button label="2" maxwidth="100" maxheight="20" style="margin: 5px;"/>
|
|
<button label="3" maxwidth="100" maxheight="20" style="margin: 5px;"/>
|
|
<button label="4" maxwidth="100" maxheight="20" style="margin: 5px;"/>
|
|
</vbox>
|
|
<box height="200"/>
|
|
</scrollbox>
|
|
</deck>
|
|
</scrollbox>
|
|
|
|
<body xmlns="http://www.w3.org/1999/xhtml">
|
|
<p id="display"></p>
|
|
<div id="content" style="display: none">
|
|
</div>
|
|
<pre id="test">
|
|
</pre>
|
|
</body>
|
|
|
|
<script>
|
|
<![CDATA[
|
|
|
|
SimpleTest.waitForExplicitFinish();
|
|
|
|
function runTest()
|
|
{
|
|
var winwidth = document.documentElement.boxObject.width;
|
|
var innerscroll = $("innerscroll").boxObject.width;
|
|
|
|
var box1 = $("box1");
|
|
checkPosition("box1", box1, 0, 0, winwidth, 46);
|
|
|
|
var box2 = $("box2");
|
|
checkPosition("box2", box2, 2, 46, winwidth, 96);
|
|
|
|
// height is height(box1) = 46 + margin-top(box3) = 1 + margin-top(button1) = 5
|
|
var button1 = $("button1");
|
|
checkPosition("button1", button1, 9, 53, 99, 88);
|
|
|
|
var sbo = box2.boxObject.QueryInterface(Components.interfaces.nsIScrollBoxObject);
|
|
sbo.scrollTo(7, 16);
|
|
|
|
// clientRect height is offset from root so is 16 pixels vertically less
|
|
checkPosition("button1 scrolled", button1, 9, 37, 99, 72);
|
|
|
|
var box3 = $("box3");
|
|
sbo = box3.boxObject.QueryInterface(Components.interfaces.nsIScrollBoxObject);
|
|
sbo.scrollTo(1, 2);
|
|
|
|
checkPosition("button1 scrolled", button1, 9, 35, 99, 70);
|
|
|
|
$("menu").open = true;
|
|
}
|
|
|
|
function menuOpened()
|
|
{
|
|
$("submenu").open = true;
|
|
}
|
|
|
|
function submenuOpened()
|
|
{
|
|
var menu = $("menu");
|
|
var menuleft = Math.round(menu.getBoundingClientRect().left);
|
|
var menubottom = Math.round(menu.getBoundingClientRect().bottom);
|
|
|
|
var submenu = $("submenu");
|
|
var submenutop = Math.round(submenu.getBoundingClientRect().top);
|
|
var submenuright = Math.round(submenu.getBoundingClientRect().right);
|
|
|
|
checkPosition("popup", $("popup"), menuleft, menubottom, -1, -1);
|
|
checkPosition("subpopup", $("subpopup"), submenuright, submenutop, -1, -1);
|
|
|
|
menu.open = false;
|
|
}
|
|
|
|
function checkPosition(testid, elem, cleft, ctop, cright, cbottom)
|
|
{
|
|
// -1 for right or bottom means that the exact size should not be
|
|
// checked, just ensure it is larger then the left or top position
|
|
var rect = elem.getBoundingClientRect();
|
|
is(Math.round(rect.left), cleft, testid + " client rect left");
|
|
if (testid != "popup")
|
|
is(Math.round(rect.top), ctop, testid + " client rect top");
|
|
if (cright >= 0)
|
|
is(Math.round(rect.right), cright, testid + " client rect right");
|
|
else
|
|
ok(rect.right - rect.left > 20, testid + " client rect right");
|
|
if (cbottom >= 0)
|
|
is(Math.round(rect.bottom), cbottom, testid + " client rect bottom");
|
|
else
|
|
ok(rect.bottom - rect.top > 15, testid + " client rect bottom");
|
|
}
|
|
|
|
]]>
|
|
|
|
</script>
|
|
|
|
</window>
|