blob: 3aa29504fe3e7d094f83bc508107095c75bac8e5 [file] [edit]
<!DOCTYPE html>
<script src="../resources/js-test.js"></script>
<script src="../resources/accessibility-helper.js"></script>
<div id="panel1">First panel</div>
<div id="tab1" role="tab">Tab 1</div>
<div id="wrapper" tabindex="0">
<div class="panel">Second panel</div>
</div>
<div id="tab2" role="tab">Tab 2</div>
<div id="panel3">Third panel</div>
<x-tab></x-tab>
<div id="panel4">Fourth panel</div>
<div id="tab4" role="tab">Tab 4</div>
<x-custom></x-custom>
<script>
class XTab extends HTMLElement {
constructor() {
super();
this.attachShadow({ mode: "open" });
let tab = document.createElement("div");
tab.id = "innertab";
tab.role = "tab";
tab.textContent = "Tab 3";
tab.ariaControlsElements = [panel3];
this.shadowRoot.appendChild(tab);
}
}
customElements.define("x-tab", XTab);
class XCustom extends HTMLElement {
constructor() {
super();
this.attachShadow({ mode: "open" });
let panel = document.createElement("div");
panel.id = "panel5";
panel.textContent = "Fifth panel";
let tab = document.createElement("div");
tab.id = "tab5";
tab.role = "tab";
tab.textContent = "Tab 5";
this.shadowRoot.appendChild(panel);
this.shadowRoot.appendChild(tab);
tab.ariaControlsElements = [panel];
document.body.appendChild(panel);
}
}
customElements.define("x-custom", XCustom);
var output = "Checks that element reflection is exposed to the a11y tree for 'ariaControlsElements'\n";
if (window.accessibilityController) {
window.jsTestIsAsync = true
tab1.ariaControlsElements = [panel1];
var axPanel1, axTab1, wrapper, axPanel2, axTab2, axPanel3, axTab3, axPanel4, axTab4, axPanel5, axTab5;
axPanel1 = accessibilityController.accessibleElementById("panel1");
axTab1 = accessibilityController.accessibleElementById("tab1");
output += expect("axTab1.ariaControlsElementAtIndex(0).isEqual(axPanel1)", "true");
tab2.ariaControlsElements = [document.getElementsByClassName("panel")[0]];
setTimeout(async function() {
wrapper = accessibilityController.accessibleElementById("wrapper");
axPanel2 = wrapper.childAtIndex(0);
axTab2 = accessibilityController.accessibleElementById("tab2");
output += expect("axTab2.ariaControlsElementAtIndex(0).isEqual(axPanel2)", "true");
tab2.setAttribute("aria-controls", "panel1");
await waitFor(() => axTab2.ariaControlsElementAtIndex(0).isEqual(axPanel1));
output += expect("axTab2.ariaControlsElementAtIndex(0).isEqual(axPanel1)", "true");
axPanel3 = accessibilityController.accessibleElementById("panel3");
axTab3 = accessibilityController.accessibleElementById("innertab");
output += expect("axTab3.ariaControlsElementAtIndex(0).isEqual(axPanel3)", "true");
tab2.ariaControlsElements = [panel1, document.getElementsByClassName("panel")[0], panel3];
await waitFor(() => axTab2.ariaControlsElementAtIndex(1) != null);
output += expect("axTab2.ariaControlsElementAtIndex(0).isEqual(axPanel1)", "true");
output += expect("axTab2.ariaControlsElementAtIndex(1).isEqual(axPanel2)", "true");
output += expect("axTab2.ariaControlsElementAtIndex(2).isEqual(axPanel3)", "true");
tab4.ariaControlsElements = [panel4];
panel4.id = "panel4-new";
axPanel4 = accessibilityController.accessibleElementById("panel4-new");
axTab4 = accessibilityController.accessibleElementById("tab4");
await waitFor(() => axTab4.ariaControlsElementAtIndex(0) != null);
output += expect("axTab4.ariaControlsElementAtIndex(0).isEqual(axPanel4)", "true");
axPanel5 = accessibilityController.accessibleElementById("panel5");
axTab5 = accessibilityController.accessibleElementById("tab5");
output += expect("axTab5.ariaControlsElementAtIndex(0).isEqual(axPanel5)", "true");
debug(output);
finishJSTest();
}, 0);
}
</script>