blob: 08ebf73ebd27bdad3a93e5db19a6859f5cc92886 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../resources/js-test-pre.js"></script>
<script src="../resources/accessibility-helper.js"></script>
</head>
<body id="body">
<!-- Example 1: controls a list -->
<input type="text" role="combobox" id="combobox1" aria-controls="list1" aria-label="Combobox1">
<div role="list" id="list1" aria-label="List1">
<div role="listitem" id="item1_1">item1</div>
<div role="listitem" id="item1_2">item2</div>
</div>
<!-- Example 2: owns a listbox -->
<input type="text" role="combobox" id="combobox2" aria-owns="listbox2" aria-label="Combobox2">
<div role="listbox" id="listbox2" aria-label="Listbox2">
<div role="option" id="option2_1">item1</div>
<div role="option" id="option2_2">item2</div>
</div>
<!-- Example 3: owns a grid -->
<input type="text" role="combobox" id="combobox3" aria-owns="grid3" aria-label="Combobox3">
<div role="grid" id="grid3" aria-label="Grid3">
<div role="row" id="row3_1">
<div role="gridcell" id="gridcell3_1">cell1</div>
</div>
</div>
<!-- Example 3: owns a tree -->
<input type="text" role="combobox" id="combobox4" aria-owns="tree4" aria-label="Combobox4">
<div role="tree" id="tree4" aria-label="Tree4">
<div role="treeitem" id="treeitem4_1">treeitem1</div>
<div role="treeitem" id="treeitem4_2">treeitem2</div>
</div>
<p id="description"></p>
<div id="console"></div>
<script>
description("This tests variations of the comboboxes and elements it can control and own. Then verifies the active-descendant is reflected correctly.");
if (window.accessibilityController) {
window.jsTestIsAsync = true;
var selectedChildrenChangeCount = 0;
window.accessibilityController.addNotificationListener(function (target, notification) {
if (notification == "AXSelectedChildrenChanged" || notification == "AXSelectedRowsChanged") {
selectedChildrenChangeCount++;
var targetString = platformValueForW3CName(target);
debug("Received " + notification + " for " + targetString);
}
});
// Example 1: aria-controls a list.
document.getElementById("combobox1").focus();
var list = accessibilityController.accessibleElementById("list1");
shouldBe("list.selectedChildrenCount", "0");
// Set active-descendant, verify notification is sent and that list has correct selected children.
document.getElementById("combobox1").setAttribute("aria-activedescendant", "item1_1");
var listitem1 = accessibilityController.accessibleElementById("item1_1");
setTimeout(async function() {
debug("list has " + list.selectedChildrenCount + " selected children");
debug(list.selectedChildAtIndex(0).isEqual(listitem1)
? "PASS list.selectedChildAtIndex(0) is listitem1"
: "FAIL list.selectedChildAtIndex(0) is not listitem1");
// Example 2: aria-owns a listbox.
document.getElementById("combobox2").focus();
var listbox = accessibilityController.accessibleElementById("listbox2");
debug("listbox has " + listbox.selectedChildrenCount + " selected children");
// Set active-descendant, verify notification is sent and that list has correct selected children.
document.getElementById("combobox2").setAttribute("aria-activedescendant", "option2_1");
var option2_1 = accessibilityController.accessibleElementById("option2_1");
await waitFor(() => {
return selectedChildrenChangeCount == 2 && listbox.selectedChildrenCount;
});
debug("listbox has " + listbox.selectedChildrenCount + " selected children");
debug(listbox.selectedChildAtIndex(0).isEqual(option2_1)
? "PASS listbox.selectedChildAtIndex(0) is option2_1"
: "FAIL listbox.selectedChildAtIndex(0) is not option2_1");
// Example 3: aria-owns a grid.
document.getElementById("combobox3").focus();
var grid = accessibilityController.accessibleElementById("grid3");
debug("grid has " + grid.selectedChildrenCount + " selected children");
// Set active-descendant, verify notification is sent and that list has correct selected children.
document.getElementById("combobox3").setAttribute("aria-activedescendant", "row3_1");
var row3_1 = accessibilityController.accessibleElementById("row3_1");
await waitFor(() => {
return selectedChildrenChangeCount == 3 && grid.selectedChildrenCount;
});
debug("grid has " + grid.selectedChildrenCount + " selected children");
debug(grid.selectedChildAtIndex(0).isEqual(row3_1)
? "PASS grid.selectedChildAtIndex(0) is row3_1"
: "FAIL grid.selectedChildAtIndex(0) is not row3_1");
// Example 4: aria-owns a tree.
document.getElementById("combobox4").focus();
var tree = accessibilityController.accessibleElementById("tree4");
debug("tree has " + tree.selectedChildrenCount + " selected children");
// Set active-descendant, verify notification is sent and that list has correct selected children.
document.getElementById("combobox4").setAttribute("aria-activedescendant", "treeitem4_1");
var treeitem4_1 = accessibilityController.accessibleElementById("treeitem4_1");
await waitFor(() => {
return selectedChildrenChangeCount == 4 && tree.selectedChildrenCount;
});
debug("tree has " + tree.selectedChildrenCount + " selected children");
debug(tree.selectedChildAtIndex(0).isEqual(treeitem4_1)
? "PASS tree.selectedChildAtIndex(0) is treeitem4_1"
: "FAIL tree.selectedChildAtIndex(0) is not treeitem4_1");
accessibilityController.removeNotificationListener();
finishJSTest();
}, 0);
}
</script>
<script src="../resources/js-test-post.js"></script>
</body>
</html>