mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
155 lines
4.6 KiB
XML
155 lines
4.6 KiB
XML
<?xml version="1.0"?>
|
|
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
|
|
|
<window title="Large Menu Tests"
|
|
onfocus="setTimeout(runTests, 0);"
|
|
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
|
|
|
<title>Large Menu Tests</title>
|
|
|
|
<script type="application/javascript"
|
|
src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"/>
|
|
|
|
<!--
|
|
This test checks that a large menu is displayed with arrow buttons
|
|
and is on the screen.
|
|
-->
|
|
|
|
<script>
|
|
<![CDATA[
|
|
|
|
var gOverflowed = false, gUnderflowed = false;
|
|
var gScreenY = -1;
|
|
var gTestIndex = 0;
|
|
var gTests = ["open normal", "open flipped position", "open with scrolling",
|
|
"open after scrolling", "open small again"];
|
|
|
|
function runTests()
|
|
{
|
|
var mouseFn = function(event) { gScreenY = event.screenY; }
|
|
|
|
// a hacky way to get the screen position of the document
|
|
window.addEventListener("mousedown", mouseFn, false);
|
|
synthesizeMouse(document.documentElement, 0, 0, { });
|
|
window.removeEventListener("mousedown", mouseFn, false);
|
|
|
|
nextTest();
|
|
}
|
|
|
|
function nextTest()
|
|
{
|
|
gOverflowed = false, gUnderflowed = false;
|
|
|
|
var y = screen.height;
|
|
if (gTestIndex == 1) // open flipped position test:
|
|
y -= 100;
|
|
else
|
|
y /= 2;
|
|
|
|
var popup = document.getElementById("popup");
|
|
if (gTestIndex == 2) {
|
|
// add some more menuitems so that scrolling will be necessary
|
|
for (var t = 1; t <= 30; t++) {
|
|
var menu = document.createElement("menuitem");
|
|
menu.setAttribute("label", "More" + t);
|
|
popup.appendChild(menu);
|
|
}
|
|
}
|
|
else if (gTestIndex == 4) {
|
|
for (var t = 1; t <= 30; t++)
|
|
popup.removeChild(popup.lastChild);
|
|
}
|
|
|
|
popup.openPopupAtScreen(100, y, false);
|
|
}
|
|
|
|
function popupShown()
|
|
{
|
|
var popup = document.getElementById("popup");
|
|
var rect = popup.getBoundingClientRect();
|
|
var sbo = document.getAnonymousNodes(popup)[0].scrollBoxObject;
|
|
var expectedScrollPos = 0;
|
|
|
|
if (gTestIndex == 0) {
|
|
// the popup should be in the center of the screen
|
|
is(Math.round(rect.top) + gScreenY, screen.height / 2,
|
|
gTests[gTestIndex] + " top");
|
|
ok(Math.round(rect.bottom) + gScreenY < screen.height,
|
|
gTests[gTestIndex] + " bottom");
|
|
ok(!gOverflowed && !gUnderflowed, gTests[gTestIndex] + " overflow")
|
|
}
|
|
else if (gTestIndex == 1) {
|
|
// the popup was supposed to open 100 pixels from the bottom, but that
|
|
// would put it off screen so it should be flipped to have its bottom
|
|
// edge 100 pixels from the bottom
|
|
ok(Math.round(rect.top) + gScreenY >= screen.top, gTests[gTestIndex] + " top");
|
|
is(Math.round(rect.bottom) + gScreenY, screen.height - 100,
|
|
gTests[gTestIndex] + " bottom");
|
|
ok(!gOverflowed && !gUnderflowed, gTests[gTestIndex] + " overflow")
|
|
}
|
|
else if (gTestIndex == 2) {
|
|
// the popup is too large so ensure that it is on screen
|
|
ok(Math.round(rect.top) + gScreenY >= screen.top, gTests[gTestIndex] + " top");
|
|
ok(Math.round(rect.bottom) + gScreenY < screen.height, gTests[gTestIndex] + " bottom");
|
|
ok(gOverflowed && !gUnderflowed, gTests[gTestIndex] + " overflow")
|
|
|
|
sbo.scrollTo(0, 40);
|
|
expectedScrollPos = 40;
|
|
}
|
|
else if (gTestIndex == 3) {
|
|
expectedScrollPos = 40;
|
|
}
|
|
else if (gTestIndex == 4) {
|
|
is(Math.round(rect.top) + gScreenY, screen.height / 2,
|
|
gTests[gTestIndex] + " top");
|
|
ok(Math.round(rect.bottom) + gScreenY < screen.height,
|
|
gTests[gTestIndex] + " bottom");
|
|
ok(!gOverflowed && gUnderflowed, gTests[gTestIndex] + " overflow")
|
|
}
|
|
|
|
var sx = { }, sy = { };
|
|
sbo.getPosition(sx, sy);
|
|
is(sy.value, expectedScrollPos, "menu scroll position");
|
|
|
|
popup.hidePopup();
|
|
}
|
|
|
|
function is(l, r, n) { window.opener.wrappedJSObject.SimpleTest.is(l,r,n); }
|
|
function ok(v, n) { window.opener.wrappedJSObject.SimpleTest.ok(v,n); }
|
|
|
|
function popupHidden()
|
|
{
|
|
gTestIndex++;
|
|
if (gTestIndex == gTests.length) {
|
|
window.opener.wrappedJSObject.SimpleTest.finish();
|
|
window.close();
|
|
}
|
|
else {
|
|
nextTest();
|
|
}
|
|
}
|
|
]]>
|
|
</script>
|
|
|
|
<label value="OK" popup="popup"/>
|
|
<menupopup id="popup" onpopupshown="popupShown();" onpopuphidden="popupHidden();"
|
|
onoverflow="gOverflowed = true" onunderflow="gUnderflowed = true;">
|
|
<menuitem label="1"/>
|
|
<menuitem label="2"/>
|
|
<menuitem label="3"/>
|
|
<menuitem label="4"/>
|
|
<menuitem label="5"/>
|
|
<menuitem label="6"/>
|
|
<menuitem label="7"/>
|
|
<menuitem label="8"/>
|
|
<menuitem label="9"/>
|
|
<menuitem label="10"/>
|
|
<menuitem label="11"/>
|
|
<menuitem label="12"/>
|
|
<menuitem label="13"/>
|
|
<menuitem label="14"/>
|
|
<menuitem label="15"/>
|
|
</menupopup>
|
|
|
|
</window>
|