<!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="clock" role="timer" aria-live="polite" aria-atomic="true" aria-relevant="additions text">2:30pm</div>
<div id="clock-display-contents" style="display: contents" role="timer" aria-live="polite" aria-atomic="true" aria-relevant="additions text">4:30pm</div>

<script>
    var testOutput = "This test ensures that an element's busy state updates aria-busy changes.\n\n";

    var axClock, axClockWithDisplayContents;
    function verifyIsBusy() {
        testOutput += `#clock is busy: ${axClock.isBusy}\n`;
        testOutput += `#clock-display-contents is busy: ${axClockWithDisplayContents.isBusy}\n\n`;
    }
    function verifyIsAtomic() {
        testOutput += `#clock is atomic: ${axClock.isAtomicLiveRegion}\n`;
        testOutput += `#clock-display-contents is atomic: ${axClockWithDisplayContents.isAtomicLiveRegion}\n\n`;
    }
    function verifyLiveRegionRelevant() {
        testOutput += `#clock relevant: ${axClock.liveRegionRelevant}\n`;
        testOutput += `#clock-display-contents relevant: ${axClockWithDisplayContents.liveRegionRelevant}\n\n`;
    }
    function verifyLiveRegionStatus() {
        testOutput += `#clock live region status: ${axClock.liveRegionStatus}\n`;
        testOutput += `#clock-display-contents live region status: ${axClockWithDisplayContents.liveRegionStatus}\n\n`;
    }

    if (window.accessibilityController) {
        window.jsTestIsAsync = true;
        axClock = accessibilityController.accessibleElementById("clock");
        axClockWithDisplayContents = accessibilityController.accessibleElementById("clock-display-contents");

        testOutput += "Verifying initial states:\n\n";
        verifyIsAtomic();
        verifyIsBusy();
        verifyLiveRegionRelevant();
        verifyLiveRegionStatus();

        const clock = document.getElementById("clock");
        const clockWithDisplayContents = document.getElementById("clock-display-contents");

        testOutput += "Setting aria-busy to true.\n\n";
        clock.ariaBusy = "true";
        clockWithDisplayContents.ariaBusy = "true";
        setTimeout(async function() {
            await waitFor(() => axClock.isBusy && axClockWithDisplayContents.isBusy);
            verifyIsBusy();

            testOutput += "Setting aria-busy to false.\n\n";
            clock.ariaBusy = "false";
            clockWithDisplayContents.ariaBusy = "false";
            await waitFor(() => !axClock.isBusy && !axClockWithDisplayContents.isBusy);
            verifyIsBusy();

            testOutput += "Setting aria-atomic to false.\n\n";
            clock.ariaAtomic = "false";
            clockWithDisplayContents.ariaAtomic = "false";
            await waitFor(() => !axClock.isAtomicLiveRegion && !axClockWithDisplayContents.isAtomicLiveRegion);
            verifyIsAtomic();

            testOutput += "Setting aria-relevant to removals.\n\n";
            clock.ariaRelevant = "removals";
            clockWithDisplayContents.ariaRelevant = "removals";
            await waitFor(() => axClock.liveRegionRelevant.includes("removals") && axClockWithDisplayContents.liveRegionRelevant.includes("removals"));
            verifyLiveRegionRelevant();

            testOutput += "Setting aria-live to assertive.\n\n";
            clock.ariaLive = "assertive";
            clockWithDisplayContents.ariaLive = "assertive";
            await waitFor(() => axClock.liveRegionStatus.includes("assertive") && axClockWithDisplayContents.liveRegionStatus.includes("assertive"));
            verifyLiveRegionStatus();

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

