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

<div id="examples">
    <input class="ex" data-expected="true" type="number" value="abc">
    <input class="ex" data-expected="false" type="number" value="10">
    
    <input class="ex" data-expected="true" type="url" value="abc">
    <input class="ex" data-expected="false" type="url" value="http://abc.com">
    
    <input class="ex" data-expected="true" type="email" value="abc">
    <input class="ex" data-expected="false" type="email" value="abc@abc.com">
</div>

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

<script>

    description("This tests that we are exposing correct invalid status for different types.");

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

    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) {

        var examples = document.querySelectorAll(".ex");
        for (var i = 0, c = examples.length; i < c; i++) {
            var el = examples[i];
            el.focus();
            if (i == 0)
                eventSender.keyDown('a');
            var expectation = el.getAttribute("data-expected");
            var value = accessibilityController.focusedElement.stringAttributeValue('AXInvalid');
            verify(value, expectation, el);
        }
    }

</script>

<script src="../resources/js-test-post.js"></script>
</body>
</html>
