Source code

Revision control

Copy as Markdown

Other Tools

<?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"?>
onpopupshown="popupshown(event.target)" onpopuphidden="nextTest()">
<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>
<p id="display">
</p>
<div id="content" style="display: none">
</div>
<pre id="test">
</pre>
</body>
</window>