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