summaryrefslogtreecommitdiffstats
path: root/toolkit/content/tests/chrome/window_popup_anchoratrect.xhtml
blob: 524a95b643f39ddacc78498a495f356640a84fea (plain)
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(id)
{
  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>