blob: 82163426b91a994454fbac8e014ace3bc7bc8790 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
</head>
<body id="body">
<div role="group" tabindex=0 id="liveregion1" aria-live="polite" aria-relevant="additions">
<h3 id="innerlive1">text</h3>
</div>
<div role="group" tabindex=0 id="liveregion2" aria-live="polite" aria-relevant="additions"></div>
<div role="group" tabindex=0 id="liveregion3" aria-live="polite" aria-relevant="additions">
<img src="test.gif" width=100 height=100 alt="alt text" tabindex=0 id="image">
</div>
<div role="group" tabindex=0 id="liveregion4" aria-live="polite" aria-relevant="additions">
<h3 id="innerlive2">text</h3>
</div>
<p id="description"></p>
<div id="console"></div>
<script>
var jsTestIsAsync = true;
description("This tests that ARIA live regions are sending out the correct notifications. We perform four operations (add, remove, change text, change alt tag), each one should trigger a live region notification");
var receivedTextChangeNotification = false;
var receivedNewElementNotification = false;
var receivedAlternativeChangeNotification = false;
var receivedRemoveElementNotification = false;
// notification callbacks
function textChangeCallback(notification) {
if (notification == "AXLiveRegionChanged") {
receivedTextChangeNotification = true;
finishTest();
}
}
function newElementCallback(notification) {
if (notification == "AXLiveRegionChanged") {
receivedNewElementNotification = true;
finishTest();
}
}
function alternativeChangeCallback(notification) {
if (notification == "AXLiveRegionChanged") {
receivedAlternativeChangeNotification = true;
finishTest();
}
}
function removeElementCallback(notification) {
if (notification == "AXLiveRegionChanged") {
receivedRemoveElementNotification = true;
finishTest();
}
}
function finishTest() {
// We should get a total of four live region changes.
if(receivedTextChangeNotification
&& receivedNewElementNotification
&& receivedAlternativeChangeNotification
&& receivedRemoveElementNotification) {
liveRegion1.removeNotificationListener();
liveRegion2.removeNotificationListener();
liveRegion3.removeNotificationListener();
liveRegion4.removeNotificationListener();
finishJSTest();
}
}
if (window.accessibilityController) {
liveRegion1 = accessibilityController.accessibleElementById("liveregion1");
liveRegion2 = accessibilityController.accessibleElementById("liveregion2");
liveRegion3 = accessibilityController.accessibleElementById("liveregion3");
liveRegion4 = accessibilityController.accessibleElementById("liveregion4");
var addedNotification1 = liveRegion1.addNotificationListener(textChangeCallback);
shouldBe("addedNotification1", "true");
var addedNotification2 = liveRegion2.addNotificationListener(newElementCallback);
shouldBe("addedNotification2", "true");
var addedNotification3 = liveRegion3.addNotificationListener(alternativeChangeCallback);
shouldBe("addedNotification3", "true");
var addedNotification4 = liveRegion4.addNotificationListener(removeElementCallback);
shouldBe("addedNotification4", "true");
textChangeOperation();
newElementOperation();
alternativeChangeOperation();
removeElementOperation();
}
function textChangeOperation() {
// this should trigger our live region callback for a text change.
document.getElementById("innerlive1").innerText = "changed text";
}
function newElementOperation() {
// this should trigger our live region callback for a new element.
document.getElementById("liveregion2").innerHTML += "new text element";
}
function alternativeChangeOperation() {
// this should also trigger our live region change because its a text alternative change.
document.getElementById("image").setAttribute('alt', "new image text");
}
function removeElementOperation() {
// this should trigger our live region callback for a removed element.
document.getElementById("liveregion4").removeChild(document.getElementById("innerlive2"));
}
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>