<!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>

<input id="number-input-invalid" type="number" value="abc">
<input id="number-input-valid" type="number" value="10">

<input id="url-input-invalid" type="url" value="abc">
<input id="url-input-valid" type="url" value="http://abc.com">

<input id="email-input-invalid" type="email" value="abc">
<input id="email-input-valid" type="email" value="abc@abc.com">

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

    var input;
    function expectAXInvalid(id, expectedValue) {
        debug(`Testing #${id}`);
        input = accessibilityController.accessibleElementById(id);
        shouldBe("input.stringAttributeValue('AXInvalid')", `'${expectedValue}'`);
    }

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

        expectAXInvalid("number-input-valid", false);
        expectAXInvalid("url-input-invalid", true);
        expectAXInvalid("url-input-valid", false);
        expectAXInvalid("email-input-invalid", true);
        expectAXInvalid("email-input-valid", false);

        setTimeout(async function() {
            // For <input type="number" value="abc"> inputs, we must explicitly send a non-number keystroke for it to be
            // considered invalid at the HTMLInputElement level despite the `value` attribute clearly not being a valid number.
            document.getElementById("number-input-invalid").focus();
            eventSender.keyDown("a");
            await waitFor(() => {
                input = accessibilityController.accessibleElementById("number-input-invalid");
                return input && input.stringAttributeValue("AXInvalid") === "true";
            });
            expectAXInvalid("number-input-invalid", true);

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

