blob: 58c34d43d5eebad92ced3686c120e39ac432e1eb [file] [log] [blame]
<!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>