tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

test_aria.html (28903B)


      1 <html>
      2 
      3 <head>
      4  <title>ARIA based nsIAccessible states testing</title>
      5 
      6  <link rel="stylesheet" type="text/css"
      7        href="chrome://mochikit/content/tests/SimpleTest/test.css" />
      8 
      9  <style type="text/css">
     10    .offscreen {
     11      position: absolute;
     12      left: -5000px;
     13      top: -5000px;
     14      height: 100px;
     15      width: 100px;
     16    }
     17  </style>
     18 
     19  <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
     20 
     21  <script type="application/javascript"
     22          src="../common.js"></script>
     23  <script type="application/javascript"
     24          src="../role.js"></script>
     25  <script type="application/javascript"
     26          src="../states.js"></script>
     27 
     28  <script type="application/javascript">
     29    function testAriaDisabledTree(aAccOrElmOrID) {
     30      // test accessible and its subtree for propagated state.
     31      var acc = getAccessible(aAccOrElmOrID);
     32      if (!acc)
     33        return;
     34 
     35      var [state /* extraState */] = getStates(aAccOrElmOrID);
     36      if (state & STATE_UNAVAILABLE) {
     37        var role = getRole(acc);
     38        if (role != ROLE_GROUPING) {
     39          testStates(acc, STATE_FOCUSABLE);
     40        }
     41      }
     42 
     43      // Iterate over its children to see if the state got propagated.
     44      var children = null;
     45      try {
     46        children = acc.children;
     47      } catch (e) {}
     48      ok(children, "Could not get children for " + aAccOrElmOrID + "!");
     49 
     50      if (children) {
     51        for (var i = 0; i < children.length; i++) {
     52          var childAcc = children.queryElementAt(i, nsIAccessible);
     53          testAriaDisabledTree(childAcc);
     54        }
     55      }
     56    }
     57 
     58    function doTest() {
     59      // aria_autocomplete
     60      testStates("textbox_autocomplete_inline", 0, EXT_STATE_SUPPORTS_AUTOCOMPLETION);
     61      testStates("textbox_autocomplete_list", STATE_HASPOPUP, EXT_STATE_SUPPORTS_AUTOCOMPLETION);
     62      testStates("textbox_autocomplete_both", STATE_HASPOPUP, EXT_STATE_SUPPORTS_AUTOCOMPLETION);
     63      testStates("combobox_autocomplete_inline", STATE_HASPOPUP, EXT_STATE_SUPPORTS_AUTOCOMPLETION);
     64      testStates("combobox_autocomplete_list", STATE_HASPOPUP, EXT_STATE_SUPPORTS_AUTOCOMPLETION);
     65      testStates("combobox_autocomplete_both", STATE_HASPOPUP, EXT_STATE_SUPPORTS_AUTOCOMPLETION);
     66 
     67      testStates("htmltext_autocomplete_list", STATE_HASPOPUP, EXT_STATE_SUPPORTS_AUTOCOMPLETION);
     68      testStates("htmltextarea_autocomplete_list", STATE_HASPOPUP, EXT_STATE_SUPPORTS_AUTOCOMPLETION);
     69 
     70      // aria-busy
     71      testStates("textbox_busy_false", 0, 0, STATE_BUSY);
     72      testStates("textbox_busy_true", STATE_BUSY);
     73      testStates("textbox_busy_error", STATE_INVALID);
     74 
     75      // aria-expanded
     76      testStates("combobox", STATE_COLLAPSED);
     77      testStates("combobox_expanded", STATE_EXPANDED);
     78 
     79      // tri-state checkbox
     80      var checkboxElem = getNode("check1");
     81      if (checkboxElem) {
     82        testStates(checkboxElem, STATE_CHECKED);
     83        checkboxElem.checked = false;
     84        testStates(checkboxElem, 0, 0, STATE_CHECKED);
     85        checkboxElem.indeterminate = true;
     86        testStates(checkboxElem, STATE_MIXED, 0);
     87      }
     88 
     89      // aria-checked
     90      testStates("aria_checked_checkbox", STATE_CHECKED);
     91      testStates("aria_mixed_checkbox", STATE_MIXED);
     92      testStates("aria_checked_switch", STATE_CHECKED);
     93      testStates("aria_mixed_switch", 0, 0, STATE_MIXED); // unsupported
     94      testStates("aria_mixed_switch", 0, 0, STATE_CHECKED); // not checked due to being unsupported
     95 
     96      // test disabled group and all its descendants to see if they are
     97      // disabled, too. See bug 429285.
     98      testAriaDisabledTree("group");
     99 
    100      // aria-modal
    101      testStates("aria_modal", 0, EXT_STATE_MODAL);
    102      testStates("aria_modal_false", 0, 0, 0, EXT_STATE_MODAL);
    103 
    104      // aria-multiline
    105      testStates("aria_multiline_textbox", 0, EXT_STATE_MULTI_LINE);
    106 
    107      // aria-multiselectable
    108      testStates("aria_multiselectable_listbox",
    109                 STATE_MULTISELECTABLE | STATE_EXTSELECTABLE);
    110      testStates("aria_multiselectable_tablist",
    111                 STATE_MULTISELECTABLE | STATE_EXTSELECTABLE);
    112 
    113      // aria-pressed
    114      testStates("aria_pressed_button", STATE_PRESSED, 0, STATE_CHECKABLE);
    115      testStates("aria_pressed_native_button", STATE_PRESSED, 0, STATE_CHECKABLE);
    116 
    117      // aria-readonly
    118      testStates("aria_readonly_textbox", STATE_READONLY);
    119 
    120      // readonly on grid and gridcell
    121      testStates("aria_grid_default", 0, 0,
    122                 STATE_READONLY, 0);
    123      testStates("aria_grid_default_colheader_readonly", STATE_READONLY, 0,
    124                 0, 0);
    125      testStates("aria_grid_default_colheader_inherited", 0, 0,
    126                 STATE_READONLY, 0);
    127      testStates("aria_grid_default_rowheader_readonly", STATE_READONLY, 0,
    128                 0, 0);
    129      testStates("aria_grid_default_rowheader_inherited", 0, 0,
    130                 STATE_READONLY, 0);
    131      testStates("aria_grid_default_cell_readonly", STATE_READONLY, 0,
    132                 0, 0);
    133      testStates("aria_grid_default_cell_inherited", 0, 0,
    134                 STATE_READONLY, 0);
    135 
    136      testStates("aria_grid_readonly", STATE_READONLY, 0,
    137                 0, 0);
    138      testStates("aria_grid_readonly_colheader_editable", 0, 0,
    139                 STATE_READONLY, 0);
    140      testStates("aria_grid_readonly_colheader_inherited", STATE_READONLY, 0,
    141                 0, 0);
    142      testStates("aria_grid_readonly_rowheader_editable", 0, 0,
    143                 STATE_READONLY, 0);
    144      testStates("aria_grid_readonly_rowheader_inherited", STATE_READONLY, 0,
    145                 0, 0);
    146      testStates("aria_grid_readonly_cell_editable", 0, 0,
    147                 STATE_READONLY, 0);
    148      testStates("aria_grid_readonly_cell_inherited", STATE_READONLY, 0,
    149                 0, 0);
    150 
    151      // readonly on treegrid and gridcell
    152      testStates("aria_treegrid_default", 0, 0,
    153                 STATE_READONLY, 0);
    154      testStates("aria_treegrid_default_colheader_readonly", STATE_READONLY, 0,
    155                 0, 0);
    156      testStates("aria_treegrid_default_colheader_inherited", 0, 0,
    157                 STATE_READONLY, 0);
    158      testStates("aria_treegrid_default_rowheader_readonly", STATE_READONLY, 0,
    159                 0, 0);
    160      testStates("aria_treegrid_default_rowheader_inherited", 0, 0,
    161                 STATE_READONLY, 0);
    162      testStates("aria_treegrid_default_cell_readonly", STATE_READONLY, 0,
    163                 0, 0);
    164      testStates("aria_treegrid_default_cell_inherited", 0, 0,
    165                 STATE_READONLY, 0);
    166 
    167      testStates("aria_treegrid_readonly", STATE_READONLY, 0,
    168                 0, 0);
    169      testStates("aria_treegrid_readonly_colheader_editable", 0, 0,
    170                 STATE_READONLY, 0);
    171      testStates("aria_treegrid_readonly_colheader_inherited", STATE_READONLY, 0,
    172                 0, 0);
    173      testStates("aria_treegrid_readonly_rowheader_editable", 0, 0,
    174                 STATE_READONLY, 0);
    175      testStates("aria_treegrid_readonly_rowheader_inherited", STATE_READONLY, 0,
    176                 0, 0);
    177      testStates("aria_treegrid_readonly_cell_editable", 0, 0,
    178                 STATE_READONLY, 0);
    179      testStates("aria_treegrid_readonly_cell_inherited", STATE_READONLY, 0,
    180                 0, 0);
    181 
    182      // aria-readonly on directory
    183      testStates("aria_directory", STATE_READONLY);
    184 
    185      // aria-selectable
    186      testStates("aria_selectable_listitem", STATE_SELECTABLE | STATE_SELECTED);
    187 
    188      // active state caused by aria-activedescendant
    189      testStates("as_item1", 0, EXT_STATE_ACTIVE);
    190      testStates("as_item2", 0, 0, 0, EXT_STATE_ACTIVE);
    191 
    192      // universal ARIA properties inherited from file input control
    193      var fileBrowseButton = getAccessible("fileinput");
    194      testStates(fileBrowseButton,
    195                 STATE_BUSY | STATE_UNAVAILABLE | STATE_REQUIRED | STATE_HASPOPUP | STATE_INVALID);
    196 
    197      // offscreen test
    198      testStates("aria_offscreen_textbox", STATE_OFFSCREEN);
    199 
    200      //
    201      // This section tests aria roles on links/anchors for underlying
    202      // HTMLLinkAccessible creation. (see closed bug 494807)
    203      //
    204 
    205      // strong roles
    206      testStates("aria_menuitem_link", 0, 0, STATE_LINKED);
    207      testStates("aria_button_link", 0, 0, STATE_LINKED);
    208      testStates("aria_checkbox_link", 0, 0, STATE_LINKED);
    209 
    210      // strong landmark
    211      testStates("aria_application_link", 0, 0, STATE_LINKED);
    212      testStates("aria_application_anchor", 0, 0, STATE_SELECTABLE);
    213 
    214      // strange cases
    215      testStates("aria_link_link", STATE_LINKED);
    216 
    217      // some landmarks that break accessibility for these native elements
    218      // Note that these are illegal uses by web authors as per WAI-ARIA in HTML
    219      testStates("aria_main_link", 0, 0, STATE_LINKED);
    220      testStates("aria_navigation_link", 0, 0, STATE_LINKED);
    221      testStates("aria_main_anchor", 0, 0, STATE_SELECTABLE);
    222      testStates("aria_navigation_anchor", 0, 0, STATE_SELECTABLE);
    223 
    224      // aria-orientation
    225      testStates("aria_combobox", 0, 0, 0, EXT_STATE_HORIZONTAL | EXT_STATE_VERTICAL);
    226      testStates("aria_hcombobox", 0, EXT_STATE_HORIZONTAL, 0, EXT_STATE_VERTICAL);
    227      testStates("aria_vcombobox", 0, EXT_STATE_VERTICAL, 0, EXT_STATE_HORIZONTAL);
    228      testStates("aria_listbox", 0, EXT_STATE_VERTICAL, 0, EXT_STATE_HORIZONTAL);
    229      testStates("aria_hlistbox", 0, EXT_STATE_HORIZONTAL, 0, EXT_STATE_VERTICAL);
    230      testStates("aria_vlistbox", 0, EXT_STATE_VERTICAL, 0, EXT_STATE_HORIZONTAL);
    231      testStates("aria_menu", 0, EXT_STATE_VERTICAL, 0, EXT_STATE_HORIZONTAL);
    232      testStates("aria_hmenu", 0, EXT_STATE_HORIZONTAL, 0, EXT_STATE_VERTICAL);
    233      testStates("aria_vmenu", 0, EXT_STATE_VERTICAL, 0, EXT_STATE_HORIZONTAL);
    234      testStates("aria_menubar", 0, EXT_STATE_HORIZONTAL, 0, EXT_STATE_VERTICAL);
    235      testStates("aria_hmenubar", 0, EXT_STATE_HORIZONTAL, 0, EXT_STATE_VERTICAL);
    236      testStates("aria_vmenubar", 0, EXT_STATE_VERTICAL, 0, EXT_STATE_HORIZONTAL);
    237      testStates("aria_radiogroup", 0, 0, 0, EXT_STATE_HORIZONTAL | EXT_STATE_VERTICAL);
    238      testStates("aria_hradiogroup", 0, EXT_STATE_HORIZONTAL, 0, EXT_STATE_VERTICAL);
    239      testStates("aria_vradiogroup", 0, EXT_STATE_VERTICAL, 0, EXT_STATE_HORIZONTAL);
    240      testStates("aria_scrollbar", 0, EXT_STATE_VERTICAL, 0, EXT_STATE_HORIZONTAL);
    241      testStates("aria_hscrollbar", 0, EXT_STATE_HORIZONTAL, 0, EXT_STATE_VERTICAL);
    242      testStates("aria_vscrollbar", 0, EXT_STATE_VERTICAL, 0, EXT_STATE_HORIZONTAL);
    243      testStates("aria_separator", 0, EXT_STATE_HORIZONTAL, 0, EXT_STATE_VERTICAL);
    244      testStates("aria_hseparator", 0, EXT_STATE_HORIZONTAL, 0, EXT_STATE_VERTICAL);
    245      testStates("aria_vseparator", 0, EXT_STATE_VERTICAL, 0, EXT_STATE_HORIZONTAL);
    246      testStates("aria_slider", 0, EXT_STATE_HORIZONTAL, 0, EXT_STATE_VERTICAL);
    247      testStates("aria_hslider", 0, EXT_STATE_HORIZONTAL, 0, EXT_STATE_VERTICAL);
    248      testStates("aria_vslider", 0, EXT_STATE_VERTICAL, 0, EXT_STATE_HORIZONTAL);
    249      testStates("aria_tablist", 0, EXT_STATE_HORIZONTAL, 0, EXT_STATE_VERTICAL);
    250      testStates("aria_htablist", 0, EXT_STATE_HORIZONTAL, 0, EXT_STATE_VERTICAL);
    251      testStates("aria_vtablist", 0, EXT_STATE_VERTICAL, 0, EXT_STATE_HORIZONTAL);
    252      testStates("aria_toolbar", 0, EXT_STATE_HORIZONTAL, 0, EXT_STATE_VERTICAL);
    253      testStates("aria_htoolbar", 0, EXT_STATE_HORIZONTAL, 0, EXT_STATE_VERTICAL);
    254      testStates("aria_vtoolbar", 0, EXT_STATE_VERTICAL, 0, EXT_STATE_HORIZONTAL);
    255      testStates("aria_tree", 0, EXT_STATE_VERTICAL, 0, EXT_STATE_HORIZONTAL);
    256      testStates("aria_htree", 0, EXT_STATE_HORIZONTAL, 0, EXT_STATE_VERTICAL);
    257      testStates("aria_vtree", 0, EXT_STATE_VERTICAL, 0, EXT_STATE_HORIZONTAL);
    258      testStates("aria_treegrid", 0, 0, 0, EXT_STATE_HORIZONTAL | EXT_STATE_VERTICAL);
    259      testStates("aria_htreegrid", 0, EXT_STATE_HORIZONTAL, 0, EXT_STATE_VERTICAL);
    260      testStates("aria_vtreegrid", 0, EXT_STATE_VERTICAL, 0, EXT_STATE_HORIZONTAL);
    261 
    262      // indeterminate ARIA progressbars (no aria-valuenow or aria-valuetext attribute)
    263      // should expose mixed state
    264      testStates("aria_progressbar", STATE_MIXED);
    265      testStates("aria_progressbar_valuenow", 0, 0, STATE_MIXED);
    266      testStates("aria_progressbar_valuetext", 0, 0, STATE_MIXED);
    267 
    268      // aria-current
    269      testStates("current_page_1", 0, EXT_STATE_CURRENT);
    270      testStates("page_2", 0, 0, EXT_STATE_CURRENT);
    271      testStates("page_3", 0, 0, EXT_STATE_CURRENT);
    272      testStates("page_4", 0, 0, EXT_STATE_CURRENT);
    273      testStates("current_foo", 0, EXT_STATE_CURRENT);
    274 
    275      testStates("aria_listbox", STATE_FOCUSABLE);
    276      testStates("aria_grid", STATE_FOCUSABLE);
    277      testStates("aria_tree", STATE_FOCUSABLE);
    278      testStates("aria_treegrid", STATE_FOCUSABLE);
    279      testStates("aria_listbox_disabled", 0, 0, STATE_FOCUSABLE);
    280      testStates("aria_grid_disabled", 0, 0, STATE_FOCUSABLE);
    281      testStates("aria_tree_disabled", 0, 0, STATE_FOCUSABLE);
    282      testStates("aria_treegrid_disabled", 0, 0, STATE_FOCUSABLE);
    283      SimpleTest.finish();
    284    }
    285 
    286    SimpleTest.waitForExplicitFinish();
    287    addA11yLoadEvent(doTest);
    288  </script>
    289 
    290 </head>
    291 
    292 <body>
    293 
    294  <a target="_blank"
    295     href="https://bugzilla.mozilla.org/show_bug.cgi?id=457219"
    296     title="nsIAccessible states testing">
    297    Mozilla Bug 457219
    298  </a><br />
    299  <a target="_blank"
    300     href="https://bugzilla.mozilla.org/show_bug.cgi?id=429285"
    301     title="Propagate aria-disabled to descendants">
    302    Mozilla Bug 429285
    303  </a>
    304  <a target="_blank"
    305     href="https://bugzilla.mozilla.org/show_bug.cgi?id=457226"
    306     title="Mochitests for ARIA states">
    307    Mozilla Bug 457226
    308  </a>
    309  <a target="_blank"
    310     href="https://bugzilla.mozilla.org/show_bug.cgi?id=499653"
    311     title="Unify ARIA state attributes mapping rules">
    312    Mozilla Bug 499653
    313  </a>
    314  <a target="_blank"
    315     href="https://bugzilla.mozilla.org/show_bug.cgi?id=681674"
    316     title="aria-autocomplete not supported on standard form text input controls">
    317    Mozilla Bug 681674
    318  </a>
    319  <a target="_blank"
    320     href="https://bugzilla.mozilla.org/show_bug.cgi?id=681674"
    321     title="aria-orientation should be applied to separator and slider roles">
    322    Mozilla Bug 681674
    323  </a>
    324  <a target="_blank"
    325     href="https://bugzilla.mozilla.org/show_bug.cgi?id=689847"
    326     title="Expose active state on current item of selectable widgets">
    327    Mozilla Bug 689847
    328  </a>
    329  <a target="_blank"
    330     href="https://bugzilla.mozilla.org/show_bug.cgi?id=699017"
    331     title="File input control should be propogate states to descendants">
    332    Mozilla Bug 699017
    333  </a>
    334  <a target="_blank"
    335     href="https://bugzilla.mozilla.org/show_bug.cgi?id=690199"
    336     title="ARIA select widget should expose focusable state regardless the way they manage its children">
    337    Mozilla Bug 690199
    338  </a>
    339  <a target="_blank"
    340     href="https://bugzilla.mozilla.org/show_bug.cgi?id=740851"
    341     title="ARIA undetermined progressmeters should expose mixed state">
    342    Mozilla Bug 740851
    343  </a>
    344  <a target="_blank"
    345     href="https://bugzilla.mozilla.org/show_bug.cgi?id=762876"
    346     title="fix default horizontal / vertical state of role=scrollbar and ensure only one of horizontal / vertical states is exposed">
    347    Mozilla Bug 762876
    348  </a>
    349  <a target="_blank"
    350     href="https://bugzilla.mozilla.org/show_bug.cgi?id=892091"
    351     title="ARIA treegrid should be editable by default">
    352    Bug 892091
    353  </a>
    354  <a target="_blank"
    355     href="https://bugzilla.mozilla.org/show_bug.cgi?id=835121"
    356     title="ARIA grid should be editable by default">
    357    Mozilla Bug 835121
    358  </a>
    359  <a target="_blank"
    360     href="https://bugzilla.mozilla.org/show_bug.cgi?id=989958"
    361     title="Pressed state is not exposed on a button element with aria-pressed attribute">
    362    Mozilla Bug 989958
    363  </a>
    364  <a target="_blank"
    365     href="https://bugzilla.mozilla.org/show_bug.cgi?id=1136563"
    366     title="Support ARIA 1.1 switch role">
    367    Mozilla Bug 1136563
    368  </a>
    369  <a target="_blank"
    370     href="https://bugzilla.mozilla.org/show_bug.cgi?id=1355921"
    371     title="Elements with a defined, non-false value for aria-current should expose ATK_STATE_ACTIVE">
    372    Mozilla Bug 1355921
    373  </a>
    374 
    375  <p id="display"></p>
    376  <div id="content" style="display: none"></div>
    377  <pre id="test">
    378  </pre>
    379 
    380  <div id="textbox_autocomplete_inline" role="textbox" aria-autocomplete="inline"></div>
    381  <div id="textbox_autocomplete_list" role="textbox" aria-autocomplete="list"></div>
    382  <div id="textbox_autocomplete_both" role="textbox" aria-autocomplete="both"></div>
    383  <div id="combobox_autocomplete_inline" role="combobox" aria-autocomplete="inline"></div>
    384  <div id="combobox_autocomplete_list" role="combobox" aria-autocomplete="list"></div>
    385  <div id="combobox_autocomplete_both" role="combobox" aria-autocomplete="both"></div>
    386 
    387  <input id="htmltext_autocomplete_list" type="text" aria-autocomplete="list" />
    388  <textarea id="htmltextarea_autocomplete_list" aria-autocomplete="list"></textarea>
    389 
    390  <div id="textbox_busy_false" role="textbox" aria-busy="false"></div>
    391  <div id="textbox_busy_true" role="textbox" aria-busy="true"></div>
    392  <div id="textbox_busy_error" role="textbox" aria-busy="error"></div>
    393 
    394  <div id="combobox" role="combobox">combobox</div>
    395  <div id="combobox_expanded" role="combobox"
    396       aria-expanded="true">combobox</div>
    397 
    398  <input type="checkbox" id="check1" value="I agree" checked="true"/>
    399 
    400  <div id="aria_checked_checkbox" role="checkbox" aria-checked="true">
    401    I agree
    402  </div>
    403 
    404  <div id="aria_mixed_checkbox" role="checkbox" aria-checked="mixed">
    405    I might agree
    406  </div>
    407 
    408  <div id="aria_checked_switch" role="switch" aria-checked="true">
    409    I am switched on
    410  </div>
    411 
    412  <div id="aria_mixed_switch" role="switch" aria-checked="mixed">
    413    I am unsupported
    414  </div>
    415 
    416  <div id="aria_modal" aria-modal="true">modal stuff</div>
    417  <div id="aria_modal_false" aria-modal="false">non modal stuff</div>div>
    418  <div id="aria_multiline_textbox" role="textbox" aria-multiline="true"></div>
    419  <div id="aria_multiselectable_listbox" role="listbox" aria-multiselectable="true"></div>
    420  <div id="aria_multiselectable_tablist" role="tablist" aria-multiselectable="true"></div>
    421  <div id="aria_pressed_button" role="button" aria-pressed="true">Button</div>
    422  <button id="aria_pressed_native_button" aria-pressed="true">Button</button>
    423 
    424  <div id="aria_readonly_textbox"
    425       role="textbox" aria-readonly="true">This text should be readonly</div>
    426 
    427  <div id="aria_grid_default" role="grid">
    428    <div role="row">
    429      <div id="aria_grid_default_colheader_readonly"
    430           role="columnheader" aria-readonly="true">colheader1</div>
    431      <div id="aria_grid_default_colheader_inherited"
    432           role="columnheader">colheader2</div>
    433    </div>
    434    <div role="row">
    435      <div id="aria_grid_default_rowheader_readonly"
    436           role="rowheader" aria-readonly="true">rowheader1</div>
    437      <div id="aria_grid_default_rowheader_inherited"
    438           role="rowheader">rowheader2</div>
    439    </div>
    440    <div role="row">
    441      <div id="aria_grid_default_cell_readonly"
    442           role="gridcell" aria-readonly="true">gridcell1</div>
    443      <div id="aria_grid_default_cell_inherited"
    444           role="gridcell">gridcell2</div>
    445    </div>
    446  </div>
    447 
    448  <div id="aria_grid_readonly" role="grid" aria-readonly="true">
    449    <div role="row">
    450      <div id="aria_grid_readonly_colheader_editable"
    451           role="columnheader" aria-readonly="false">colheader1</div>
    452      <div id="aria_grid_readonly_colheader_inherited"
    453           role="columnheader">colheader2</div>
    454    </div>
    455    <div role="row">
    456      <div id="aria_grid_readonly_rowheader_editable"
    457           role="rowheader" aria-readonly="false">rowheader1</div>
    458      <div id="aria_grid_readonly_rowheader_inherited"
    459           role="rowheader">rowheader2</div>
    460    </div>
    461    <div role="row">
    462      <div id="aria_grid_readonly_cell_editable"
    463           role="gridcell" aria-readonly="false">gridcell1</div>
    464      <div id="aria_grid_readonly_cell_inherited"
    465           role="gridcell">gridcell2</div>
    466    </div>
    467  </div>
    468 
    469  <div id="aria_treegrid_default" role="grid">
    470    <div role="row">
    471      <div id="aria_treegrid_default_colheader_readonly"
    472           role="columnheader" aria-readonly="true">colheader1</div>
    473      <div id="aria_treegrid_default_colheader_inherited"
    474           role="columnheader">colheader2</div>
    475    </div>
    476    <div role="row">
    477      <div id="aria_treegrid_default_rowheader_readonly"
    478           role="rowheader" aria-readonly="true">rowheader1</div>
    479      <div id="aria_treegrid_default_rowheader_inherited"
    480           role="rowheader">rowheader2</div>
    481    </div>
    482    <div role="row">
    483      <div id="aria_treegrid_default_cell_readonly"
    484           role="gridcell" aria-readonly="true">gridcell1</div>
    485      <div id="aria_treegrid_default_cell_inherited"
    486           role="gridcell">gridcell2</div>
    487    </div>
    488  </div>
    489 
    490  <div id="aria_treegrid_readonly" role="grid" aria-readonly="true">
    491    <div role="row">
    492      <div id="aria_treegrid_readonly_colheader_editable"
    493           role="columnheader" aria-readonly="false">colheader1</div>
    494      <div id="aria_treegrid_readonly_colheader_inherited"
    495           role="columnheader">colheader2</div>
    496    </div>
    497    <div role="row">
    498      <div id="aria_treegrid_readonly_rowheader_editable"
    499           role="rowheader" aria-readonly="false">rowheader1</div>
    500      <div id="aria_treegrid_readonly_rowheader_inherited"
    501           role="rowheader">rowheader2</div>
    502    </div>
    503    <div role="row">
    504      <div id="aria_treegrid_readonly_cell_editable"
    505           role="gridcell" aria-readonly="false">gridcell1</div>
    506      <div id="aria_treegrid_readonly_cell_inherited"
    507           role="gridcell">gridcell2</div>
    508    </div>
    509  </div>
    510 
    511  <div role="listbox">
    512    <div id="aria_selectable_listitem" role="option" aria-selected="true">Item1</div>
    513  </div>
    514 
    515  <!-- Test that aria-disabled state gets propagated to all descendants -->
    516  <div id="group" role="group" aria-disabled="true">
    517    <button>hi</button>
    518    <div tabindex="0" role="listbox" aria-activedescendant="item1"
    519         aria-owns="item5">
    520      <div role="option" id="item1">Item 1</div>
    521      <div role="option" id="item2">Item 2</div>
    522      <div role="option" id="item3">Item 3</div>
    523      <div role="option" id="item4">Item 4</div>
    524    </div>
    525    <div role="slider" tabindex="0">A slider</div>
    526  </div>
    527  <div role="option" id="item5">Item 5</div>
    528 
    529  <!-- Test active state -->
    530  <div id="as_listbox" tabindex="0" role="listbox"
    531       aria-activedescendant="as_item1">
    532    <div role="option" id="as_item1">Item 1</div>
    533    <div role="option" id="as_item2">Item 2</div>
    534  </div>
    535 
    536  <!-- universal ARIA properties should be inherited by text field of file input -->
    537  <input type="file" id="fileinput"
    538         aria-busy="true"
    539         aria-disabled="true"
    540         aria-required="true"
    541         aria-haspopup="true"
    542         aria-invalid="true">
    543 
    544  <div id="offscreen_log" role="log" class="offscreen">
    545    <div id="aria_offscreen_textbox" role="textbox" aria-readonly="true">This text should be offscreen</div>
    546  </div>
    547 
    548  <a id="aria_menuitem_link" role="menuitem" href="foo">menuitem</a>
    549  <a id="aria_button_link" role="button" href="foo">button</a>
    550  <a id="aria_checkbox_link" role="checkbox" href="foo">checkbox</a>
    551 
    552  <!-- strange edge case: please don't do this in the wild -->
    553  <a id="aria_link_link" role="link" href="foo">link</a>
    554 
    555  <!-- landmarks: links -->
    556  <a id="aria_application_link" role="application" href="foo">app</a>
    557  <a id="aria_main_link" role="main" href="foo">main</a>
    558  <a id="aria_navigation_link" role="navigation" href="foo">nav</a>
    559 
    560  <!-- landmarks: anchors -->
    561  <a id="aria_application_anchor" role="application" name="app_anchor">app</a>
    562  <a id="aria_main_anchor" role="main" name="main_anchor">main</a>
    563  <a id="aria_navigation_anchor" role="navigation" name="nav_anchor">nav</a>
    564 
    565  <!-- aria-orientation -->
    566  <div id="aria_combobox" role="combobox">combobox</div>
    567  <div id="aria_hcombobox" role="combobox" aria-orientation="horizontal">horizontal combobox</div>
    568  <div id="aria_vcombobox" role="combobox" aria-orientation="vertical">vertical combobox</div>
    569  <div id="aria_listbox" role="listbox">listbox</div>
    570  <div id="aria_hlistbox" role="listbox" aria-orientation="horizontal">horizontal listbox</div>
    571  <div id="aria_vlistbox" role="listbox" aria-orientation="vertical">vertical listbox</div>
    572  <div id="aria_menu" role="menu">menu</div>
    573  <div id="aria_hmenu" role="menu" aria-orientation="horizontal">horizontal menu</div>
    574  <div id="aria_vmenu" role="menu" aria-orientation="vertical">vertical menu</div>
    575  <div id="aria_menubar" role="menubar">menubar</div>
    576  <div id="aria_hmenubar" role="menubar" aria-orientation="horizontal">horizontal menubar</div>
    577  <div id="aria_vmenubar" role="menubar" aria-orientation="vertical">vertical menubar</div>
    578  <div id="aria_radiogroup" role="radiogroup">radiogroup</div>
    579  <div id="aria_hradiogroup" role="radiogroup" aria-orientation="horizontal">horizontal radiogroup</div>
    580  <div id="aria_vradiogroup" role="radiogroup" aria-orientation="vertical">vertical radiogroup</div>
    581  <div id="aria_scrollbar" role="scrollbar">scrollbar</div>
    582  <div id="aria_hscrollbar" role="scrollbar" aria-orientation="horizontal">horizontal scrollbar</div>
    583  <div id="aria_vscrollbar" role="scrollbar" aria-orientation="vertical">vertical scrollbar</div>
    584  <div id="aria_separator" role="separator">separator</div>
    585  <div id="aria_hseparator" role="separator" aria-orientation="horizontal">horizontal separator</div>
    586  <div id="aria_vseparator" role="separator" aria-orientation="vertical">vertical separator</div>
    587  <div id="aria_slider" role="slider">slider</div>
    588  <div id="aria_hslider" role="slider" aria-orientation="horizontal">horizontal slider</div>
    589  <div id="aria_vslider" role="slider" aria-orientation="vertical">vertical slider</div>
    590 
    591  <div id="aria_tablist" role="tablist">tablist</div>
    592  <div id="aria_htablist" role="tablist" aria-orientation="horizontal">horizontal tablist</div>
    593  <div id="aria_vtablist" role="tablist" aria-orientation="vertical">vertical tablist</div>
    594  <div id="aria_toolbar" role="toolbar">toolbar</div>
    595  <div id="aria_htoolbar" role="toolbar" aria-orientation="horizontal">horizontal toolbar</div>
    596  <div id="aria_vtoolbar" role="toolbar" aria-orientation="vertical">vertical toolbar</div>
    597  <div id="aria_tree" role="tree">tree</div>
    598  <div id="aria_htree" role="tree" aria-orientation="horizontal">horizontal tree</div>
    599  <div id="aria_vtree" role="tree" aria-orientation="vertical">vertical tree</div>
    600  <div id="aria_treegrid" role="treegrid">treegrid</div>
    601  <div id="aria_htreegrid" role="treegrid" aria-orientation="horizontal">horizontal treegrid</div>
    602  <div id="aria_vtreegrid" role="treegrid" aria-orientation="vertical">vertical treegrid</div>
    603 
    604  <!-- indeterminate ARIA progressbars should expose mixed state -->
    605  <div id="aria_progressbar" role="progressbar"></div>
    606  <div id="aria_progressbar_valuenow" role="progressbar" aria-valuenow="1"></div>
    607  <div id="aria_progressbar_valuetext" role="progressbar" aria-valuetext="value"></div>
    608 
    609  <!-- ARIA select widget should expose focusable state regardless the way they manage its children -->
    610  <div id="aria_listbox" role="listbox">
    611    <div role="option" tabindex="0">A</div>
    612    <div role="option" tabindex="0">a</div>
    613  </div>
    614  <div id="aria_grid" role="grid">
    615    <div role="row"><div role="gridcell" tabindex="0">B</div></div></div>
    616    <div role="row"><div role="gridcell" tabindex="0">b</div></div></div>
    617  <div id="aria_tree" role="tree">
    618    <div role="treeitem" tabindex="0">C</div>
    619    <div role="treeitem" tabindex="0">c</div>
    620  </div>
    621  <div id="aria_treegrid" role="treegrid">
    622    <div role="row"><div role="gridcell" tabindex="0">D</div></div>
    623    <div role="row"><div role="gridcell" tabindex="0">d</div></div>
    624  </div>
    625  <div id="aria_listbox_disabled" role="listbox" aria-disabled="true">
    626    <div role="option">E</div>
    627    <div role="option">e</div>
    628  </div>
    629  <div id="aria_grid_disabled" role="grid" aria-disabled="true">
    630    <div role="row"><div role="gridcell">F</div></div>
    631    <div role="row"><div role="gridcell">f</div></div>
    632  </div>
    633  <div id="aria_tree_disabled" role="tree" aria-disabled="true">
    634    <div role="treeitem">G</div>
    635    <div role="treeitem">g</div>
    636  </div>
    637  <div id="aria_treegrid_disabled" role="treegrid" aria-disabled="true">
    638    <div role="row"><div role="gridcell">H</div></div>
    639    <div role="row"><div role="gridcell">h</div></div>
    640  </div>
    641 
    642  <!-- Test that directory is readonly -->
    643  <div id="aria_directory" role="directory"></div>
    644 
    645  <!-- aria-current -->
    646  <div id="current_page_1" role="link" aria-current="page">1</div>
    647  <div id="page_2" role="link" aria-current="false">2</div>
    648  <div id="page_3" role="link">3</div>
    649  <div id="page_4" role="link" aria-current="">4</div>
    650  <div id="current_foo" aria-current="foo">foo</div>
    651 </body>
    652 </html>