| <!DOCTYPE html> |
| <html> |
| <body> |
| <script src="../../resources/js-test.js"></script> |
| <script src="../../resources/accessibility-helper.js"></script> |
| <div class="control">Panel 1</div> |
| <div class="control">Panel 2</div> |
| <div id="host"></div> |
| <script> |
| |
| class CustomTabElement extends HTMLElement { |
| constructor() |
| { |
| super(); |
| window.internals = this.attachInternals(); |
| internals.role = 'tab'; |
| internals.ariaControlsElements = Array.from(document.querySelectorAll('.control')); |
| shouldBe('internals.ariaControlsElements.length', '2'); |
| shouldBe('internals.ariaControlsElements[0]', 'document.querySelectorAll(".control")[0]'); |
| shouldBe('internals.ariaControlsElements[1]', 'document.querySelectorAll(".control")[1]'); |
| } |
| }; |
| customElements.define('custom-tab', CustomTabElement); |
| |
| const customElement = new CustomTabElement; |
| customElement.id = 'custom-tab'; |
| const shadowRoot = host.attachShadow({'mode': 'closed'}); |
| shadowRoot.appendChild(customElement); |
| |
| description("This tests that ElementInternals.ariaControlsElements can reference nodes outside the shadow tree."); |
| if (!window.accessibilityController) |
| debug('This test requires accessibilityController'); |
| else { |
| function labelForControl(control) { |
| if (accessibilityController.platformName == "mac") |
| return control.childAtIndex(0).stringValue; |
| return control.stringValue; |
| } |
| window.customTab = accessibilityController.accessibleElementById('custom-tab'); |
| shouldBeEqualToString('labelForControl(customTab.ariaControlsElementAtIndex(0))', 'AXValue: Panel 1'); |
| shouldBeEqualToString('labelForControl(customTab.ariaControlsElementAtIndex(1))', 'AXValue: Panel 2'); |
| } |
| |
| </script> |
| </body> |
| </html> |