3f32ea6071970dd7255d25d8be79d49b58a8db6c
[WebKit-https.git] / LayoutTests / accessibility / mac / aria-multiple-liveregions-notification.html
1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
2 <html>
3 <head>
4 <script src="../../resources/js-test-pre.js"></script>
5 </head>
6 <body id="body">
7
8 <div role="group" tabindex=0 id="liveregion1" aria-live="polite" aria-relevant="additions">
9 <h3 id="innerlive">text</h3>
10 </div>
11
12 <div role="group" tabindex=0 id="liveregion2" aria-live="polite" aria-relevant="additions">
13 <img src="test.gif" width=100 height=100 alt="alt text" tabindex=0 id="image">
14 </div>
15
16 <p id="description"></p>
17 <div id="console"></div>
18
19 <script>
20     var jsTestIsAsync = true;
21
22     description("This tests that ARIA live regions are sending out the correct notifications. We perform two operations to each aria region, at the end it should trigger two live region notifications");
23
24     var liveRegion1 = 0;
25     var liveRegion2 = 0;
26     var liveRegionChangeCount = 0;
27     function ariaCallback(notification) {
28         if (notification == "AXLiveRegionChanged") {
29             liveRegionChangeCount++;
30         }
31     }
32
33     if (window.accessibilityController) {
34
35         liveRegion1 = accessibilityController.accessibleElementById("liveregion1");
36         var addedNotification1 = liveRegion1.addNotificationListener(ariaCallback);
37         shouldBeTrue("addedNotification1");
38
39         liveRegion2 = accessibilityController.accessibleElementById("liveregion2");
40         var addedNotification2 = liveRegion2.addNotificationListener(ariaCallback);
41         shouldBeTrue("addedNotification2");
42
43         // perform operations on both live regions.
44         textChangeOperation();
45         newElementOperation();
46         alternativeChangeOperation();
47         removeElementOperation();
48
49         // add a short delay to check after all the operations if we have exactly two notifications
50         setTimeout("finishTest()", 50);
51     }
52
53     function textChangeOperation() {
54         // this should trigger a live region change for a text change.
55         document.getElementById("innerlive").innerText = "changed text";
56         document.body.offsetHeight;
57     }
58
59     function newElementOperation() {
60         // this should trigger a live region change for a new element.
61         document.getElementById("liveregion1").innerHTML += "new text element";
62         document.body.offsetHeight;
63     }
64
65     function alternativeChangeOperation() {
66         // this should also trigger a live region change because its a text alternative change. 
67         document.getElementById("image").setAttribute('alt', "new image text");
68         document.body.offsetHeight;
69     }
70
71     function removeElementOperation() {
72         // this should trigger a live region change for a removed element.
73         document.getElementById("liveregion2").removeChild(document.getElementById("image")); 
74         document.body.offsetHeight;
75     }
76
77     function finishTest() {
78         // We should get a total of two live region changes.
79         liveRegion1.removeNotificationListener();
80         liveRegion2.removeNotificationListener();
81         shouldBe("liveRegionChangeCount", "2");
82         finishJSTest();
83     }
84 </script>
85
86 <script src="../../resources/js-test-post.js"></script>
87 </body>
88 </html>