summaryrefslogtreecommitdiffstats
path: root/accessible/tests/mochitest/states/test_visibility.html
diff options
context:
space:
mode:
Diffstat (limited to 'accessible/tests/mochitest/states/test_visibility.html')
-rw-r--r--accessible/tests/mochitest/states/test_visibility.html175
1 files changed, 175 insertions, 0 deletions
diff --git a/accessible/tests/mochitest/states/test_visibility.html b/accessible/tests/mochitest/states/test_visibility.html
new file mode 100644
index 000000000..a2e4a34e6
--- /dev/null
+++ b/accessible/tests/mochitest/states/test_visibility.html
@@ -0,0 +1,175 @@
+<html>
+<head>
+ <title>visibility state testing</title>
+
+ <link rel="stylesheet" type="text/css"
+ href="chrome://mochikit/content/tests/SimpleTest/test.css" />
+
+ <script type="application/javascript"
+ src="chrome://mochikit/content/MochiKit/packed.js"></script>
+ <script type="application/javascript"
+ src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
+
+ <script type="application/javascript"
+ src="../common.js"></script>
+ <script type="application/javascript"
+ src="../role.js"></script>
+ <script type="application/javascript"
+ src="../states.js"></script>
+ <script type="application/javascript"
+ src="../events.js"></script>
+ <script type="application/javascript"
+ src="../browser.js"></script>
+
+ <script type="application/javascript">
+ ////////////////////////////////////////////////////////////////////////////
+ // Invokers
+
+ function loadURIInvoker(aURI, aFunc)
+ {
+ this.invoke = function loadURIInvoker_invoke()
+ {
+ tabBrowser().loadURI(aURI);
+ }
+
+ this.eventSeq = [
+ new invokerChecker(EVENT_DOCUMENT_LOAD_COMPLETE, currentTabDocument)
+ ];
+
+ this.finalCheck = function loadURIInvoker_finalCheck()
+ {
+ aFunc.call();
+ }
+
+ this.getID = function loadURIInvoker_getID()
+ {
+ return "load uri " + aURI;
+ }
+ }
+
+ function addTabInvoker(aURL, aFunc)
+ {
+ this.eventSeq = [
+ new invokerChecker(EVENT_DOCUMENT_LOAD_COMPLETE, tabDocumentAt, 1)
+ ];
+
+ this.invoke = function addTabInvoker_invoke()
+ {
+ tabBrowser().loadOneTab(aURL, null, "", null, false);
+ }
+
+ this.finalCheck = function addTabInvoker_finalCheck()
+ {
+ aFunc.call();
+ }
+
+ this.getID = function addTabInvoker_getID()
+ {
+ return "add tab: " + aURL;
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+ // Tests
+
+ function testBackgroundTab()
+ {
+ // Accessibles in background tab should have offscreen state and no
+ // invisible state.
+ var tabDoc = tabDocumentAt(0);
+ var input = getAccessible(tabDoc.getElementById("input"));
+ testStates(input, STATE_OFFSCREEN, 0, STATE_INVISIBLE);
+ }
+
+ function testScrolledOff()
+ {
+ var tabDoc = tabDocumentAt(1);
+
+ // scrolled off
+ input = getAccessible(tabDoc.getElementById("input_scrolledoff"));
+ testStates(input, STATE_OFFSCREEN, 0, STATE_INVISIBLE);
+
+ // scrolled off item (twice)
+ var lastLiNode = tabDoc.getElementById("li_last");
+ var lastLi = getAccessible(lastLiNode);
+ testStates(lastLi, STATE_OFFSCREEN, 0, STATE_INVISIBLE);
+
+ // scroll into view the item
+ lastLiNode.scrollIntoView(true);
+ testStates(lastLi, 0, 0, STATE_OFFSCREEN | STATE_INVISIBLE);
+
+ // first item is scrolled off now (testcase for bug 768786)
+ var firstLi = getAccessible(tabDoc.getElementById("li_first"));
+ testStates(firstLi, STATE_OFFSCREEN, 0, STATE_INVISIBLE);
+ }
+
+ var gInputDocURI = "data:text/html,<html><body>";
+ gInputDocURI += "<input id='input'></body></html>";
+
+ var gDocURI = "data:text/html,<html><body>";
+ gDocURI += "<div style='border:2px solid blue; width: 500px; height: 600px;'></div>";
+ gDocURI += "<input id='input_scrolledoff'>";
+ gDocURI += "<ul style='border:2px solid red; width: 100px; height: 50px; overflow: auto;'>";
+ gDocURI += " <li id='li_first'>item1</li><li>item2</li><li>item3</li>";
+ gDocURI += " <li>item4</li><li>item5</li><li id='li_last'>item6</li>";
+ gDocURI += "</ul>";
+ gDocURI += "</body></html>";
+
+ function doTests()
+ {
+ testStates("div", 0, 0, STATE_INVISIBLE | STATE_OFFSCREEN);
+ testStates("div_off", STATE_OFFSCREEN, 0, STATE_INVISIBLE);
+ testStates("div_transformed", STATE_OFFSCREEN, 0, STATE_INVISIBLE);
+ testStates("div_abschild", 0, 0, STATE_INVISIBLE | STATE_OFFSCREEN);
+
+ gQueue = new eventQueue();
+
+ gQueue.push(new addTabInvoker("about:blank", testBackgroundTab));
+ gQueue.push(new loadURIInvoker(gDocURI, testScrolledOff));
+
+ gQueue.onFinish = function() { closeBrowserWindow(); }
+ gQueue.invoke(); // Will call SimpleTest.finish();
+ }
+
+ SimpleTest.waitForExplicitFinish();
+ openBrowserWindow(doTests, gInputDocURI, { width: 600, height: 600 });
+ </script>
+
+</head>
+
+<body>
+
+ <a target="_blank"
+ href="https://bugzilla.mozilla.org/show_bug.cgi?id=591363"
+ title="(in)visible state is not always correct?">
+ Mozilla Bug 591363
+ </a>
+ <a target="_blank"
+ href="https://bugzilla.mozilla.org/show_bug.cgi?id=768786"
+ title="Offscreen state is not exposed under certain circumstances">
+ Mozilla Bug 768786
+ </a>
+ <p id="display"></p>
+ <div id="content" style="display: none"></div>
+ <pre id="test">
+ </pre>
+
+ <div id="outer_div">
+
+ <!-- trivial cases -->
+ <div id="div">div</div>
+ <div id="div_off" style="position: absolute; left:-999px; top:-999px">
+ offscreen!
+ </div>
+ <div id="div_transformed" style="transform: translate(-999px, -999px);">
+ transformed!
+ </div>
+
+ <!-- edge case: no rect but has out of flow child -->
+ <div id="div_abschild">
+ <p style="position: absolute; left: 120px; top:120px;">absolute</p>
+ </div>
+
+ </div>
+</body>
+</html>