accessible/tests/mochitest/states/test_visibility.html

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     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>

mercurial