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

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

    <!-- Known token values in ARIA 1.0. -->
    <input class="ex" data-expected="grammar" type="text" aria-invalid="grammar">
    <input class="ex" data-expected="grammar" type="text" aria-invalid="grammar	"><!-- [sic] tab char -->
    <input class="ex" data-expected="spelling" type="text" aria-invalid="spelling">
    <input class="ex" 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" data-expected="true" type="text" aria-invalid="true">
    <input class="ex" data-expected="true" type="text" aria-invalid="notallowed">
    <input class="ex" data-expected="true" type="text" aria-invalid="…">
    <input class="ex" data-expected="true" type="text" aria-invalid="Ç">
    <input class="ex" data-expected="true" type="text" aria-invalid="spelling grammar">
    <input class="ex" data-expected="true" type="text" aria-invalid="spelling	grammar"><!-- [sic] tab char -->
    <input class="ex" data-expected="true" type="text" aria-invalid="spelling
    grammar"><!-- [sic] newline char -->
</div>

<p id="description"></p>
<div id="console"></div>
<div id="notifications"></div>

<script>

    description("This tests that aria-invalid causes the right attribute to be returned and it ensures a notification is sent when it changes.");

    function $(id){
        return document.getElementById(id);
    }

    var axNotificationElement = null;
    function notificationCallback(notification) {
        if (notification == "AXInvalidStatusChanged") {
            $("notifications").innerHTML += "Notification received successfully.";
            axNotificationElement.removeNotificationListener();
            $("examples").hidden = true;
            finishJSTest();
        }
    }

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

    if (window.accessibilityController) {
        jsTestIsAsync = true;

        var examples = document.querySelectorAll(".ex");
        for (var i = 0, c = examples.length; i < c; i++) {
            var el = examples[i];
            el.focus();
            var expectation = el.getAttribute("data-expected");
            var value = accessibilityController.focusedElement.stringAttributeValue('AXInvalid');
            verify(value, expectation, el);
        }
        
        var domNotificationElement = document.querySelector(".ex");
        domNotificationElement.focus();
        axNotificationElement = accessibilityController.focusedElement;
        var addedNotification = axNotificationElement.addNotificationListener(notificationCallback);
        shouldBeTrue("addedNotification");
        domNotificationElement.setAttribute("aria-invalid", "spelling");
        verify(axNotificationElement.stringAttributeValue('AXInvalid'), "spelling", domNotificationElement);
    }

</script>
</body>
</html>
