<!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="test">
    <span id="parent1">1<div id="div1" role="group">2</div>3</span>
    <span>4</span><div id="group-2" role="group">5</div>
</div>

<div>
    <span id="parent2">6<div id="div2" role="group">7</div>8</span>
    <span>9</span><div role="group">10</div>
</div>

<script>
var output = "This test ensures the accessibility tree is correct after inserting elements near a render continuation.\n\n";

if (window.accessibilityController) {
    window.jsTestIsAsync = true;

    var webArea = accessibilityController.rootElement.childAtIndex(0);
    output += `${dumpAXSearchTraversal(webArea)}\n\n`;

    var button = document.createElement("button");
    button.innerText = "foo";

    var expected = `{AXRole: AXStaticText AXValue: 1}

{AXRole: AXButton}`;
    var traversalResult;
    setTimeout(async function() {
        document.getElementById("parent1").insertBefore(button, document.getElementById("div1"));
        // Wait for the button to come after the first static text in the accessibility tree.
        expected = `{AXRole: AXStaticText AXValue: 1}

{AXRole: AXButton}`;
        await waitFor(() => {
            traversalResult = dumpAXSearchTraversal(webArea);
            return traversalResult.includes(expected);
        });
        output += `${traversalResult}\n\n`;

        document.getElementById("parent2").insertBefore(button, document.getElementById("div2"));
        // Wait for the button to come after the sixth static text in the accessibility tree.
        expected = `{AXRole: AXStaticText AXValue: 6}

{AXRole: AXButton}`;
        await waitFor(() => {
            traversalResult = dumpAXSearchTraversal(webArea);
            return traversalResult.includes(expected);
        });
        output += `${traversalResult}\n\n`;

        debug(output);
        finishJSTest();
    }, 0);
}
</script>
</body>
</html>

