| OLD | NEW |
| (Empty) | |
| 1 <!DOCTYPE html> |
| 2 <script src="../resources/testharness.js"></script> |
| 3 <script src="../resources/testharnessreport.js"></script> |
| 4 |
| 5 <div id="contenteditable-textbox" role="textbox" contenteditable="true" |
| 6 aria-expanded="true" aria-haspopup="true" aria-autocomplete="list" |
| 7 aria-activedescendant="list1-option1"> |
| 8 <ul id="list1" role="listbox" style="display: none;"> |
| 9 <li id="list1-option1" role="option">Option 1</li> |
| 10 <li id="list1-option2" role="option">Option 2</li> |
| 11 <li id="list1-option3" role="option">Option 3</li> |
| 12 </ul> |
| 13 </div> |
| 14 |
| 15 <input id="input-textbox" role="textbox" type="text" aria-expanded="true" |
| 16 aria-haspopup="true" aria-autocomplete="list" |
| 17 aria-activedescendant="list2-option1" aria-owns="list2"> |
| 18 |
| 19 <ul id="list2" role="listbox" style="display: none;"> |
| 20 <li id="list2-option1" role="option">Option 1</li> |
| 21 <li id="list2-option2" role="option">Option 2</li> |
| 22 <li id="list2-option3" role="option">Option 3</li> |
| 23 </ul> |
| 24 |
| 25 <input id="input-combobox" role="combobox" type="search" aria-expanded="true" |
| 26 aria-haspopup="true" aria-autocomplete="list" |
| 27 aria-activedescendant="list3-option1" aria-owns="list3"> |
| 28 |
| 29 <ul id="list3" role="listbox" style="display: none;"> |
| 30 <li id="list3-option1" role="option">Option 1</li> |
| 31 <li id="list3-option2" role="option">Option 2</li> |
| 32 <li id="list3-option3" role="option">Option 3</li> |
| 33 </ul> |
| 34 |
| 35 <textarea id="textarea-searchbox" role="searchbox" aria-expanded="true" |
| 36 aria-haspopup="true" aria-autocomplete="list" |
| 37 aria-activedescendant="list4-option1" aria-owns="list4"></textarea> |
| 38 |
| 39 <ul id="list4" role="listbox" style="display: none;"> |
| 40 <li id="list4-option1" role="option">Option 1</li> |
| 41 <li id="list4-option2" role="option">Option 2</li> |
| 42 <li id="list4-option3" role="option">Option 3</li> |
| 43 </ul> |
| 44 |
| 45 <script> |
| 46 function testExpectations(widgetId, listboxId) |
| 47 { |
| 48 var listbox = document.getElementById(listboxId); |
| 49 listbox.style.display = "block"; |
| 50 var widget = document.getElementById(widgetId); |
| 51 widget.focus(); |
| 52 |
| 53 var axWidget = accessibilityController.accessibleElementById(widgetId); |
| 54 var axListbox = accessibilityController.accessibleElementById(listboxId)
; |
| 55 var option1 = accessibilityController.accessibleElementById(listboxId +
"-option1"); |
| 56 var option2 = accessibilityController.accessibleElementById(listboxId +
"-option2"); |
| 57 var option3 = accessibilityController.accessibleElementById(listboxId +
"-option3"); |
| 58 |
| 59 assert_true(axWidget.isExpanded, widgetId + ".isExpanded"); |
| 60 assert_true(axWidget.hasPopup, widgetId + ".hasPopup"); |
| 61 // According to the ARIA Spec, the presence of aria-activedescendant |
| 62 // should make all children with a valid ID focusable. |
| 63 assert_true(axListbox.isFocusable, listboxId + ".isFocusable"); |
| 64 assert_true(option1.isFocusable, listboxId + "-option1.isFocusable"); |
| 65 assert_true(option1.isSelectable, listboxId + "-option1.isSelectable"); |
| 66 assert_true(option2.isFocusable, listboxId + "-option2.isFocusable"); |
| 67 assert_true(option2.isSelectable, listboxId + "-option2.isSelectable"); |
| 68 assert_true(option3.isFocusable, listboxId + "-option3.isFocusable"); |
| 69 assert_true(option3.isSelectable, listboxId + "-option3.isSelectable"); |
| 70 |
| 71 assert_true(axWidget.isFocused, widgetId + ".isFocused"); |
| 72 assert_true(option1.isSelected, listboxId + "-option1.isSelected"); |
| 73 |
| 74 widget.setAttribute("aria-activedescendant", listboxId + "-option2"); |
| 75 assert_false(option1.isSelected, listboxId + "-option1.isSelected"); |
| 76 assert_true(axWidget.isFocused, widgetId + ".isFocused"); |
| 77 assert_true(option2.isSelected, listboxId + "-option2.isSelected"); |
| 78 |
| 79 widget.setAttribute("aria-activedescendant", listboxId + "-option3"); |
| 80 assert_false(option2.isSelected, listboxId + "-option2.isSelected"); |
| 81 assert_true(axWidget.isFocused, widgetId + ".isFocused"); |
| 82 assert_true(option3.isSelected, listboxId + "-option3.isSelected"); |
| 83 |
| 84 widget.removeAttribute("aria-activedescendant"); |
| 85 assert_true(axWidget.isFocused, widgetId + ".isFocused"); |
| 86 assert_false(option3.isSelected, listboxId + "-option3.isSelected"); |
| 87 |
| 88 listbox.style.display = "none"; |
| 89 widget.style.display = "none"; |
| 90 } |
| 91 </script> |
| 92 |
| 93 <script> |
| 94 test(function() |
| 95 { |
| 96 testExpectations("contenteditable-textbox", "list1"); |
| 97 }, "Changing active descendant on a content editable."); |
| 98 </script> |
| 99 |
| 100 <script> |
| 101 test(function() |
| 102 { |
| 103 testExpectations("input-textbox", "list2"); |
| 104 }, "Changing active descendant on an input with role=textbox."); |
| 105 </script> |
| 106 |
| 107 <script> |
| 108 test(function() |
| 109 { |
| 110 testExpectations("input-combobox", "list3"); |
| 111 }, "Changing active descendant on an input of type=search with role=combobox
."); |
| 112 </script> |
| 113 |
| 114 <script> |
| 115 test(function() |
| 116 { |
| 117 testExpectations("textarea-searchbox", "list4"); |
| 118 }, "Changing active descendant on a textarea with role=searchbox."); |
| 119 </script> |
| OLD | NEW |