| <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> |
| <html> |
| <head> |
| <script src="../resources/js-test-pre.js"></script> |
| <script src="../resources/accessibility-helper.js"></script> |
| </head> |
| <body> |
| |
| <table role="grid"> |
| <tbody> |
| <tr role="row"> |
| <td id="selectable" role="gridcell" aria-selected="false">This cell is not aria-selected.</td> |
| <td role="gridcell">XYZ</td> |
| </tr> |
| </tbody> |
| </table> |
| |
| <p id="description"></p> |
| <div id="console"></div> |
| |
| <script> |
| description("This test ensures that the AXSelectedStateChanged notification is fired when the value for the aria-selected attribute changes in grid cells."); |
| |
| function toggleAriaSelectedState() { |
| var selectable = document.getElementById("selectable"); |
| var isSelected = selectable.getAttribute('aria-selected') === 'true'; |
| selectable.setAttribute('aria-selected', !isSelected); |
| selectable.textContent = isSelected ? "This is not aria-selected." : "This is aria-selected."; |
| }; |
| selectable.addEventListener('click', toggleAriaSelectedState); |
| |
| if (window.accessibilityController) { |
| window.jsTestIsAsync = true; |
| var platform = accessibilityController.platformName; |
| |
| var notificationCount = 0; |
| accessibilityController.addNotificationListener((axElement, notification) => { |
| if (notification != "AXSelectedCellsChanged") |
| return; |
| |
| debug(`${++notificationCount} ${notification} for element ${axElement.domIdentifier}`); |
| }); |
| |
| var axSelectable = accessibilityController.accessibleElementById("selectable"); |
| shouldBeFalse("axSelectable.isSelected"); |
| // On iOS, the cell element is not exposed to clients, but instead its content. |
| // So make sure that the selected state of the contained static text matches the state of the cell. |
| if (platform == "ios") |
| shouldBeFalse("axSelectable.children[0].isSelected"); |
| |
| axSelectable.press(); |
| setTimeout(async () => { |
| await waitFor(() => { |
| return notificationCount == 1 && axSelectable.isSelected; |
| }); |
| shouldBeTrue("axSelectable.isSelected"); |
| if (platform == "ios") |
| shouldBeTrue("axSelectable.children[0].isSelected"); |
| |
| axSelectable.press(); |
| await waitFor(() => { |
| return notificationCount == 2; |
| }); |
| shouldBeFalse("axSelectable.isSelected"); |
| if (platform == "ios") |
| shouldBeFalse("axSelectable.children[0].isSelected"); |
| |
| finishJSTest(); |
| }, 0); |
| } |
| </script> |
| <script src="../resources/js-test-post.js"></script> |
| </body> |
| </html> |