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..3183726388af574f8b88949cd0ea02795760ccbd |
| --- /dev/null |
| +++ b/third_party/WebKit/LayoutTests/accessibility/aom.html |
| @@ -0,0 +1,215 @@ |
| +<!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/ |
| + |
| +--> |
| + |
| +<script> |
| +function gc() |
|
esprehn
2017/03/28 21:39:58
Is this not in the testharness.js somewhere? Can y
dmazzoni
2017/03/29 07:00:42
Ah, found something in resources/gc.js. I filed ht
|
| +{ |
| + if (window.GCController) |
| + return GCController.collect(); |
| + |
| + // Force garbage collection (FF requires about 9K allocations |
| + // before a collect) |
| + for (var i = 0; i < 10000; i++) { |
| + var s = new String("abc"); |
| + } |
| +} |
| +</script> |
| + |
| +<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"); |
| + |
| + aomButton.role = null; |
| + aomButton.label = null; |
| + assert_equals(axButton.role, "AXRole: AXButton"); |
| + assert_equals(axButton.name, "Click Me"); |
| + |
| + button.setAttribute("role", "combobox"); |
| + button.setAttribute("aria-label", "ARIA 2"); |
| + 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> |
| + |
| +<button id="button4">Click Me</button> |
| + |
| +<script> |
| +test(function(t) { |
| + var aomButton; |
| + (function() { |
| + var button = document.getElementById("button4"); |
| + button.setAttribute("role", "checkbox"); |
| + button.setAttribute("aria-label", "Check Me"); |
| + aomButton = button.accessibleNode; |
| + })(); |
| + assert_equals(aomButton.role, "checkbox"); |
| + assert_equals(aomButton.label, "Check Me"); |
| + |
| + (function() { |
| + var button = document.getElementById("button4"); |
| + button.parentElement.removeChild(button); |
| + })(); |
| + gc(); |
| + |
| + assert_equals(aomButton.role, null); |
| + assert_equals(aomButton.label, null); |
|
esprehn
2017/03/28 21:39:58
This is leaking gc behavior, the AOMObject needs t
dmazzoni
2017/03/29 07:00:42
Done.
|
| + |
| + aomButton.role = "checkbox"; |
| + aomButton.label = "Check Me"; |
| + |
| + assert_equals(aomButton.role, null); |
| + assert_equals(aomButton.label, null); |
| +}, "No crash if AccessibleNode outlives its element."); |
| +</script> |