<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../resources/js-test.js"></script>
<script src="../resources/accessibility-helper.js"></script>
</head>
<body>

<div id="container" role="group">
    <table>
        <tr>
            <td></td>
            <th scope="col">Duck</th>
            <th scope="col">Cat</th>
        </tr>
        <tr>
            <th scope="row">Sound</th>
            <td>Quack</td>
            <td>Meow</td>
        </tr>
        <tr>
            <th scope="row">Biological family</th>
            <td>Anatidae</td>
            <td>Felidae</td>
        </tr>
    </table>
</div>

<script>
    var testOutput = "This test ensures we can traverse through entire tables via search.\n";

    if (window.accessibilityController) {
        const containerElement = accessibilityController.accessibleElementById("container");

        let elementCount = 0;
        let searchResult = null;
        while (true) {
            searchResult = containerElement.uiElementForSearchPredicate(searchResult, true, "AXAnyTypeSearchKey", "", false);
            if (!searchResult)
                break;
            const role = searchResult.role;
            testOutput += `\n${role}`;
            if (role.includes("StaticText")) {
                let textContent = accessibilityController.platformName === "ios" ? searchResult.description : searchResult.stringValue;
                testOutput += `\n${textContent}`;
            }

            testOutput += "\n";
            elementCount += 1;
        }
        testOutput += `\nTraversed ${elementCount} elements.`;
        debug(testOutput);
    }
</script>
</body>
</html>

