Unreviewed, rolling out r195375.
[WebKit-https.git] / LayoutTests / accessibility / text-marker / text-marker-previous-next.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         var previousMarker, markerRange;
48         for (var i = 0; i < 5; i++) {
49             previousMarker = currentMarker;
50             currentMarker = text.nextTextMarker(currentMarker);
51         }
52         markerRange = text.textMarkerRangeForMarkers(previousMarker, currentMarker);
53         shouldBe("text.stringForTextMarkerRange(markerRange)", "''");
54         
55         // Advance one more character, it will lande at "t" in "text1".
56         previousMarker = currentMarker;
57         currentMarker = text.nextTextMarker(currentMarker);
58         markerRange = text.textMarkerRangeForMarkers(previousMarker, currentMarker);
59         shouldBe("text.stringForTextMarkerRange(markerRange)", "'t'");
60         
61         // Check previous text marker. (Traverse backwards one character, it will land at <br>.)
62         previousMarker = text.previousTextMarker(previousMarker);
63         currentMarker = text.previousTextMarker(currentMarker);
64         markerRange = text.textMarkerRangeForMarkers(previousMarker, currentMarker);
65         shouldBe("text.stringForTextMarkerRange(markerRange)", "''");
66         
67         // Traverse backwards one more character, it will land at the last character of "text".
68         previousMarker = text.previousTextMarker(previousMarker);
69         currentMarker = text.previousTextMarker(currentMarker);
70         markerRange = text.textMarkerRangeForMarkers(previousMarker, currentMarker);
71         shouldBe("text.stringForTextMarkerRange(markerRange)", "'t'");
72         
73         // Check the case with replaced node
74         var text2 = accessibilityController.accessibleElementById("text2");
75         var textMarkerRange2 = text2.textMarkerRangeForElement(text2);
76         shouldBe("text2.textMarkerRangeLength(textMarkerRange2)", "5");
77         var str = text2.stringForTextMarkerRange(textMarkerRange2).replace(String.fromCharCode(65532), "[ATTACHMENT]");
78         debug("Object string for range: " + str);
79         
80         currentMarker = text2.startTextMarkerForTextMarkerRange(textMarkerRange2);
81         // Advance 5 characters, it will land at "d".
82         for (var i = 0; i < 5; i++) {
83             previousMarker = currentMarker;
84             currentMarker = text2.nextTextMarker(currentMarker);
85         }
86         markerRange = text2.textMarkerRangeForMarkers(previousMarker, currentMarker);
87         shouldBe("text2.stringForTextMarkerRange(markerRange)", "'d'");
88         
89         // Traverse backwards 5 characters, it will land at the last character of "text1".
90         for (var i = 0; i < 5; i++) {
91             previousMarker = text2.previousTextMarker(previousMarker);
92             currentMarker = text2.previousTextMarker(currentMarker);
93         }
94         markerRange = text2.textMarkerRangeForMarkers(previousMarker, currentMarker);
95         shouldBe("text2.stringForTextMarkerRange(markerRange)", "'1'");
96         
97         // Check the case with user-select:none, nextTextMarker/previousTextMarker should still work.
98         var text3 = accessibilityController.accessibleElementById("text3");
99         text3 = text3.childAtIndex(0);
100         // Advance to land at user-select:none node.
101         var marker1, marker2;
102         for (var i = 0; i < 17; i++) {
103             currentMarker = text3.nextTextMarker(currentMarker);
104             // i == 13, it should land on "e", and i == 16, it should land on "t"
105             if (i == 13) {
106                 marker1 = currentMarker;
107             }
108         }
109         marker2 = currentMarker;
110         markerRange = text3.textMarkerRangeForMarkers(marker1, marker2);
111         shouldBe("text3.stringForTextMarkerRange(markerRange)", "'ect'");
112         // Iterate backwards the second marker for 6 characters, the range should be "sel"
113         for (var i = 0; i < 6; i++) {
114             currentMarker = text3.previousTextMarker(currentMarker);
115         }
116         marker2 = currentMarker;
117         markerRange = text3.textMarkerRangeForMarkers(marker1, marker2);
118         shouldBe("text3.stringForTextMarkerRange(markerRange)", "'sel'");
119
120         // Check the case with password field.
121         var psw = accessibilityController.accessibleElementById("psw");
122         var textMarkerRange3 = psw.textMarkerRangeForElement(psw);
123         var start = psw.startTextMarkerForTextMarkerRange(textMarkerRange3);
124         shouldBeTrue("!psw.accessibilityElementForTextMarker(start)");
125         
126         // Check next/previous text marker call will skip password field
127         // We start from text2 and advance 6 characters, it should skip the password field and land on text3.
128         currentMarker = text2.startTextMarkerForTextMarkerRange(textMarkerRange2);
129         for (var i = 0; i < 6; i++) {
130             currentMarker = text2.nextTextMarker(currentMarker);
131         }
132         shouldBeTrue("text2.accessibilityElementForTextMarker(currentMarker).isEqual(text3)");
133         // Check previous text marker, it should land on " d" node.
134         currentMarker = text2.previousTextMarker(currentMarker);
135         shouldBeTrue("text2.accessibilityElementForTextMarker(currentMarker).isEqual(text2.childAtIndex(2))");
136         
137     }
138
139 </script>
140
141 <script src="../../resources/js-test-post.js"></script>
142 </body>
143 </html>