Update device orientation & motion permission native SPI as per latest proposal
[WebKit-https.git] / LayoutTests / accessibility / title-ui-element-correctness.html
1 <!DOCTYPE HTML>
2 <html>
3 <body>
4 <script src="../resources/js-test.js"></script>
5
6 <div id="container">
7
8   <div>
9     <label id="label1" for="control1">Label 1</label>
10     <input id="control1" type="text">
11   </div>
12
13   <div>
14     <label id="label2">
15       Label 2
16       <input id="control2" type="text">
17     </label>
18   </div>
19
20   <div>
21     <label id="label3">Label 3</label>
22     <input id="control3" type="text">
23   </div>
24
25   <div>
26     <input id="control4" type="text">
27   </div>
28
29   <div>
30     <label id="label5">
31       Label 5
32     </label>
33     <input id="control5" type="text">
34   </div>
35
36   <div>
37     <label id="label6b" for="control6">Label 6b</label>
38     <label id="label6c" for="control6">Label 6c</label>
39     <input id="control6" type="text">
40   </div>
41 </div>
42
43 <div id="console"></div>
44 <script>
45 description("This tests that titleUIElement works correctly even when things change dynamically.");
46
47 if (window.testRunner && window.accessibilityController) {
48     function hasTitleUIElement(axElement) {
49         var label1 = accessibilityController.accessibleElementById("label1");
50         var titleUIElement = axElement.titleUIElement();
51         if (titleUIElement == null)
52             return false;
53         return titleUIElement.role == label1.role;
54     }
55
56     function createLabelWithIdAndForAttribute(id, forAttributeValue) {
57         var labelElement = document.createElement("label");
58         labelElement.id = id;
59         labelElement.setAttribute("for", forAttributeValue);
60         labelElement.innerText = "Label for " + forAttributeValue;
61         return labelElement;
62     }
63
64     function reparentNodeIntoContainer(node, container) {
65         node.parentElement.removeChild(node);
66         container.appendChild(node);
67     }
68
69     function axElement(id) {
70         return accessibilityController.accessibleElementById(id);
71     }
72
73     shouldBe("axElement('control1').titleUIElement().isEqual(axElement('label1'))", "true");
74
75     shouldBe("axElement('control2').titleUIElement().isEqual(axElement('label2'))", "true");
76
77     // Test changing the "for" attribute dynamically.
78     shouldBe("hasTitleUIElement(axElement('control3'))", "false");
79     shouldBe("document.getElementById('label3').setAttribute('for', 'control3'); axElement('control3').titleUIElement().isEqual(axElement('label3'))", "true");
80
81     // Test unattached label element that's subsequently attached.
82     var label4Element = document.createElement("label");
83     label4Element.id = "label4";
84     label4Element.setAttribute("for", "control4");
85     label4Element.innerText = "Label 4";
86     shouldBe("var label4Element = createLabelWithIdAndForAttribute('label4', 'control4'); hasTitleUIElement(axElement('control4'))", "false");
87     shouldBe("document.getElementById('container').appendChild(label4Element); hasTitleUIElement(axElement('control4'))", "true");
88     shouldBe("axElement('control4').titleUIElement().isEqual(axElement('label4'))", "true");
89
90     // Test what happens when the label is detached.
91     shouldBe("label4Element.parentElement.removeChild(label4Element); hasTitleUIElement(axElement('control4'))", "false");
92
93     // Test label that gets a control reparented into it.
94     shouldBe("hasTitleUIElement(axElement('control5'))", "false");
95
96     shouldBe("reparentNodeIntoContainer(document.getElementById('control5'), document.getElementById('label5')); axElement('control5').titleUIElement() != null", "true");
97     shouldBe("axElement('control5').titleUIElement().isEqual(axElement('label5'))", "true");
98
99     // Make sure the first label is returned, even as labels are added and removed.
100     shouldBe("axElement('control6').titleUIElement().isEqual(axElement('label6b'))", "true");
101     shouldBe("newLabel6Element = createLabelWithIdAndForAttribute('label6a', 'control6'); document.body.insertBefore(newLabel6Element, document.body.firstChild); axElement('control6').titleUIElement().isEqual(axElement('label6a'))", "true");
102     shouldBe("document.body.removeChild(newLabel6Element); axElement('control6').titleUIElement().isEqual(axElement('label6b'))", "true");
103
104     document.getElementById('container').style.display = 'none';
105 }
106
107 </script>
108 </body>
109 </html>