<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../resources/accessibility-helper.js"></script>
<script src="../resources/js-test.js"></script>
<style>
table, tr, td, th {
  display: block;
}
</style>
</head>
<body role="group" id="body">

<table id="table">
<caption>This is a table caption</caption>
<thead>
    <tr id="r0">
        <th id="r0c0">Author</th>
        <th id="r0c1">Title</th>
        <th id="r0c2">Year</th>
    </tr>
</thead>
<tbody>
    <tr id="r1">
        <td id="r1c0">Stephen Hawking</td>
        <td id="r1c1">A Brief History of Time</td>
        <td id="r1c2">1988</td>
    </tr>
    <tr id="r2">
        <td id="r2c0">Carl Sagan</td>
        <td id="r2c1">Cosmos</td>
        <td id="r2c2">1980</td>
    </tr>
    <tr id="r3">
        <td id="r3c0">Will Gater</td>
        <td id="r3c1">The Mysteries of the Universe</td>
        <td id="r3c2">2020</td>
    </tr>
</tbody>
</table>

<script>
var output = "This test ensures that a table with display:block components is accessible.\n\n";

if (window.accessibilityController) {
    var table = accessibilityController.accessibleElementById("table");
    output += expect("table.rowCount", "4");
    output += expect("table.columnCount", "3");

    for (let row = 0; row < 4; row++) {
        for (let column = 0; column < 3; column++)
            output += expect(`table.cellForColumnAndRow(${column}, ${row}).domIdentifier`, `"r${row}c${column}"`);
    }

    output += `\nPerforming search traversal of body.\n`;
    function elementDescription(axElement) {
        if (!axElement)
            return "null";

        const role = axElement.role;
        const id = axElement.domIdentifier;
        let result = `${id ? `#${id} ` : ""}${role}`;
        if (role.includes("StaticText"))
            result += ` ${accessibilityController.platformName === "ios" ? axElement.description : axElement.stringValue}`;
        return result;
    }

    const container = accessibilityController.accessibleElementById("body");
    let searchResult = null;
    while (true) {
        searchResult = container.uiElementForSearchPredicate(searchResult, true, "AXAnyTypeSearchKey", "", false);
        if (!searchResult)
            break;
        const parentOutput = accessibilityController.platformName === "ios" ? "" : ` (parent: {${elementDescription(searchResult.parentElement())}})`;
        output += `\n{${elementDescription(searchResult)}}${parentOutput}\n`;
    }
    debug(output);
}
</script>
</body>
</html>

