5436b505799166ac8b355e75e562d8555372bb42
[WebKit-https.git] / LayoutTests / accessibility / textbox-role-reports-selection.html
1 <!DOCTYPE HTML PUBLIC>
2 <html>
3 <head>
4 <script>
5 var successfullyParsed = false;
6 </script>
7 <script src="../fast/js/resources/js-test-pre.js"></script>
8 </head>
9 <body>
10 This tests that the AXSelection property is correctly reported for non-native text boxes.<br>
11 <div role="textbox" id="ariaTextBox" aria-multiline="false" tabindex="0">Some text in a textbox (34 chars).</div>
12 <div id="console"></div>
13 <script>
14     function assertEvaluatesTo(actual, expected, message) {
15         var actualValue = 0;
16         try {
17             actualValue = eval(actual);
18         } catch (e) {
19             debug("Evaluating " + actual + ": Threw exception " + e);
20             return;
21         }
22         if (actualValue === expected)
23             debug("PASS: " + actual + " is " + expected + (message ? " (" + message + ")" : ""));
24         else
25             debug("FAIL: " + actual + " should be " + expected + ", got " + actualValue + (message ? " (" + message + ")" : ""));
26     }
27
28     function assertCorrectAXSelection(element, selection, message) {
29         element.focus();
30         var selectionValues = /\{(\d+), (\d+)\}/.exec(selection);
31         var selectionStart = eval(selectionValues[1]);
32         var selectionLength = eval(selectionValues[2]);
33         var selectionEnd = selectionStart + selectionLength;
34
35         window.getSelection().setBaseAndExtent(element.firstChild, selectionStart, element.firstChild, selectionEnd);
36         var axElement = accessibilityController.focusedElement;
37         axSelection = axElement.selectedTextRange;
38         assertEvaluatesTo("axSelection", selection, message);
39     }
40
41     if (window.layoutTestController && window.accessibilityController) {
42         window.layoutTestController.dumpAsText();
43         var ariaTextBox = document.getElementById("ariaTextBox");
44         var textLength = ariaTextBox.textContent.length;
45
46         assertCorrectAXSelection(ariaTextBox, "{0, 0}", "Collapsed selection at start");
47         assertCorrectAXSelection(ariaTextBox, "{" + textLength + ", 0}", "Collapsed selection at end");
48         assertCorrectAXSelection(ariaTextBox, "{15, 0}", "Collapsed selection in the middle");
49         assertCorrectAXSelection(ariaTextBox, "{15, 2}", "Non-collapsed selection in the middle");
50         assertCorrectAXSelection(ariaTextBox, "{0, 15}", "Non-collapsed selection at the start");
51         assertCorrectAXSelection(ariaTextBox, "{15, "+ (textLength - 15) + "}", "Non-collapsed selection at the end");
52     }
53
54     successfullyParsed = true;
55 </script>
56
57 <script src="../fast/js/resources/js-test-post.js"></script>
58 </body>
59 </html>