<!DOCTYPE HTML>
<html>
<body>
<script src="../resources/js-test-pre.js"></script>

<div id="container" tabindex="-1"></div>

<canvas id="canvas" tabindex="-1"></canvas>

<div id="console"></div>
<script>
description("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.");

if (window.testRunner && window.accessibilityController) {
    window.testRunner.dumpAsText();

    // Create an ordinary button on the page, focus it and get its accessibility role.
    var button = document.createElement('button');
    document.body.appendChild(button);
    button.focus();
    window.axElement = accessibilityController.focusedElement;
    window.expectedButtonRole = axElement.role;

    // Now remove the node from the tree and get the role of the detached accessibility object.
    document.body.removeChild(button);
    window.expectedDetachedRole = axElement.role;
    shouldBeTrue("expectedButtonRole != expectedDetachedRole");

    // 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');
    (function() {
        var button = document.createElement('button');
        canvas.appendChild(button);

        // Note: focusing the button and using that to get its accessibility object creates an extra
        // reference to the button and it won't get deleted when we want it to. So instead we focus the
        // canvas and get its first child.
        canvas.focus();
        window.axElement = accessibilityController.focusedElement.childAtIndex(0);

        window.canvasButtonRole = axElement.role;
        shouldBe("canvasButtonRole", "expectedButtonRole");

        // Now reparent the node to a container that's not a canvas.
        var container = document.getElementById('container');
        container.appendChild(button);
        container.focus();
        window.axReparentedElement = accessibilityController.focusedElement.childAtIndex(0);
    })();

    // Ensure that the old accessibility object is detached by checking its role.
    window.detachedCanvasButtonRole = axElement.role;
    shouldBe("detachedCanvasButtonRole", "expectedDetachedRole");

    // Ensure that the new accessibility object for the now-reparented node has the correct role.
    window.reparentedButtonRole = axReparentedElement.role;
    shouldBe("reparentedButtonRole", "expectedButtonRole");
}

</script>

<script src="../resources/js-test-post.js"></script>
</body>
</html>
