JS Test Harness: Remove successfullyParsed from more tests
[WebKit-https.git] / LayoutTests / editing / selection / programmatic-selection-on-mac-is-directionless.html
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <script src="../../fast/js/resources/js-test-pre.js"></script>
5 <script src="resources/js-test-selection-shared.js"></script>
6 </head>
7 <body>
8 <p id="description"></p>
9 <div id="console"></div>
10
11 <div id="test"> 
12     <div id="regular-div">
13         line 1<br>
14         line 2<br>
15         line 3
16     </div> 
17     <div contenteditable="true" id="editable-div">
18          line 1<br>
19          line 2<br>
20          line 3
21     </div> 
22     <textarea id="text-area" cols="60" rows="7">
23 line 1
24 line 2
25 line 3</textarea>
26     <input type="text" id="text-input" value="line 2"/>
27 </div>
28
29 <script>
30 description("This test ensures that programmatically set selections are directionless on mac, and that they are not on other platforms.");
31
32 function selectLine(node) {
33     var selection = window.getSelection();
34     selection.empty();
35
36     if (node.localName == 'div') {
37         var container = node.childNodes[2];
38         var range = document.createRange();
39         range.setStart(container, container.data.search('ine 2'));
40         range.setEnd(container, range.startOffset + 'in'.length);
41         selection.addRange(range);
42     } else {
43        node.selectionDirection = 'none';
44        node.selectionStart = node.value.search('ine 2');
45        node.selectionEnd = node.selectionStart + 'in'.length;
46     }
47 }
48
49 function runTestsAndVerify(name, selectionModifier, expectedDirection, expectedText) {
50     var currentTest = makeTest(name, selectionModifier, expectedDirection, expectedText);
51
52     currentTest('no action');
53     currentTest('delete');
54     currentTest('forwardDelete');
55     currentTest('cut');
56     currentTest('bold');
57     currentTest('insertText');
58 }
59
60 function makeTest(name, selectionModifier, expectedDirection, expectedText) {
61     return function (action) {
62         selectLine(name);
63         var actionString = '';
64
65         if (action != 'no action') {
66             document.execCommand(action, false, 'word');
67             document.execCommand('undo');
68             actionString = ', after undoing ' + action;
69         }
70
71         var description = selectionModifier() + ' in ' + name.id + actionString;
72         var selection = window.getSelection();
73         var actualDirection = selection.baseOffset < selection.extentOffset ? 'forward' : (selection.baseOffset > selection.extentOffset ? 'backward' : 'none');
74
75         if (selection.toString() != expectedText)
76             testFailed(description + ', expected "' + expectedText + '" but got "' + selection.toString() + '"');
77         else if (description.split(' ')[4] == 'div' && expectedDirection != actualDirection)
78             testFailed(description + ', expected ' + expectedDirection + ' direction but got ' + actualDirection);
79         else
80             testPassed(description);
81     }
82 }
83
84 function makeSelectionModifier(direction, granularity) {
85     return function() {
86         window.getSelection().modify('extend', direction, granularity);
87         var testDescription = direction + ' by ' + granularity;
88         return testDescription;
89     }
90 }
91
92 function runTestsOn(platform, node) {
93     var macOrNonMac = platform == 'mac' ? 'mac' : 'non-mac';
94     var backwardOnMacAndForwardOtherwise = {'mac': 'backward', 'non-mac': 'forward'}[macOrNonMac];
95
96     var extendSelectionLeftByCharacter = makeSelectionModifier('left', 'character');
97     var extendSelectionRightByCharacter = makeSelectionModifier('right', 'character');
98     var extendSelectionLeftByLine = makeSelectionModifier('left', 'line');
99     var extendSelectionRightByLine = makeSelectionModifier('right', 'line');
100
101     runTestsAndVerify(node, extendSelectionLeftByCharacter, backwardOnMacAndForwardOtherwise, {'mac': 'lin', 'non-mac': 'i'}[macOrNonMac]);
102     runTestsAndVerify(node, extendSelectionRightByCharacter, 'forward', 'ine');
103
104     if (node.localName == 'input')
105         expectedResult = {'mac': 'lin', 'non-mac': 'l'};
106     else if (node.localName == 'textarea')
107         expectedResult = {'mac': 'ine 1\nlin', 'non-mac': 'e 1\nl'}
108     else if (node.localName == 'div')
109         expectedResult = {'mac': 'ine 1\nlin', 'non-mac': 'e 1\nl'}
110
111     runTestsAndVerify(node, extendSelectionLeftByLine, backwardOnMacAndForwardOtherwise, expectedResult[macOrNonMac]);
112
113     if (node.localName == 'input')
114         expectedResult = 'ine 2';
115     else if (node.localName == 'textarea')
116         expectedResult = 'ine 2\nlin';
117     else if (node.localName == 'div')
118         expectedResult = 'ine 2\nlin';
119
120     runTestsAndVerify(node, extendSelectionRightByLine, 'forward', expectedResult);
121 }
122
123 function runTestsFor(platform) {
124     debug(platform + ':');
125     layoutTestController.setEditingBehavior(platform);
126     var listOfTestNodes = document.getElementById('test').childNodes;
127
128     for (var i = 0; i < listOfTestNodes.length; i++) {
129         if (listOfTestNodes[i].nodeName != '#text')
130             runTestsOn(platform, listOfTestNodes[i]);
131     }
132 }
133
134 if (window.layoutTestController) {
135     runTestsFor('mac');
136     runTestsFor('win');
137     runTestsFor('unix');
138
139     document.getElementById('test').innerHTML = '';
140 }
141
142 </script>
143 <script src="../../fast/js/resources/js-test-post.js"></script>
144 </body>
145 </html>