<!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: grid;
}
</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:grid 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>

