blob: a695a93093ffcc0ce0e4bc28c704534d8975e24f [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../resources/js-test-pre.js"></script>
<script src="../resources/accessibility-helper.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>
<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") {
debug("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>
<script src="../resources/js-test-post.js"></script>
</body>
</html>