| <html> |
| <head> |
| <script src="../resources/js-test.js"></script> |
| <script> |
| jsTestIsAsync = true; |
| |
| function runTest() { |
| description("This tests that navigating in a multiselect list updates selection and the active selected option and sends a notification."); |
| |
| if (window.accessibilityController) { |
| var menulist = document.getElementById("menulist"); |
| menulist.focus(); |
| window.accessibleMenulist = accessibilityController.focusedElement; |
| window.accessibleOne = accessibleMenulist.childAtIndex(0); |
| window.accessibleTwo = accessibleMenulist.childAtIndex(1); |
| window.accessibleThree = accessibleMenulist.childAtIndex(2); |
| |
| function listListener(notification) { |
| document.getElementById("console").innerText += "List notification: " + notification + "\n"; |
| } |
| accessibleMenulist.addNotificationListener(listListener); |
| |
| shouldBe("accessibleOne.isSelected", "true"); |
| shouldBe("accessibleOne.isSelectedOptionActive", "true"); |
| shouldBe("accessibleTwo.isSelected", "false"); |
| shouldBe("accessibleTwo.isSelectedOptionActive", "false"); |
| shouldBe("accessibleThree.isSelected", "false"); |
| shouldBe("accessibleThree.isSelectedOptionActive", "false"); |
| |
| // Change the selected index by simulating a down arrow keydown event. |
| var event = document.createEvent('KeyboardEvents'); |
| event.initKeyboardEvent('keydown', true, true, document.defaultView, 'Down', 0, false, false, false, false, false); |
| menulist.dispatchEvent(event); |
| |
| shouldBe("accessibleOne.isSelected", "false"); |
| shouldBe("accessibleOne.isSelectedOptionActive", "false"); |
| shouldBe("accessibleTwo.isSelected", "true"); |
| shouldBe("accessibleTwo.isSelectedOptionActive", "true"); |
| shouldBe("accessibleThree.isSelected", "false"); |
| shouldBe("accessibleThree.isSelectedOptionActive", "false"); |
| |
| // Extend the selection by simulating a Shift + Down Arrow keydown event. |
| var event = document.createEvent('KeyboardEvents'); |
| event.initKeyboardEvent('keydown', true, true, document.defaultView, 'Down', 0, false, false, true, false, false); |
| menulist.dispatchEvent(event); |
| |
| shouldBe("accessibleOne.isSelected", "false"); |
| shouldBe("accessibleOne.isSelectedOptionActive", "false"); |
| shouldBe("accessibleTwo.isSelected", "true"); |
| shouldBe("accessibleTwo.isSelectedOptionActive", "false"); |
| shouldBe("accessibleThree.isSelected", "true"); |
| shouldBe("accessibleThree.isSelectedOptionActive", "true"); |
| } |
| |
| // Make the test finish quickly whether we get the notification or not. |
| window.setTimeout(function() { |
| if (window.accessibilityController) |
| accessibleMenulist.removeNotificationListener(); |
| finishJSTest(); |
| }, 10); |
| } |
| |
| window.addEventListener('load', function() { |
| setTimeout(runTest, 10); |
| }, false); |
| </script> |
| </head> |
| <body> |
| |
| <select multiple id="menulist"> |
| <option selected>One</option> |
| <option>Two</option> |
| <option>Three</option> |
| <option>Four</option> |
| </select> |
| |
| <p id="description"></p> |
| <div id="console"></div> |
| |
| </body> |
| </html> |