| <!DOCTYPE HTML> |
| <script src="../resources/gc.js"></script> |
| <script src="../resources/testharness.js"></script> |
| <script src="../resources/testharnessreport.js"></script> |
| |
| <!-- |
| |
| Accessibility Object Model |
| Explainer: https://github.com/WICG/aom/blob/gh-pages/explainer.md |
| Spec: https://wicg.github.io/aom/spec/ |
| |
| --> |
| |
| <div role="listbox" id="listbox" aria-label="container"> |
| <div role="option" id="option1">Option 1</div> |
| <div role="option" id="option2">Option 2</div> |
| <div role="option" id="option3">Option 3</div> |
| </div> |
| |
| <script> |
| |
| test(function(t) { |
| assert_true(internals.runtimeFlags.accessibilityObjectModelEnabled); |
| }, "Make sure that Accessibility Object Model is enabled"); |
| |
| promise_test(async function(test) { |
| var child_element = document.getElementById("option1"); |
| var parent_element = document.getElementById("listbox"); |
| var requestedChildNode = await window.getComputedAccessibleNode(child_element); |
| var requestedParentNode = await window.getComputedAccessibleNode(parent_element); |
| |
| var computedParent = requestedChildNode.parent; |
| assert_false(computedParent === null); |
| assert_true(computedParent === requestedParentNode); |
| assert_equals(computedParent.name, "container"); |
| |
| // TODO(meredith): Investigate test case for non-existent parent. |
| }, "ComputedAccessibleNode.parent."); |
| |
| promise_test(async function(test) { |
| var parent_element = document.getElementById("listbox"); |
| var requestedParentNode = await window.getComputedAccessibleNode(parent_element); |
| var child_element = document.getElementById("option1"); |
| var requestedChildNode = await window.getComputedAccessibleNode(child_element); |
| |
| var computedChild = requestedParentNode.firstChild; |
| assert_false(computedChild === null); |
| assert_equals(computedChild.name, "Option 1"); |
| assert_equals(computedChild, requestedChildNode); |
| |
| // Check that the option's first child is a text node of same name. |
| assert_false(computedChild.firstChild === null); |
| assert_equals(computedChild.firstChild.name, "Option 1"); |
| |
| // Check that a call to non-existent child is null |
| assert_equals(computedChild.firstChild.firstChild, null); |
| }, "ComputedAccessibleNode.firstChild."); |
| |
| promise_test(async function(test) { |
| var parent_element = document.getElementById("listbox"); |
| var requestedParentNode = await window.getComputedAccessibleNode(parent_element); |
| var child_element = document.getElementById("option3"); |
| var requestedChildNode = await window.getComputedAccessibleNode(child_element); |
| |
| var computedChild = requestedParentNode.lastChild; |
| assert_equals(computedChild, requestedChildNode); |
| assert_false(computedChild === null); |
| assert_equals(computedChild.name, "Option 3"); |
| |
| // Check that the option's first child is a text node of same name. |
| assert_false(computedChild.firstChild === null); |
| assert_equals(computedChild.firstChild.name, "Option 3"); |
| |
| // Check that a call to non-existent child is null |
| assert_equals(computedChild.firstChild.firstChild, null); |
| }, "ComputedAccessibleNode.lastChild."); |
| |
| promise_test(async function(test) { |
| var middleChild = document.getElementById("option2"); |
| var requestedMiddleChildNode = await window.getComputedAccessibleNode(middleChild); |
| var firstBorn = document.getElementById("option1"); |
| var requestedFirstBorn = await window.getComputedAccessibleNode(firstBorn) |
| |
| var computedSibling = requestedMiddleChildNode.previousSibling; |
| assert_false(computedSibling === null); |
| assert_true(computedSibling === requestedFirstBorn); |
| assert_equals(computedSibling.name, "Option 1"); |
| |
| // Check that a call to non-existent sibling is null. |
| assert_equals(computedSibling.previousSibling, null); |
| }, "ComputedAccessibleNode.previousSibling"); |
| |
| promise_test(async function(test) { |
| var middleChild = document.getElementById("option2"); |
| var requestedMiddleChildNode = await window.getComputedAccessibleNode(middleChild); |
| var youngestChild = document.getElementById("option3"); |
| var requestedYoungestNode = await window.getComputedAccessibleNode(youngestChild) |
| |
| var computedSibling = requestedMiddleChildNode.nextSibling; |
| assert_false(computedSibling === null); |
| assert_true(computedSibling === requestedYoungestNode); |
| assert_equals(computedSibling.name, "Option 3"); |
| |
| // Check that a call to non-existent sibling is null. |
| assert_equals(computedSibling.nextSibling, null); |
| }, "ComputedAccessibleNode.nextSibling"); |
| |
| </script> |
| |