<!DOCTYPE html>
<html>
<head>
<script src="../resources/js-test.js"></script>
<script src="../resources/accessibility-helper.js"></script>
</head>
<body>

<table id="table">
    <thead id="table-head">
        <tr id="row-in-head">
            <th id="a" scope="row">A</th>
            <td id="b">B</td>
            <td>C</td>
        </tr>
    </thead>
    <tbody id="table-body">
        <tr id="row-in-body">
            <th>D</th>
            <td>E</td>
            <td>F</td>
        </tr>
        <tr>
            <td id="g">G</td>
            <td>H</td>
            <td>I</td>
        </tr>
    </tbody>
</table>

<script>
if (window.accessibilityController) {
    window.jsTestIsAsync = true;
    var output = "";

    var table = accessibilityController.accessibleElementById("table");
    var cellB = table.cellForColumnAndRow(1, 0);
    var cellE = table.cellForColumnAndRow(1, 1);

    output += `Cell B should have 1 rowHeaders (has ${cellB.rowHeaders().length}) and 0 columnHeaders (has ${cellB.columnHeaders().length})\n`;
    output += `Cell E should have 1 rowHeader (has ${cellE.rowHeaders().length}) and 1 columnHeader (has ${cellE.columnHeaders().length})\n`;

    output += "Move row in <thead> to <tbody>:\n";
    var headRow = document.getElementById("row-in-head");
    var bodyRow = document.getElementById("row-in-body");
    var thead = document.getElementById("table-head");

    bodyRow.before(headRow);
    thead.remove();

    setTimeout(async () => {
        await waitFor(() => table.cellForColumnAndRow(1, 0));
        cellB = table.cellForColumnAndRow(1, 0);
        output += `Cell B should have 1 rowHeader (has ${cellB.rowHeaders().length}) and 0 columnHeaders (has ${cellB.columnHeaders().length})\n`;
        output += `Cell E should have 1 rowHeader (has ${cellE.rowHeaders().length}) and 0 columnHeaders (has ${cellE.columnHeaders().length})\n`;

        output += "Add header above E:\n";

        let th = document.createElement("th");
        th.textContent = "J";
        document.getElementById("a").after(th);

        await waitFor(() => table.cellForColumnAndRow(1, 1).columnHeaders().length);
        cellE = table.cellForColumnAndRow(1, 1);
        output += `Cell E should have 1 rowHeaders (has ${cellE.rowHeaders().length}) and 1 columnHeader (has ${cellE.columnHeaders().length})\n`;

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