1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
|
<?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"?>
<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
onpopupshown="popupshown(event.target)" onpopuphidden="nextTest()">
<script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
<label value="Popup Test"/>
<menupopup id="popup">
<menuitem label="One"/>
<menuitem label="Two"/>
</menupopup>
<panel id="panel" noautohide="true" height="20">
<label value="OK"/>
</panel>
<script>
<![CDATA[
let menupopup;
function margins(popup) {
let ret = {};
let cs = getComputedStyle(popup);
for (let side of ["top", "right", "bottom", "left"]) {
ret[side] = parseFloat(cs.getPropertyValue("margin-" + side));
}
return ret;
}
let tests = [
{
test: () => menupopup.openPopupAtScreenRect("after_start", 150, 250, 30, 40),
verify: popup => {
let rect = popup.getOuterScreenRect();
let margin = margins(popup);
is(rect.left - margin.left, 150, "popup at screen position x");
is(rect.top - margin.top, 290, "popup at screen position y");
}
},
{
test: () => menupopup.openPopupAtScreenRect("after_start", 150, 350, 30, 9000),
verify: popup => {
let rect = popup.getOuterScreenRect();
let margin = margins(popup);
is(rect.left - margin.left, 150, "flipped popup at screen position x");
is(rect.bottom + margin.bottom, 350, "flipped popup at screen position y");
}
},
{
test: () => menupopup.openPopupAtScreenRect("end_before", 150, 250, 30, 40),
verify: popup => {
let rect = popup.getOuterScreenRect();
let margin = margins(popup);
is(rect.left - margin.left, 180, "popup at end_before screen position x");
is(rect.top - margin.top, 250, "popup at end_before screen position y");
}
},
{
test: () => $("panel").openPopupAtScreenRect("after_start", 150, 250, 30, 40),
verify: popup => {
let rect = popup.getOuterScreenRect();
let margin = margins(popup);
is(rect.left - margin.left, 150, "panel at screen position x");
is(rect.top - margin.top, 290, "panel at screen position y");
}
},
{
test: () => $("panel").openPopupAtScreenRect("before_start", 150, 250, 30, 40),
verify: popup => {
let rect = popup.getOuterScreenRect();
let margin = margins(popup);
is(rect.left - margin.left, 150, "panel at before_start screen position x");
is(rect.bottom + margin.bottom, 250, "panel at before_start screen position y");
}
},
];
function runTest()
{
menupopup = $("popup");
nextTest();
}
function nextTest()
{
if (!tests.length) {
window.close();
window.arguments[0].SimpleTest.finish();
return;
}
tests[0].test();
}
function popupshown(popup)
{
tests[0].verify(popup);
tests.shift();
popup.hidePopup();
}
function is(left, right, message)
{
window.arguments[0].SimpleTest.is(left, right, message);
}
function ok(value, message)
{
window.arguments[0].SimpleTest.ok(value, message);
}
window.arguments[0].SimpleTest.waitForFocus(runTest, window);
]]>
</script>
<body xmlns="http://www.w3.org/1999/xhtml">
<p id="display">
</p>
<div id="content" style="display: none">
</div>
<pre id="test">
</pre>
</body>
</window>
|