Fri, 16 Jan 2015 18:13:44 +0100
Integrate suggestion from review to improve consistency with existing code.
1 <html>
2 <head>
3 <title>visibility state testing</title>
5 <link rel="stylesheet" type="text/css"
6 href="chrome://mochikit/content/tests/SimpleTest/test.css" />
8 <script type="application/javascript"
9 src="chrome://mochikit/content/MochiKit/packed.js"></script>
10 <script type="application/javascript"
11 src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
13 <script type="application/javascript"
14 src="../common.js"></script>
15 <script type="application/javascript"
16 src="../role.js"></script>
17 <script type="application/javascript"
18 src="../states.js"></script>
19 <script type="application/javascript"
20 src="../events.js"></script>
21 <script type="application/javascript"
22 src="../browser.js"></script>
24 <script type="application/javascript">
25 ////////////////////////////////////////////////////////////////////////////
26 // Invokers
28 function loadURIInvoker(aURI, aFunc)
29 {
30 this.invoke = function loadURIInvoker_invoke()
31 {
32 tabBrowser().loadURI(aURI);
33 }
35 this.eventSeq = [
36 new invokerChecker(EVENT_DOCUMENT_LOAD_COMPLETE, currentTabDocument)
37 ];
39 this.finalCheck = function loadURIInvoker_finalCheck()
40 {
41 aFunc.call();
42 }
44 this.getID = function loadURIInvoker_getID()
45 {
46 return "load uri " + aURI;
47 }
48 }
50 function addTabInvoker(aURL, aFunc)
51 {
52 this.eventSeq = [
53 new invokerChecker(EVENT_DOCUMENT_LOAD_COMPLETE, tabDocumentAt, 1)
54 ];
56 this.invoke = function addTabInvoker_invoke()
57 {
58 tabBrowser().loadOneTab(aURL, null, "", null, false);
59 }
61 this.finalCheck = function addTabInvoker_finalCheck()
62 {
63 aFunc.call();
64 }
66 this.getID = function addTabInvoker_getID()
67 {
68 return "add tab: " + aURL;
69 }
70 }
72 ////////////////////////////////////////////////////////////////////////////
73 // Tests
75 function testBackgroundTab()
76 {
77 // Accessibles in background tab should have offscreen state and no
78 // invisible state.
79 var tabDoc = tabDocumentAt(0);
80 var input = getAccessible(tabDoc.getElementById("input"));
81 testStates(input, STATE_OFFSCREEN, 0, STATE_INVISIBLE);
82 }
84 function testScrolledOff()
85 {
86 var tabDoc = tabDocumentAt(1);
88 // scrolled off
89 input = getAccessible(tabDoc.getElementById("input_scrolledoff"));
90 testStates(input, STATE_OFFSCREEN, 0, STATE_INVISIBLE);
92 // scrolled off item (twice)
93 var lastLiNode = tabDoc.getElementById("li_last");
94 var lastLi = getAccessible(lastLiNode);
95 testStates(lastLi, STATE_OFFSCREEN, 0, STATE_INVISIBLE);
97 // scroll into view the item
98 lastLiNode.scrollIntoView(true);
99 testStates(lastLi, 0, 0, STATE_OFFSCREEN | STATE_INVISIBLE);
101 // first item is scrolled off now (testcase for bug 768786)
102 var firstLi = getAccessible(tabDoc.getElementById("li_first"));
103 testStates(firstLi, STATE_OFFSCREEN, 0, STATE_INVISIBLE);
104 }
106 var gInputDocURI = "data:text/html,<html><body>";
107 gInputDocURI += "<input id='input'></body></html>";
109 var gDocURI = "data:text/html,<html><body>";
110 gDocURI += "<div style='border:2px solid blue; width: 500px; height: 600px;'></div>";
111 gDocURI += "<input id='input_scrolledoff'>";
112 gDocURI += "<ul style='border:2px solid red; width: 100px; height: 50px; overflow: auto;'>";
113 gDocURI += " <li id='li_first'>item1</li><li>item2</li><li>item3</li>";
114 gDocURI += " <li>item4</li><li>item5</li><li id='li_last'>item6</li>";
115 gDocURI += "</ul>";
116 gDocURI += "</body></html>";
118 function doTests()
119 {
120 testStates("div", 0, 0, STATE_INVISIBLE | STATE_OFFSCREEN);
121 testStates("div_off", STATE_OFFSCREEN, 0, STATE_INVISIBLE);
122 testStates("div_transformed", STATE_OFFSCREEN, 0, STATE_INVISIBLE);
123 testStates("div_abschild", 0, 0, STATE_INVISIBLE | STATE_OFFSCREEN);
125 gQueue = new eventQueue();
127 gQueue.push(new addTabInvoker("about:blank", testBackgroundTab));
128 gQueue.push(new loadURIInvoker(gDocURI, testScrolledOff));
130 gQueue.onFinish = function() { closeBrowserWindow(); }
131 gQueue.invoke(); // Will call SimpleTest.finish();
132 }
134 SimpleTest.waitForExplicitFinish();
135 openBrowserWindow(doTests, gInputDocURI, { width: 600, height: 600 });
136 </script>
138 </head>
140 <body>
142 <a target="_blank"
143 href="https://bugzilla.mozilla.org/show_bug.cgi?id=591363"
144 title="(in)visible state is not always correct?">
145 Mozilla Bug 591363
146 </a>
147 <a target="_blank"
148 href="https://bugzilla.mozilla.org/show_bug.cgi?id=768786"
149 title="Offscreen state is not exposed under certain circumstances">
150 Mozilla Bug 768786
151 </a>
152 <p id="display"></p>
153 <div id="content" style="display: none"></div>
154 <pre id="test">
155 </pre>
157 <div id="outer_div">
159 <!-- trivial cases -->
160 <div id="div">div</div>
161 <div id="div_off" style="position: absolute; left:-999px; top:-999px">
162 offscreen!
163 </div>
164 <div id="div_transformed" style="transform: translate(-999px, -999px);">
165 transformed!
166 </div>
168 <!-- edge case: no rect but has out of flow child -->
169 <div id="div_abschild">
170 <p style="position: absolute; left: 120px; top:120px;">absolute</p>
171 </div>
173 </div>
174 </body>
175 </html>