Refactoring: Pull all fullscreen code out of Document and into its own helper class
[WebKit-https.git] / LayoutTests / accessibility / aria-hidden-false-works-in-subtrees.html
1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
2 <html>
3 <head>
4 <script src="../resources/js-test-pre.js"></script>
5 <script src="../resources/accessibility-helper.js"></script>
6 </head>
7 <body id="body">
8
9 <div id="content">
10
11 <div hidden aria-hidden="false" aria-label="group0">
12    <div aria-hidden="true" aria-label="group1">
13       ignore me
14    </div>
15    <div aria-hidden="false" role="group" aria-label="group2">
16      <div aria-hidden="false" role="button" aria-label="button1">button</div>
17      don't ignore me
18   </div>
19 </div>
20
21 <!-- The text node should be visible because it inherits from the parent -->
22 <div id="group3" hidden aria-hidden="false">
23 text3
24 </div>
25
26 <!-- The text node should be visible because it inherits from the parent, and all parents need aria-hidden=false -->
27 <div id="group4" hidden aria-hidden="false">
28   <div role="group" hidden aria-hidden="false">
29     text4
30   </div>
31 </div>
32
33 <!-- The text node should NOT be visible because it inherits from the parent, and all parents need aria-hidden=false -->
34 <div id="group5" role="group">
35   <div hidden>
36     <div role="group" hidden aria-hidden="false">
37       text5
38     </div>
39   </div>
40 </div>
41
42 <!-- The button inside should NOT be visible because it is not marked as aria-hidden -->
43 <div id="group6" hidden aria-hidden="false">
44   <div aria-hidden="false">
45      <button>button</button>
46   </div>
47 </div>
48
49 <!-- The button inside should be visible because it is marked as aria-hidden and all its parents are too -->
50 <div id="group7" hidden aria-hidden="false">
51   <div aria-hidden="false">
52      <button aria-hidden="false">button</button>
53   </div>
54 </div>
55
56 <div id="iframe">
57 <iframe onload="testiFrameContent();" aria-hidden="false" src="resources/cake.png">hidden content</iframe>
58 </div>
59
60 </div>
61
62 <p id="description"></p>
63 <div id="console"></div>
64
65 <script>
66     description("This tests that a sub-tree within a node marked with aria-hidden=false will be exposed in the AX tree.");
67
68     var iframeChild;
69     function testiFrameContent() {
70         // Test that aria-hidden=false does NOT expose iframe fallback text.
71         var iframe = accessibilityController.accessibleElementById("iframe").childAtIndex(0).childAtIndex(0);
72
73         debug("Non-rendered iframe content should not be visible when aria-hidden=true. The first child should be a group and NOT static text.");
74         iframeChild = iframe.childAtIndex(0);
75         debug("iFrame child role: " + iframeChild.role);
76
77         document.getElementById("content").style.visibility = "hidden";
78
79         finishJSTest();
80     }
81
82     function dumpAccessibilityChildren(element, level) {
83         if (!element) {
84             return;
85         }
86         var indent = "";
87         for (var k = 0; k < level; k++) { indent += "  "; }
88         debug(indent + element.role + "\n" + indent + platformValueForW3CName(element, true) + "\n");
89         var childrenCount = element.childrenCount;
90         for (var k = 0; k < childrenCount; k++) {
91             dumpAccessibilityChildren(element.childAtIndex(k), level+1);
92         }
93     }
94  
95     if (window.accessibilityController) {
96         window.jsTestIsAsync = true;
97
98         var root = accessibilityController.rootElement.childAtIndex(0).childAtIndex(0); 
99         dumpAccessibilityChildren(root, 0);
100
101         // Text inside aria-hidden=false inherits from parent.
102         var object;
103         if (accessibilityController.platformName == "atk") {
104             object = accessibilityController.accessibleElementById("group3");
105             shouldBe("object.role", "'AXRole: AXSection'");
106         } else {
107             object = accessibilityController.accessibleElementById("group3").childAtIndex(0);
108             shouldBe("object.role", "'AXRole: AXStaticText'");
109         }
110         var stringValue = object.stringValue.replace(/\n/g, '');
111         shouldBe("stringValue", "'AXValue: text3'");
112
113         // Text inside nested aria-hidden=false inherits from parent.
114         if (accessibilityController.platformName == "atk") {
115             object = accessibilityController.accessibleElementById("group4").childAtIndex(0);
116             shouldBe("object.role", "'AXRole: AXGroup'");
117         } else {
118             object = accessibilityController.accessibleElementById("group4").childAtIndex(0).childAtIndex(0);
119             shouldBe("object.role", "'AXRole: AXStaticText'");
120         }
121         stringValue = object.stringValue.replace(/\n/g, '');
122         if (accessibilityController.platformName == "atk")
123             shouldBe("stringValue", "'AXValue: text4'");
124         else
125             shouldBe("stringValue", "'AXValue:     text4  '");
126
127         // When not all the parents have aria-hidden=false, element should not be visible.
128         object = accessibilityController.accessibleElementById("group5").childAtIndex(0);
129         shouldBeTrue("!object || !object.isValid");
130
131         // Objects that don't have aria-hidden=false are not visible when the parents have that attribute.
132         object = accessibilityController.accessibleElementById("group6").childAtIndex(0);
133         if (accessibilityController.platformName == "atk")
134             shouldBe("object.role", "'AXRole: AXSection'");
135         else
136             shouldBe("object.role", "'AXRole: AXGroup'");
137         shouldBe("object.childrenCount", "0");
138
139         // When all objects have aria-hidden=false, then the elements are visible.
140         object = accessibilityController.accessibleElementById("group7").childAtIndex(0);
141         if (accessibilityController.platformName == "atk")
142             shouldBe("object.role", "'AXRole: AXSection'");
143         else
144             shouldBe("object.role", "'AXRole: AXGroup'");
145         shouldBe("object.childrenCount", "1");
146         shouldBe("object.childAtIndex(0).role", "'AXRole: AXButton'");
147     }
148
149 </script>
150
151 <script src="../resources/js-test-post.js"></script>
152 </body>
153 </html>