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

<!-- ==================================================================================================== -->
<!-- This tests ARIA table role and cell role work as intended                                            -->
<!-- ==================================================================================================== -->

<div role="grid" data-role="grid" class="ex">
    <div role="gridcell" data-role="gridcell" class="ex">data</div>
    <div role="cell" data-role="cell" class="ex">data2</div>
    <div role="cell" data-role="cell" class="ex">data3</div>
</div>

<table role="table" data-role="table" class="ex">
    <td role="gridcell" data-role="gridcell" class="ex">data</td>
    <td data-role="cell" class="ex">data2</td>
    <td role="cell" data-role="cell" class="ex">data3</td>
</table>

<script>
    if (window.testRunner && window.accessibilityController) {
        let output = "This tests that table and cell have the correct ARIA roles.\n";

        let examples = document.querySelectorAll(".ex");
        for (let i = 0; i < examples.length; i++) {
            let el = examples[i];
            el.id = "ex" + i;

            axElement = accessibilityController.accessibleElementById(el.id);
            if (!axElement)
                continue;

            let role = axElement.computedRoleString;
            let contentAttrRoleString = el.getAttribute("role");
            let note = el.getAttribute("data-note");
            let out = el.tagName.toLowerCase() + (contentAttrRoleString ? ("[role=\"" + contentAttrRoleString + "\"]") : "") + (note ? note : "");
            out += ` -> ${role}. `;

            let expectedRole = "";
            if (el.hasAttribute("data-role"))
                expectedRole = el.getAttribute("data-role");

            if (role == expectedRole)
                output += `PASS: ${out}\n`;
            else
                output += `FAIL: ${out} Expected: ${expectedRole}.\n`;
        }

        debug(output);
        // Once tests are complete, hide all the example markup.
        examples.forEach((element) => { element.style.display = "none"; });
    }
</script>
</body>
</html>
