Chromium Code Reviews| Index: third_party/WebKit/LayoutTests/accessibility/aom.html |
| diff --git a/third_party/WebKit/LayoutTests/accessibility/aom.html b/third_party/WebKit/LayoutTests/accessibility/aom.html |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..03be0f691dd94ad6195bd0f0c601065d68d13f33 |
| --- /dev/null |
| +++ b/third_party/WebKit/LayoutTests/accessibility/aom.html |
| @@ -0,0 +1,165 @@ |
| +<!DOCTYPE HTML> |
| +<script src="../resources/testharness.js"></script> |
| +<script src="../resources/testharnessreport.js"></script> |
| + |
| +<!-- |
| + |
| +Accessibility Object Model |
| +Explainer: https://github.com/WICG/aom/blob/master/explainer.md |
| +Spec: https://wicg.github.io/aom/spec/ |
| + |
| +--> |
| + |
| +<button id="button">Click Me</button> |
| + |
| +<script> |
| +if (window.internals) |
| + internals.runtimeFlags.accessibilityObjectModelEnabled = true; |
| + |
| +test(function(t) { |
| + var button = document.getElementById("button"); |
| + assert_equals(button.nodeType, Node.ELEMENT_NODE); |
| + assert_not_equals(button.accessibleNode, null); |
| +}, "DOM Elements have an AccessibleNode"); |
| + |
| +test(function(t) { |
| + var button = document.getElementById("button"); |
| + var staticText = button.firstChild; |
| + assert_equals(staticText.nodeType, Node.TEXT_NODE); |
| + assert_not_equals(staticText.accessibleNode, null); |
| +}, "DOM Text nodes do not have an AccessibleNode."); |
| + |
| +test(function(t) { |
| + var button = document.getElementById("button"); |
| + var aomButton = button.accessibleNode; |
| + |
| + assert_equals(aomButton.role, null); |
| + assert_equals(aomButton.label, null); |
| + assert_equals(aomButton.foo, undefined); |
| + assert_equals(aomButton.bar, undefined); |
| +}, "Supported properties on an AccessibleNode are all null by default"); |
| + |
| +test(function(t) { |
| + var button = document.getElementById("button"); |
| + var aomButton = button.accessibleNode; |
| + var axButton = accessibilityController.accessibleElementById("button"); |
| + |
| + button.setAttribute("role", "checkbox"); |
| + button.setAttribute("aria-label", "Check Me"); |
| + |
| + assert_equals(axButton.role, "AXRole: AXCheckBox"); |
| + assert_equals(axButton.name, "Check Me"); |
| + |
| + assert_equals(aomButton.role, "checkbox"); |
| + assert_equals(aomButton.label, "Check Me"); |
| +}, "ARIA attributes are reflected into AOM properties"); |
| + |
| +test(function(t) { |
| + var button = document.getElementById("button"); |
| + var aomButton = button.accessibleNode; |
| + var axButton = accessibilityController.accessibleElementById("button"); |
| + |
| + button.setAttribute("role", "beyonce"); |
| + |
| + assert_equals(axButton.role, "AXRole: AXButton"); |
| + |
| + assert_equals(aomButton.role, "beyonce"); |
| +}, "Invalid ARIA roles are still reflected into AOM properties"); |
| + |
| +test(function(t) { |
| + var button = document.getElementById("button"); |
| + var aomButton = button.accessibleNode; |
| + var axButton = accessibilityController.accessibleElementById("button"); |
| + |
| + aomButton.role = "slider"; |
| + assert_equals(aomButton.role, "slider"); |
| + assert_equals(axButton.role, "AXRole: AXSlider"); |
| +}, "Test setting AccessibleNode.role"); |
| + |
| +test(function(t) { |
| + var button = document.getElementById("button"); |
| + var aomButton = button.accessibleNode; |
| + var axButton = accessibilityController.accessibleElementById("button"); |
| + |
| + button.removeAttribute("role"); |
| + aomButton.role = null; |
| + assert_equals(aomButton.role, null); |
| + assert_equals(axButton.role, "AXRole: AXButton"); |
| + |
| + aomButton.role = "doctor"; |
| + assert_equals(aomButton.role, "doctor"); |
| + assert_equals(axButton.role, "AXRole: AXButton"); |
| +}, "An invalid role should be ignored if there's no ARIA."); |
| + |
| +test(function(t) { |
| + var button = document.getElementById("button"); |
| + var aomButton = button.accessibleNode; |
| + var axButton = accessibilityController.accessibleElementById("button"); |
| + |
| + aomButton.role = "switch checkbox"; |
| + assert_equals(aomButton.role, "switch checkbox"); |
| + assert_equals(axButton.role, "AXRole: AXSwitch"); |
| + |
| + aomButton.role = "tickbox checkbox"; |
| + assert_equals(aomButton.role, "tickbox checkbox"); |
| + assert_equals(axButton.role, "AXRole: AXCheckBox"); |
| +}, "Fallback roles are supported."); |
| + |
| +test(function(t) { |
| + var button = document.getElementById("button"); |
| + var aomButton = button.accessibleNode; |
| + var axButton = accessibilityController.accessibleElementById("button"); |
| + |
| + button.removeAttribute("aria-label"); |
| + aomButton.label = "New Label"; |
| + assert_equals(aomButton.label, "New Label"); |
| + assert_equals(axButton.name, "New Label"); |
| +}, "Test setting AccessibleNode.label"); |
| +</script> |
| + |
| +<button id="button2">Click Me</button> |
| + |
| +<script> |
| +test(function(t) { |
| + var button = document.getElementById("button2"); |
| + var aomButton = button.accessibleNode; |
| + var axButton = accessibilityController.accessibleElementById("button2"); |
| + |
| + button.setAttribute("role", "textbox"); |
| + button.setAttribute("aria-label", "ARIA"); |
| + assert_equals(axButton.role, "AXRole: AXTextField"); |
| + assert_equals(axButton.name, "ARIA"); |
| + |
| + aomButton.role = "radio"; |
| + aomButton.label = "AOM"; |
| + assert_equals(axButton.role, "AXRole: AXRadioButton"); |
| + assert_equals(axButton.name, "AOM"); |
| +}, "Test that AOM properties override ARIA attributes"); |
| +</script> |
| + |
| +<button id="button3">Click Me</button> |
| + |
| +<script> |
| +test(function(t) { |
| + var button = document.getElementById("button3"); |
| + var aomButton = button.accessibleNode; |
| + var axButton = accessibilityController.accessibleElementById("button3"); |
| + assert_equals(axButton.role, "AXRole: AXButton"); |
| + assert_equals(axButton.name, "Click Me"); |
| + |
| + button.setAttribute("role", "textbox"); |
| + button.setAttribute("aria-label", "ARIA"); |
| + assert_equals(axButton.role, "AXRole: AXTextField"); |
| + assert_equals(axButton.name, "ARIA"); |
| + |
| + aomButton.role = "radio"; |
| + aomButton.label = "AOM"; |
| + assert_equals(axButton.role, "AXRole: AXRadioButton"); |
| + assert_equals(axButton.name, "AOM"); |
|
aboxhall
2017/03/23 04:34:23
Add a case checking that setting the attribute to
dmazzoni
2017/03/23 17:06:48
Good idea, done.
|
| + |
| + aomButton.role = null; |
| + aomButton.label = null; |
| + assert_equals(axButton.role, "AXRole: AXButton"); |
| + assert_equals(axButton.name, "Click Me"); |
| +}, "Once an AOM property has been set, ARIA no longer has any effect"); |
| +</script> |