accessible/tests/mochitest/relations/test_general.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>
     3 <head>
     4   <title>nsIAccessible::getAccessibleRelated() tests</title>
     5   <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css" />
     7   <script type="application/javascript"
     8           src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
    10   <script type="application/javascript"
    11           src="../common.js"></script>
    12   <script type="application/javascript"
    13           src="../relations.js"></script>
    14   <script type="application/javascript"
    15           src="../role.js"></script>
    17   <script type="application/javascript">
    18     function doTest()
    19     {
    20       // html:label@for
    21       testRelation("label1_1", RELATION_LABEL_FOR, "control1_1");
    22       testRelation("control1_1", RELATION_LABELLED_BY, "label1_1");
    24       // html:label@for, multiple
    25       testRelation("label1_2", RELATION_LABEL_FOR, "control1_2");
    26       testRelation("label1_3", RELATION_LABEL_FOR, "control1_2");
    27       testRelation("control1_2", RELATION_LABELLED_BY,
    28                    [ "label1_2", "label1_3" ]);
    30       // ancestor html:label (implicit association)
    31       testRelation("label1_4", RELATION_LABEL_FOR, "control1_4");
    32       testRelation("control1_4", RELATION_LABELLED_BY, "label1_4");
    33       testRelation("control1_4_option1", RELATION_LABELLED_BY, null);
    34       testRelation("label1_5", RELATION_LABEL_FOR, "control1_5");
    35       testRelation("control1_5", RELATION_LABELLED_BY, "label1_5");
    36       testRelation("label1_6", RELATION_LABEL_FOR, "control1_6");
    37       testRelation("control1_6", RELATION_LABELLED_BY, "label1_6");
    38       testRelation("label1_7", RELATION_LABEL_FOR, "control1_7");
    39       testRelation("control1_7", RELATION_LABELLED_BY, "label1_7");
    40       testRelation("label1_8", RELATION_LABEL_FOR, "control1_8");
    41       testRelation("control1_8", RELATION_LABELLED_BY, "label1_8");
    42       testRelation("label1_9", RELATION_LABEL_FOR, "control1_9");
    43       testRelation("control1_9", RELATION_LABELLED_BY, "label1_9");
    44       testRelation("label1_10", RELATION_LABEL_FOR, "control1_10");
    45       testRelation("control1_10", RELATION_LABELLED_BY, "label1_10");
    46       testRelation("label1_11", RELATION_LABEL_FOR, "control1_11");
    47       testRelation("control1_11", RELATION_LABELLED_BY, "label1_11");
    48       testRelation("label1_12", RELATION_LABEL_FOR, "control1_12");
    49       testRelation("control1_12", RELATION_LABELLED_BY, "label1_12");
    51       testRelation("label1_13", RELATION_LABEL_FOR, null);
    52       testRelation("control1_13", RELATION_LABELLED_BY, null);
    53       testRelation("control1_14", RELATION_LABELLED_BY, "label1_14");
    55       // aria-labelledby
    56       testRelation("label2", RELATION_LABEL_FOR, "checkbox2");
    57       testRelation("checkbox2", RELATION_LABELLED_BY, "label2");
    59       // aria-labelledby, multiple relations
    60       testRelation("label3", RELATION_LABEL_FOR, "checkbox3");
    61       testRelation("label4", RELATION_LABEL_FOR, "checkbox3");
    62       testRelation("checkbox3", RELATION_LABELLED_BY, ["label3", "label4"]);
    64       // aria-describedby
    65       testRelation("descr1", RELATION_DESCRIPTION_FOR, "checkbox4");
    66       testRelation("checkbox4", RELATION_DESCRIBED_BY, "descr1");
    68       // aria-describedby, multiple relations
    69       testRelation("descr2", RELATION_DESCRIPTION_FOR, "checkbox5");
    70       testRelation("descr3", RELATION_DESCRIPTION_FOR, "checkbox5");
    71       testRelation("checkbox5", RELATION_DESCRIBED_BY, ["descr2", "descr3"]);
    73       // aria_owns, multiple relations
    74       testRelation("treeitem1", RELATION_NODE_CHILD_OF, "tree");
    75       testRelation("treeitem2", RELATION_NODE_CHILD_OF, "tree");
    77       // 'node child of' relation for outlineitem role
    78       testRelation("treeitem3", RELATION_NODE_CHILD_OF, "tree");
    79       testRelation("treeitem4", RELATION_NODE_CHILD_OF, "tree");
    80       testRelation("treeitem5", RELATION_NODE_CHILD_OF, "treeitem4");
    81       testRelation("treeitem6", RELATION_NODE_CHILD_OF, "tree");
    82       testRelation("treeitem7", RELATION_NODE_CHILD_OF, "treeitem6");
    83       testRelation("tree2_ti1", RELATION_NODE_CHILD_OF, "tree2");
    84       testRelation("tree2_ti1a", RELATION_NODE_CHILD_OF, "tree2_ti1");
    85       testRelation("tree2_ti1b", RELATION_NODE_CHILD_OF, "tree2_ti1");
    87       // 'node child of' relation for row role in grid.
    88       // Relation for row associated using aria-owns should exist.
    89       testRelation("simplegrid-ownrow", RELATION_NODE_CHILD_OF, "simplegrid");
    90       // Relation for row associated using aria-level should exist.
    91       testRelation("simplegrid-row3", RELATION_NODE_CHILD_OF,
    92                    "simplegrid-row2");
    93       // Relations for hierarchical children elements shouldn't exist.
    94       testAbsentRelation("simplegrid-row1", RELATION_NODE_CHILD_OF,
    95                          "simplegrid");
    96       testAbsentRelation("simplegrid-row2", RELATION_NODE_CHILD_OF,
    97                          "simplegrid");
    99       // 'node child of' relation for row role of treegrid
   100       testRelation("treegridrow1", RELATION_NODE_CHILD_OF, "treegrid");
   101       testRelation("treegridrow2", RELATION_NODE_CHILD_OF, "treegrid");
   102       testRelation("treegridrow3", RELATION_NODE_CHILD_OF, "treegridrow2");
   104       // 'node child of' relation for lists organized by groups
   105       testRelation("listitem1", RELATION_NODE_CHILD_OF, "list");
   106       testRelation("listitem1.1", RELATION_NODE_CHILD_OF, "listitem1");
   107       testRelation("listitem1.2", RELATION_NODE_CHILD_OF, "listitem1");
   109       // 'node child of' relation for the document having window, returns
   110       // direct accessible parent (fixed in bug 419770).
   111       var iframeElmObj = {};
   112       var iframeAcc = getAccessible("iframe", null, iframeElmObj);
   113       var iframeDoc = iframeElmObj.value.contentDocument;
   114       var iframeDocAcc = getAccessible(iframeDoc);
   115       testRelation(iframeDocAcc, RELATION_NODE_CHILD_OF, iframeAcc);
   117       // 'node parent of' relation on ARIA tree and treegrid.
   118       testRelation("tree", RELATION_NODE_PARENT_OF,
   119                     ["treeitem1", "treeitem2", // aria-owns
   120                      "treeitem3", "treeitem4", "treeitem6"]); // children
   121       testRelation("treeitem4", RELATION_NODE_PARENT_OF,
   122                    "treeitem5"); // aria-level
   123       testRelation("treeitem6", RELATION_NODE_PARENT_OF,
   124                    "treeitem7"); // // group role
   125       testRelation("tree2", RELATION_NODE_PARENT_OF, "tree2_ti1"); // group role
   126       testRelation("tree2_ti1", RELATION_NODE_PARENT_OF,
   127                    ["tree2_ti1a", "tree2_ti1b"]); // group role
   129       testRelation("treegridrow2", RELATION_NODE_PARENT_OF, "treegridrow3");
   130       testRelation("treegrid", RELATION_NODE_PARENT_OF,
   131                    ["treegridrow1", "treegridrow2"]);
   133       // 'node parent of' relation on ARIA grid.
   134       // Should only have relation to child added through aria-owns.
   135       testRelation("simplegrid", RELATION_NODE_PARENT_OF, "simplegrid-ownrow");
   136       // 'node parent of' relation on ARIA grid's row.
   137       // Should only have relation to child through aria-level.
   138       testRelation("simplegrid-row2", RELATION_NODE_PARENT_OF,
   139                    "simplegrid-row3");
   141       // 'node parent of' relation on ARIA list structured by groups
   142       testRelation("list", RELATION_NODE_PARENT_OF,
   143                    "listitem1");
   144       testRelation("listitem1", RELATION_NODE_PARENT_OF,
   145                    [ "listitem1.1", "listitem1.2" ]);
   147       // aria-atomic
   148       testRelation(getNode("atomic").firstChild, RELATION_MEMBER_OF, "atomic");
   150       // aria-controls
   151       getAccessible("tab");
   152       todo(false,
   153            "Getting an accessible tab, otherwise relations for tabpanel aren't cached. Bug 606924 will fix that.");
   154       testRelation("tabpanel", RELATION_CONTROLLED_BY, "tab");
   155       testRelation("tab", RELATION_CONTROLLER_FOR, "tabpanel");
   157       // aria-controls, multiple relations
   158       testRelation("lr1", RELATION_CONTROLLED_BY, "button");
   159       testRelation("lr2", RELATION_CONTROLLED_BY, "button");
   160       testRelation("button", RELATION_CONTROLLER_FOR, ["lr1", "lr2"]);
   162       // aria-flowto
   163       testRelation("flowto", RELATION_FLOWS_TO, "flowfrom");
   164       testRelation("flowfrom", RELATION_FLOWS_FROM, "flowto");
   166       // aria-flowto, multiple relations
   167       testRelation("flowto1", RELATION_FLOWS_TO, ["flowfrom1", "flowfrom2"]);
   168       testRelation("flowfrom1", RELATION_FLOWS_FROM, "flowto1");
   169       testRelation("flowfrom2", RELATION_FLOWS_FROM, "flowto1");
   171       // 'default button' relation
   172       testRelation("input", RELATION_DEFAULT_BUTTON, "submit");
   174       // output 'for' relations
   175       testRelation("output", RELATION_CONTROLLED_BY, ["input", "input2"]);
   176       testRelation("output2", RELATION_CONTROLLED_BY, ["input", "input2"]);
   177       testRelation("input", RELATION_CONTROLLER_FOR, ["output", "output2"]);
   178       testRelation("input2", RELATION_CONTROLLER_FOR, ["output", "output2"]);
   180       // 'described by'/'description for' relation for html:table and
   181       // html:caption
   182       testRelation("caption", RELATION_LABEL_FOR, "table");
   183       testRelation("table", RELATION_LABELLED_BY, "caption");
   185       // 'labelled by'/'label for' relation for html:fieldset and
   186       // html:legend
   187       testRelation("legend", RELATION_LABEL_FOR, "fieldset");
   188       testRelation("fieldset", RELATION_LABELLED_BY, "legend");
   190       // containing relations
   191       testRelation("control1_1", RELATION_CONTAINING_DOCUMENT, document);
   192       testRelation("control1_1", RELATION_CONTAINING_TAB_PANE, getTabDocAccessible("control1_1"));
   193       testRelation("control1_1", RELATION_CONTAINING_APPLICATION, getApplicationAccessible());
   195       // finish test
   196       SimpleTest.finish();
   197     }
   199     disableLogging(); // from test_embeds.xul
   200     SimpleTest.waitForExplicitFinish();
   201     addA11yLoadEvent(doTest);
   202   </script>
   204 </head>
   206 <body>
   208   <a target="_blank"
   209      href="https://bugzilla.mozilla.org/show_bug.cgi?id=475298"
   210      title="mochitests for accessible relations">
   211     Bug 475298
   212   </a>
   213   <a target="_blank"
   214      href="https://bugzilla.mozilla.org/show_bug.cgi?id=527461"
   215      title="Implement RELATION_NODE_PARENT_OF">
   216     Bug 527461
   217   </a>
   218   <a target="_blank"
   219      href="https://bugzilla.mozilla.org/show_bug.cgi?id=558036"
   220      title="make HTML <output> accessible">
   221     Bug 558036
   222   </a>
   223   <a target="_blank"
   224      href="https://bugzilla.mozilla.org/show_bug.cgi?id=682790"
   225      title="Ignore implicit label association when it's associated explicitly">
   226     Bug 682790
   227   </a>
   228   <a target="_blank"
   229      href="https://bugzilla.mozilla.org/show_bug.cgi?id=687393"
   230      title="HTML select options gets relation from containing label">
   231     Bug 687393
   232   </a>
   233   <a target="_blank"
   234      href="https://bugzilla.mozilla.org/show_bug.cgi?id=864224"
   235      title="Support nested ARIA listitems structured by role='group'">
   236     Bug 864224
   237   </a>
   238   <p id="display"></p>
   239   <div id="content" style="display: none"></div>
   240   <pre id="test">
   241   </pre>
   243   <label id="label1_1" for="control1_1">label</label>
   244   <input id="control1_1">
   246   <label id="label1_2" for="control1_2">label</label>
   247   <label id="label1_3" for="control1_2">label</label>
   248   <input id="control1_2">
   250   <label id="label1_4">Label
   251     <select id="control1_4">
   252       <option id="control1_4_option1">option</option>
   253     </select>
   254   </label>
   255   <label id="label1_5">Label
   256     <button id="control1_5">button</button>
   257   </label>
   258   <label id="label1_6">Label
   259     <input id="control1_6">
   260   </label>
   261   <label id="label1_7">Label
   262     <input id="control1_7" type="checkbox">
   263   </label>
   264   <label id="label1_8">Label
   265     <input id="control1_8" type="radio">
   266   </label>
   267   <label id="label1_9">Label
   268     <input id="control1_9" type="button" value="button">
   269   </label>
   270   <label id="label1_10">Label
   271     <input id="control1_10" type="submit">
   272   </label>
   273   <label id="label1_11">Label
   274     <input id="control1_11" type="image">
   275   </label>
   276   <label id="label1_12">Label
   277     <progress id="control1_12"></progress>
   278   </label>
   280   <label id="label1_13" for="">Label
   281     <input id="control1_13">
   282   </label>
   283   <label id="label1_14" for="control1_14">Label
   284     <input id="control1_14">
   285   </label>
   287   <span id="label2">label</span>
   288   <span role="checkbox" id="checkbox2" aria-labelledby="label2"></span>
   290   <span id="label3">label1</span>
   291   <span id="label4">label2</span>
   292   <span role="checkbox" id="checkbox3" aria-labelledby="label3 label4"></span>
   294   <span id="descr1">description</span>
   295   <span role="checkbox" id="checkbox4" aria-describedby="descr1"></span>
   297   <span id="descr2">description1</span>
   298   <span id="descr3">description2</span>
   299   <span role="checkbox" id="checkbox5" aria-describedby="descr2 descr3"></span>
   301   <div role="treeitem" id="treeitem1">Yellow</div>
   302   <div role="treeitem" id="treeitem2">Orange</div>
   303   <div id="tree" role="tree" aria-owns="treeitem1 treeitem2">
   304     <div role="treeitem" id="treeitem3">Blue</div>
   305     <div role="treeitem" id="treeitem4" aria-level="1">Green</div>
   306     <div role="treeitem" id="treeitem5" aria-level="2">Light green</div>
   307     <div role="treeitem" id="treeitem6" aria-level="1">Green2</div>
   308     <div role="group">
   309       <div role="treeitem" id="treeitem7">Super light green</div>
   310     </div>
   311   </div>
   313   <div aria-owns="simplegrid-ownrow" role="grid" id="simplegrid">
   314     <div role="row" id="simplegrid-row1" aria-level="1">
   315       <div role="gridcell">cell 1,1</div>
   316       <div role="gridcell">cell 1,2</div>
   317     </div>
   318     <div role="row" id="simplegrid-row2" aria-level="1">
   319       <div role="gridcell">cell 2,1</div>
   320       <div role="gridcell">cell 2,2</div>
   321     </div>
   322     <div role="row" id="simplegrid-row3" aria-level="2">
   323       <div role="gridcell">cell 3,1</div>
   324       <div role="gridcell">cell 3,2</div>
   325     </div>
   326   </div>
   327   <div role="row" id="simplegrid-ownrow"></div>
   329   <ul role="tree" id="tree2">
   330     <li role="treeitem" id="tree2_ti1">Item 1
   331       <ul role="group">
   332         <li role="treeitem" id="tree2_ti1a">Item 1A</li>
   333         <li role="treeitem" id="tree2_ti1b">Item 1B</li>
   334       </ul>
   335     </li>
   336   </ul>
   338   <div role="treegrid" id="treegrid">
   339     <div role="row" id="treegridrow1">
   340       <span role="gridcell">cell1</span><span role="gridcell">cell2</span>
   341     </div>
   342     <div role="row" id="treegridrow2" aria-level="1">
   343       <span role="gridcell">cell3</span><span role="gridcell">cell4</span>
   344     </div>
   345     <div role="row" id="treegridrow3" aria-level="2">
   346       <span role="gridcell">cell5</span><span role="gridcell">cell6</span>
   347     </div>
   348   </div>
   350   <div role="list" id="list">
   351     <div role="listitem" id="listitem1">Item 1
   352       <div role="group">
   353         <div role="listitem" id="listitem1.1">Item 1A</div>
   354         <div role="listitem" id="listitem1.2">Item 1B</div>
   355       </div>
   356     </div>
   357   </div>
   359   <iframe id="iframe"></iframe>
   361   <div id="tablist" role="tablist">
   362     <div id="tab" role="tab" aria-controls="tabpanel">tab</div>
   363   </div>
   364   <div id="tabpanel" role="tabpanel">tabpanel</div>
   366   <div id="lr1" aria-live="assertive">1</div>
   367   <div id="lr2" aria-live="assertive">a</div>
   368   <input type="button" id="button" aria-controls="lr1 lr2"
   369          onclick="getNode('lr1').textContent += '1'; getNode('lr2').textContent += 'a';"/>
   371   <div id="atomic" aria-atomic="true">live region</div>
   373   <span id="flowto" aria-flowto="flowfrom">flow to</span>
   374   <span id="flowfrom">flow from</span>
   376   <span id="flowto1" aria-flowto="flowfrom1 flowfrom2">flow to</span>
   377   <span id="flowfrom1">flow from</span>
   378   <span id="flowfrom2">flow from</span>
   380   <form id="form">
   381     <input id="input" />
   382     <input id="input2" />
   383     <input type="submit" id="submit" />
   384     <output id="output" style="display:block" for="input input2"></output>
   385     <output id="output2" for="input input2"></output>
   386   </form>
   388   <table id="table">
   389     <caption id="caption">tabple caption</caption>
   390     <tr>
   391       <td>cell1</td><td>cell2</td>
   392     </tr>
   393   </table>
   395   <fieldset id="fieldset">
   396     <legend id="legend">legend</legend>
   397     <input />
   398   </fieldset>
   399 </body>
   400 </html>

mercurial