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>