Unreviewed, rolling out r195375.
[WebKit-https.git] / LayoutTests / accessibility / mac / previous-next-text-marker.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 <style>
7 .userselect { user-select: none; -webkit-user-select: none; }
8 </style>
9 <body id="body">
10
11 <div id="text" tabindex="0">text</div>
12 <br>
13 text1
14
15 <div id="text2">
16 c <img src="#" aria-label="blah" style="background-color: #aaaaaa; width: 100px; height: 100px;"> d
17 </div>
18
19 <input type="password" id="psw">
20
21 <div class="userselect" id="text3">can't select</div>
22
23 <p id="description"></p>
24 <div id="console"></div>
25
26 <script>
27
28     description("This tests the next/previous text marker functions are implemented correctly.");
29     
30     if (window.accessibilityController) {
31         
32         var text = accessibilityController.accessibleElementById("text");
33         // Get the actual text node.
34         text = text.childAtIndex(0);
35         
36         // Check that we can get the start/end marker for this range.
37         var textMarkerRange = text.textMarkerRangeForElement(text);
38         shouldBe("text.textMarkerRangeLength(textMarkerRange)", "4");
39         
40         var startMarker = text.startTextMarkerForTextMarkerRange(textMarkerRange);
41         var endMarker = text.endTextMarkerForTextMarkerRange(textMarkerRange);
42         shouldBeTrue("text.accessibilityElementForTextMarker(startMarker).isEqual(text)");
43         shouldBeTrue("text.accessibilityElementForTextMarker(endMarker).isEqual(text)");
44         
45         // Check next text marker. (Advance 5 characters, it will land at <br>.)
46         var currentMarker = startMarker;
47         for (var i = 0; i < 5; i++) {
48             currentMarker = text.nextTextMarker(currentMarker);
49         }
50         var element = text.accessibilityElementForTextMarker(currentMarker);
51         shouldBe("element.stringValue", "'AXValue: '");
52         
53         // Advance one more character, it will lande at "t" in "text1".
54         currentMarker = text.nextTextMarker(currentMarker);
55         element = text.accessibilityElementForTextMarker(currentMarker);
56         shouldBe("element.stringValue", "'AXValue: text1'");
57         
58         // Check previous text marker. (Traverse backwards one character, it will land at <br>.)
59         currentMarker = text.previousTextMarker(currentMarker);
60         element = text.accessibilityElementForTextMarker(currentMarker);
61         shouldBe("element.stringValue", "'AXValue: '");
62         
63         // Traverse backwards one more character, it will land at the last character of "text".
64         currentMarker = text.previousTextMarker(currentMarker);
65         element = text.accessibilityElementForTextMarker(currentMarker);
66         shouldBe("element.stringValue", "'AXValue: text'");
67         
68         // Check the case with replaced node
69         var text2 = accessibilityController.accessibleElementById("text2");
70         var textMarkerRange2 = text2.textMarkerRangeForElement(text2);
71         shouldBe("text2.textMarkerRangeLength(textMarkerRange2)", "5");
72         var str = text2.stringForTextMarkerRange(textMarkerRange2).replace(String.fromCharCode(65532), "[ATTACHMENT]");
73         debug("Object string for range: " + str);
74         
75         currentMarker = text2.startTextMarkerForTextMarkerRange(textMarkerRange2);
76         // Advance 4 characters, it will land at first character of " d".
77         for (var i = 0; i < 4; i++) {
78             currentMarker = text2.nextTextMarker(currentMarker);
79             element = text2.accessibilityElementForTextMarker(currentMarker);
80             debug(element.stringValue);
81         }
82         
83         // Traverse backwards 4 characters, it will land at the last character of "text1".
84         for (var i = 0; i < 4; i++) {
85             currentMarker = text2.previousTextMarker(currentMarker);
86             element = text2.accessibilityElementForTextMarker(currentMarker);
87             debug(element.stringValue);
88         }
89         
90         // Check the case with user-select:none, nextTextMarker/previousTextMarker should still work.
91         var text3 = accessibilityController.accessibleElementById("text3");
92         text3 = text3.childAtIndex(0);
93         // Advance to land at user-select:none node.
94         var marker1, marker2;
95         for (var i = 0; i < 17; i++) {
96             currentMarker = text3.nextTextMarker(currentMarker);
97             // i == 13, it should land on "e", and i == 16, it should land on "t"
98             if (i == 13) {
99                 marker1 = currentMarker;
100             }
101         }
102         marker2 = currentMarker;
103         var markerRange = text3.textMarkerRangeForMarkers(marker1, marker2);
104         shouldBe("text3.stringForTextMarkerRange(markerRange)", "'ect'");
105         // Iterate backwards the second marker for 6 characters, the range should be "sel"
106         for (var i = 0; i < 6; i++) {
107             currentMarker = text3.previousTextMarker(currentMarker);
108         }
109         marker2 = currentMarker;
110         markerRange = text3.textMarkerRangeForMarkers(marker1, marker2);
111         shouldBe("text3.stringForTextMarkerRange(markerRange)", "'sel'");
112
113         // Check the case with password field.
114         var psw = accessibilityController.accessibleElementById("psw");
115         var textMarkerRange3 = psw.textMarkerRangeForElement(psw);
116         var start = psw.startTextMarkerForTextMarkerRange(textMarkerRange3);
117         shouldBeTrue("!psw.accessibilityElementForTextMarker(start)");
118         
119         // Check next/previous text marker call will skip password field
120         // We start from text2 and advance 6 characters, it should skip the password field and land on text3.
121         currentMarker = text2.startTextMarkerForTextMarkerRange(textMarkerRange2);
122         for (var i = 0; i < 6; i++) {
123             currentMarker = text2.nextTextMarker(currentMarker);
124         }
125         shouldBeTrue("text2.accessibilityElementForTextMarker(currentMarker).isEqual(text3)");
126         // Check previous text marker, it should land on " d" node.
127         currentMarker = text2.previousTextMarker(currentMarker);
128         shouldBeTrue("text2.accessibilityElementForTextMarker(currentMarker).isEqual(text2.childAtIndex(2))");
129         
130     }
131
132 </script>
133
134 <script src="../../resources/js-test-post.js"></script>
135 </body>
136 </html>