mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-04 16:15:25 +00:00
262 lines
9.0 KiB
XML
262 lines
9.0 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 panels
|
|
-->
|
|
<window title="Titlebar" width="200" height="200"
|
|
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
|
<script type="application/javascript"
|
|
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/>
|
|
<script type="application/javascript"
|
|
src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"/>
|
|
|
|
<tree id="tree" seltype="single" width="100" height="100">
|
|
<treecols>
|
|
<treecol flex="1"/>
|
|
<treecol flex="1"/>
|
|
</treecols>
|
|
<treechildren id="treechildren">
|
|
<treeitem><treerow><treecell label="One"/><treecell label="Two"/></treerow></treeitem>
|
|
<treeitem><treerow><treecell label="One"/><treecell label="Two"/></treerow></treeitem>
|
|
<treeitem><treerow><treecell label="One"/><treecell label="Two"/></treerow></treeitem>
|
|
<treeitem><treerow><treecell label="One"/><treecell label="Two"/></treerow></treeitem>
|
|
<treeitem><treerow><treecell label="One"/><treecell label="Two"/></treerow></treeitem>
|
|
<treeitem><treerow><treecell label="One"/><treecell label="Two"/></treerow></treeitem>
|
|
</treechildren>
|
|
</tree>
|
|
|
|
|
|
<!-- test results are displayed in the html:body -->
|
|
<body xmlns="http://www.w3.org/1999/xhtml" style="height: 300px; overflow: auto;"/>
|
|
|
|
<!-- test code goes here -->
|
|
<script type="application/javascript"><![CDATA[
|
|
|
|
SimpleTest.waitForExplicitFinish();
|
|
|
|
var currentTest = null;
|
|
|
|
function ok(condition, message) {
|
|
window.opener.wrappedJSObject.SimpleTest.ok(condition, message);
|
|
}
|
|
|
|
function is(left, right, message) {
|
|
window.opener.wrappedJSObject.SimpleTest.is(left, right, message);
|
|
}
|
|
|
|
function test_panels()
|
|
{
|
|
checkTreeCoords();
|
|
|
|
addEventListener("popupshowing", popupShowing, false);
|
|
addEventListener("popupshown", popupShown, false);
|
|
addEventListener("popuphidden", nextTest, false);
|
|
nextTest();
|
|
}
|
|
|
|
function nextTest()
|
|
{
|
|
if (!tests.length) {
|
|
window.close();
|
|
window.opener.wrappedJSObject.SimpleTest.finish();
|
|
return;
|
|
}
|
|
|
|
currentTest = tests.shift();
|
|
var panel = createPanel(currentTest.attrs);
|
|
currentTest.test(panel);
|
|
}
|
|
|
|
function popupShowing(event)
|
|
{
|
|
var rect = event.target.getOuterScreenRect();
|
|
ok(!rect.left && !rect.top && !rect.width && !rect.height,
|
|
currentTest.testname + " empty rectangle during popupshowing");
|
|
}
|
|
|
|
var waitSteps = 0;
|
|
function popupShown(event)
|
|
{
|
|
var panel = event.target;
|
|
|
|
if (waitSteps > 0 && navigator.platform.indexOf("Linux") >= 0 &&
|
|
panel.boxObject.screenY == 210) {
|
|
waitSteps--;
|
|
setTimeout(popupShown, 10, event);
|
|
return;
|
|
}
|
|
|
|
currentTest.result(currentTest.testname + " ", panel);
|
|
panel.hidePopup();
|
|
}
|
|
|
|
function createPanel(attrs)
|
|
{
|
|
var panel = document.createElement("panel");
|
|
for (var a in attrs) {
|
|
panel.setAttribute(a, attrs[a]);
|
|
}
|
|
|
|
var button = document.createElement("button");
|
|
panel.appendChild(button);
|
|
button.label = "OK";
|
|
button.width = 120;
|
|
button.height = 40;
|
|
button.setAttribute("style", "-moz-appearance: none; border: 0; margin: 0;");
|
|
panel.setAttribute("style", "-moz-appearance: none; border: 0; margin: 0;");
|
|
return document.documentElement.appendChild(panel);
|
|
}
|
|
|
|
function checkTreeCoords()
|
|
{
|
|
var tree = $("tree");
|
|
var treechildren = $("treechildren");
|
|
tree.currentIndex = 0;
|
|
tree.treeBoxObject.scrollToRow(0);
|
|
synthesizeMouse(treechildren, 10, tree.treeBoxObject.rowHeight + 2, { });
|
|
is(tree.currentIndex, 1, "tree selection");
|
|
|
|
tree.treeBoxObject.scrollToRow(2);
|
|
synthesizeMouse(treechildren, 10, tree.treeBoxObject.rowHeight + 2, { });
|
|
is(tree.currentIndex, 3, "tree selection after scroll");
|
|
}
|
|
|
|
var tests = [
|
|
{
|
|
testname: "normal panel",
|
|
attrs: { },
|
|
test: function(panel) {
|
|
var screenRect = panel.getOuterScreenRect();
|
|
is(screenRect.left, 0, this.testname + " screen left before open");
|
|
is(screenRect.top, 0, this.testname + " screen top before open");
|
|
is(screenRect.width, 0, this.testname + " screen width before open");
|
|
is(screenRect.height, 0, this.testname + " screen height before open");
|
|
|
|
panel.openPopupAtScreen(200, 210);
|
|
},
|
|
result: function(testname, panel) {
|
|
var panelrect = panel.getBoundingClientRect();
|
|
is(panelrect.left, 200 - mozInnerScreenX, testname + "left");
|
|
is(panelrect.top, 210 - mozInnerScreenY, testname + "top");
|
|
is(panelrect.width, 120, testname + "width");
|
|
is(panelrect.height, 40, testname + "height");
|
|
|
|
var screenRect = panel.getOuterScreenRect();
|
|
is(screenRect.left, 200, testname + " screen left");
|
|
is(screenRect.top, 210, testname + " screen top");
|
|
is(screenRect.width, 120, testname + " screen width");
|
|
is(screenRect.height, 40, testname + " screen height");
|
|
}
|
|
},
|
|
{
|
|
// only noautohide panels support titlebars, so one shouldn't be shown here
|
|
testname: "autohide panel with titlebar",
|
|
attrs: { titlebar: "normal" },
|
|
test: function(panel) {
|
|
var screenRect = panel.getOuterScreenRect();
|
|
is(screenRect.left, 0, this.testname + " screen left before open");
|
|
is(screenRect.top, 0, this.testname + " screen top before open");
|
|
is(screenRect.width, 0, this.testname + " screen width before open");
|
|
is(screenRect.height, 0, this.testname + " screen height before open");
|
|
|
|
panel.openPopupAtScreen(200, 210);
|
|
},
|
|
result: function(testname, panel) {
|
|
var panelrect = panel.getBoundingClientRect();
|
|
is(panelrect.left, 200 - mozInnerScreenX, testname + "left");
|
|
is(panelrect.top, 210 - mozInnerScreenY, testname + "top");
|
|
is(panelrect.width, 120, testname + "width");
|
|
is(panelrect.height, 40, testname + "height");
|
|
|
|
var screenRect = panel.getOuterScreenRect();
|
|
is(screenRect.left, 200, testname + " screen left");
|
|
is(screenRect.top, 210, testname + " screen top");
|
|
is(screenRect.width, 120, testname + " screen width");
|
|
is(screenRect.height, 40, testname + " screen height");
|
|
}
|
|
},
|
|
{
|
|
testname: "noautohide panel with titlebar",
|
|
attrs: { noautohide: true, titlebar: "normal" },
|
|
test: function(panel) {
|
|
waitSteps = 25;
|
|
|
|
var screenRect = panel.getOuterScreenRect();
|
|
is(screenRect.left, 0, this.testname + " screen left before open");
|
|
is(screenRect.top, 0, this.testname + " screen top before open");
|
|
is(screenRect.width, 0, this.testname + " screen width before open");
|
|
is(screenRect.height, 0, this.testname + " screen height before open");
|
|
|
|
panel.openPopupAtScreen(200, 210);
|
|
},
|
|
result: function(testname, panel) {
|
|
var panelrect = panel.getBoundingClientRect();
|
|
ok(panelrect.left >= 200 - mozInnerScreenX, testname + "left");
|
|
ok(panelrect.top >= 210 - mozInnerScreenY + 10, testname + "top greater");
|
|
ok(panelrect.top <= 210 - mozInnerScreenY + 30, testname + "top less");
|
|
is(panelrect.width, 120, testname + "width");
|
|
is(panelrect.height, 40, testname + "height");
|
|
|
|
var screenRect = panel.getOuterScreenRect();
|
|
is(screenRect.left, 200, testname + " screen left");
|
|
is(screenRect.top, 210, testname + " screen top");
|
|
ok(screenRect.width >= 120 && screenRect.width <= 140, testname + " screen width");
|
|
ok(screenRect.height >= 40 && screenRect.height <= 80, testname + " screen height");
|
|
|
|
var gotMouseEvent = false;
|
|
function mouseMoved(event)
|
|
{
|
|
is(event.clientY, panelrect.top + 10,
|
|
"popup clientY");
|
|
is(event.screenY, panel.boxObject.screenY + 10,
|
|
"popup screenY");
|
|
is(event.originalTarget, panel.firstChild, "popup target");
|
|
gotMouseEvent = true;
|
|
}
|
|
|
|
panel.addEventListener("mousemove", mouseMoved, true);
|
|
synthesizeMouse(panel, 10, 10, { type: "mousemove" });
|
|
ok(gotMouseEvent, "mouse event on panel");
|
|
panel.removeEventListener("mousemove", mouseMoved, true);
|
|
|
|
var tree = $("tree");
|
|
tree.currentIndex = 0;
|
|
panel.appendChild(tree);
|
|
checkTreeCoords();
|
|
}
|
|
},
|
|
{
|
|
testname: "noautohide panel with backdrag",
|
|
attrs: { noautohide: true, backdrag: "true" },
|
|
test: function(panel) {
|
|
var label = document.createElement("label");
|
|
label.id = "backdragspot";
|
|
label.setAttribute("value", "Hello There");
|
|
panel.appendChild(label);
|
|
panel.openPopupAtScreen(200, 230);
|
|
},
|
|
result: function(testname, panel) {
|
|
var oldrect = panel.getOuterScreenRect();
|
|
|
|
// Linux uses native window moving
|
|
if (navigator.platform.indexOf("Linux") == -1) {
|
|
var backdragspot = document.getElementById("backdragspot");
|
|
synthesizeMouse(backdragspot, 5, 5, { type: "mousedown" });
|
|
synthesizeMouse(backdragspot, 15, 20, { type: "mousemove" });
|
|
synthesizeMouse(backdragspot, 15, 20, { type: "mouseup" });
|
|
|
|
is(panel.getOuterScreenRect().left, 210, testname + "left");
|
|
is(panel.getOuterScreenRect().top, 245, testname + "top");
|
|
}
|
|
}
|
|
}
|
|
];
|
|
|
|
window.opener.wrappedJSObject.SimpleTest.waitForFocus(test_panels, window);
|
|
|
|
]]>
|
|
</script>
|
|
|
|
</window>
|