<!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="btn" role="button" aria-roledescription="Super Button">text</div>

<script>
    description("This tests that aria-roledescription works.");

    if (window.accessibilityController) {
        window.jsTestIsAsync = true;

        var domButton = document.getElementById("btn");
        var axButton = accessibilityController.accessibleElementById("btn");

        async function waitForDefaultRoleDescription(element) {
            await waitFor(() => {
                let roleDescription = element.roleDescription;
                // The default role description differs per-platform, so wait for the lack of "Super Button".
                return roleDescription && !roleDescription.includes("Super Button");
            });
            debug(`PASS Got default role description: ${element.roleDescription}`)
        }

        setTimeout(async function() {
            // Confirm we can override our role description.
            shouldBe("axButton.roleDescription", "'AXRoleDescription: Super Button'");

            // Confirm our role description returns to default when set to zero length.
            domButton.setAttribute("aria-roledescription", "");
            await waitForDefaultRoleDescription(axButton);

            // Confirm our role description strips extraneous whitespace characters.
            domButton.setAttribute("aria-roledescription", "          Super Button          ");
            await expectAsyncExpression("axButton.roleDescription", "'AXRoleDescription: Super Button'")

            // Confirm our role description returns to default when set to whitespace only.
            domButton.setAttribute("aria-roledescription", "     ");
            await waitForDefaultRoleDescription(axButton);

            // Confirm our role description strips extraneous whitespace (including new line) characters.
            domButton.setAttribute("aria-roledescription", `          Super Button          



            `);
            await expectAsyncExpression("axButton.roleDescription", "'AXRoleDescription: Super Button'")

            // Confirm our role description returns to default when removed.
            domButton.removeAttribute("aria-roledescription");
            await waitForDefaultRoleDescription(axButton);

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