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

<div id="examples">
    <!-- All of these eval to AXInvalid: 'false' -->
    <input class="ex" id="ex1" data-expected="false" type="text">
    <input class="ex" id="ex2" data-expected="false" type="text" aria-invalid>
    <input class="ex" id="ex3" data-expected="false" type="text" aria-invalid="">
    <input class="ex" id="ex4" data-expected="false" type="text" aria-invalid=" ">
    <input class="ex" id="ex5" data-expected="false" type="text" aria-invalid="	"><!-- [sic] tab char -->
    <input class="ex" id="ex6" data-expected="false" type="text" aria-invalid="
    "><!-- [sic] newline char -->
    <input class="ex" id="ex7" data-expected="false" type="text" aria-invalid="false">
    <input class="ex" id="ex8" data-expected="false" type="text" aria-invalid="undefined">

    <!-- Known token values in ARIA 1.0. -->
    <input class="ex" id="ex9" data-expected="grammar" type="text" aria-invalid="grammar">
    <input class="ex" id="ex10" data-expected="grammar" type="text" aria-invalid="grammar	"><!-- [sic] tab char -->
    <input class="ex" id="ex11" data-expected="spelling" type="text" aria-invalid="spelling">
    <input class="ex" id="ex12" data-expected="spelling" type="text" aria-invalid="spelling
    "><!-- [sic] newline char -->

    <!-- All other string values are truthy, including a combination of otherwise valid tokens. -->
    <input class="ex" id="ex13" data-expected="true" type="text" aria-invalid="true">
    <input class="ex" id="ex14" data-expected="true" type="text" aria-invalid="notallowed">
    <input class="ex" id="ex15" data-expected="true" type="text" aria-invalid="…">
    <input class="ex" id="ex16" data-expected="true" type="text" aria-invalid="Ç">
    <input class="ex" id="ex17" data-expected="true" type="text" aria-invalid="spelling grammar">
    <input class="ex" id="ex18" data-expected="true" type="text" aria-invalid="spelling	grammar"><!-- [sic] tab char -->
    <input class="ex" id="ex19" data-expected="true" type="text" aria-invalid="spelling
    grammar"><!-- [sic] newline char -->
</div>

<script>
    var testOutput = "This tests that aria-invalid causes the right attribute to be returned and it ensures a notification is sent when it changes.\n\n";

    var axNotificationElement = null;
    function notificationCallback(notification) {
        if (notification == "AXInvalidStatusChanged") {
            testOutput += "Notification received successfully.\n";

            axNotificationElement.removeNotificationListener();
        }
    }

    function verify(value, expectation, element) {
        if (value === expectation)
            testOutput += `PASS: AXInvalid is ${value}.\n`;
        else
            testOutput += `FAIL: AXInvalid is ${value}. Expected: ${expectation}. ${(element ? element.outerHTML : "")}\n`;
    }

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

        var examples = document.querySelectorAll(".ex");
        for (var i = 0, c = examples.length; i < c; i++) {
            var el = examples[i];
            var expectation = el.getAttribute("data-expected");
            var value = accessibilityController.accessibleElementById(el.id).stringAttributeValue("AXInvalid");
            verify(value, expectation, el);
        }

        const domNotificationElement = document.querySelector(".ex");
        axNotificationElement = accessibilityController.accessibleElementById(domNotificationElement.id);
        var didAddNotification = axNotificationElement.addNotificationListener(notificationCallback);
        testOutput += expect("didAddNotification", "true");
        domNotificationElement.setAttribute("aria-invalid", "spelling");

        setTimeout(async () => {
            await waitFor(() => {
                return axNotificationElement.stringAttributeValue("AXInvalid") === "spelling";
            });
            verify(axNotificationElement.stringAttributeValue("AXInvalid"), "spelling", domNotificationElement);

            document.getElementById("examples").hidden = true;
            debug(testOutput);
            finishJSTest();
        });
    }
</script>
</body>
</html>
