blob: 8f052e13c9f97c398c864811d0aff06706c14f88 [file] [log] [blame] [edit]
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../resources/accessibility-helper.js"></script>
<script src="../resources/js-test.js"></script>
</head>
<body>
<div id="container" role="group"></div>
<canvas id="canvas" tabindex="-1"></canvas>
<script>
var testOutput = "This test makes sure that AccessibilityNodeObjects are properly detached when the node they point to is reparented to a location that allows them to have a renderer.\n\n";
if (window.accessibilityController) {
window.jsTestIsAsync = true;
// Create an ordinary button on the page.
var button = document.createElement("button");
button.id = "buttonOne";
document.body.appendChild(button);
setTimeout(async function() {
window.axElement = await waitForElementById("buttonOne");
window.expectedButtonRole = axElement.role;
// Now remove the node from the tree and get the role of the detached accessibility object.
document.body.removeChild(button);
await waitFor(() => {
window.expectedDetachedRole = axElement.role;
return expectedButtonRole !== expectedDetachedRole;
});
testOutput += expect("expectedButtonRole !== expectedDetachedRole", "true");
// This time create a button that's a child of a canvas element. It will be focusable but not rendered.
// In particular, this will create an AccessibilityNodeObject rather than an AccessibilityRenderObject.
var canvas = document.getElementById("canvas");
// This test relies on focusing the canvas to make it accessible (without the focus, accessibleElementById("canvas")
// below will never return anything).
canvas.focus();
var canvasButton = document.createElement("button");
canvas.appendChild(canvasButton);
var axCanvas;
await waitFor(() => {
axCanvas = accessibilityController.accessibleElementById("canvas");
return axCanvas && axCanvas.childrenCount > 0;
});
window.axElement = axCanvas.childAtIndex(0);
window.canvasButtonRole = axElement.role;
testOutput += expect("canvasButtonRole", "expectedButtonRole");
// Now reparent the node to a container that's not a canvas.
var container = document.getElementById("container");
container.appendChild(canvasButton);
var axContainer = accessibilityController.accessibleElementById("container");
await waitFor(() => axContainer.childrenCount > 0);
window.axReparentedElement = axContainer.childAtIndex(0);
// Ensure that the old accessibility object is detached by checking its role.
await waitFor(() => {
window.detachedCanvasButtonRole = axElement.role;
return detachedCanvasButtonRole === expectedDetachedRole;
});
testOutput += expect("detachedCanvasButtonRole", "expectedDetachedRole");
// Ensure that the new accessibility object for the now-reparented node has the correct role.
window.reparentedButtonRole = axReparentedElement.role;
testOutput += expect("reparentedButtonRole", "expectedButtonRole");
debug(testOutput);
finishJSTest();
}, 0);
}
</script>
</body>
</html>