| <!DOCTYPE HTML> |
| <script src="../resources/testharness.js"></script> |
| <script src="../resources/testharnessreport.js"></script> |
| <body> |
| |
| <script> |
| class TestElement extends HTMLElement { |
| constructor() { |
| super(); |
| this._internals = this.attachInternals(); |
| } |
| |
| get internals() { |
| return this._internals; |
| } |
| |
| set internals(val) { |
| throw "Can't set internals!"; |
| } |
| } |
| customElements.define("test-element", TestElement); |
| |
| function createTestElement(id) { |
| const element = document.createElement("test-element"); |
| element.id = id; |
| document.body.appendChild(element); |
| return element; |
| } |
| |
| function axElementById(id) { |
| return accessibilityController.accessibleElementById(id); |
| } |
| |
| test(function(t) { |
| const element = createTestElement("test1"); |
| element.internals.role = "button"; |
| assert_equals(element.role, null); |
| assert_equals(element.internals.role, "button"); |
| assert_equals(axElementById("test1").role, "AXRole: AXButton"); |
| }, "Role set through element internals affects role in AX object, doesn't affect element.role"); |
| |
| test(function(t) { |
| const element = createTestElement("test2"); |
| element.internals.role = "button"; |
| assert_equals(element.role, null); |
| assert_equals(element.internals.role, "button"); |
| assert_equals(axElementById("test2").role, "AXRole: AXButton"); |
| element.role = "checkbox"; |
| assert_equals(element.internals.role, "button"); |
| assert_equals(axElementById("test2").role, "AXRole: AXCheckBox"); |
| }, "Role set through element internals can be overridden by element.role"); |
| |
| test(function(t) { |
| const element = createTestElement("test3"); |
| element.internals.role = "button"; |
| assert_equals(axElementById("test3").role, "AXRole: AXButton"); |
| element.internals.role = "checkbox"; |
| assert_equals(element.internals.role, "checkbox"); |
| assert_equals(axElementById("test3").role, "AXRole: AXCheckBox");; |
| }, "Role set through element internals can be changed."); |
| |
| </script> |
| </body> |