OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Include test fixture. | 5 // Include test fixture. |
6 GEN_INCLUDE(['../../testing/chromevox_next_e2e_test_base.js']); | 6 GEN_INCLUDE(['../../testing/chromevox_next_e2e_test_base.js']); |
7 | 7 |
8 /** | 8 /** |
9 * Test fixture for cvox2.cursors. | 9 * Test fixture for cvox2.cursors. |
10 * @constructor | 10 * @constructor |
11 * @extends {ChromeVoxNextE2ETest} | 11 * @extends {ChromeVoxNextE2ETest} |
12 */ | 12 */ |
13 function CursorsTest() {} | 13 function CursorsTest() {} |
14 | 14 |
15 CursorsTest.prototype = { | 15 CursorsTest.prototype = { |
16 __proto__: ChromeVoxNextE2ETest.prototype, | 16 __proto__: ChromeVoxNextE2ETest.prototype, |
17 | 17 |
18 /** Test cursors.Cursor. @const {string} */ | |
19 CURSOR: 'cursor', | |
20 | |
21 /** Test cursors.Range. @const {string} */ | |
dmazzoni
2014/10/24 16:13:30
nit: indent
| |
22 RANGE: 'range', | |
23 | |
18 /** @override */ | 24 /** @override */ |
19 setUp: function() { | 25 setUp: function() { |
20 // Various aliases. | 26 // Various aliases. |
21 window.BACKWARD = AutomationUtil.Dir.BACKWARD; | 27 window.BACKWARD = AutomationUtil.Dir.BACKWARD; |
22 window.FORWARD = AutomationUtil.Dir.FORWARD; | 28 window.FORWARD = AutomationUtil.Dir.FORWARD; |
23 window.CHARACTER = cursors.Unit.CHARACTER; | 29 window.CHARACTER = cursors.Unit.CHARACTER; |
24 window.WORD = cursors.Unit.WORD; | 30 window.WORD = cursors.Unit.WORD; |
25 window.LINE = cursors.Unit.LINE; | 31 window.LINE = cursors.Unit.LINE; |
26 window.BOUND = cursors.Movement.BOUND; | 32 window.BOUND = cursors.Movement.BOUND; |
27 window.DIRECTIONAL = cursors.Movement.DIRECTIONAL; | 33 window.DIRECTIONAL = cursors.Movement.DIRECTIONAL; |
28 }, | 34 }, |
29 | 35 |
30 /** | 36 /** |
31 * Performs a series of operations on a cursor and asserts the result. | 37 * Performs a series of operations on a cursor and asserts the result. |
32 * @param {cursors.Cursor} cursor The starting cursor. | 38 * @param {cursors.Cursor} cursor The starting cursor. |
33 * @param {!Array.<Array.< | 39 * @param {!Array.<Array.< |
34 * cursors.Unit| | 40 * cursors.Unit| |
35 * cursors.Movement| | 41 * cursors.Movement| |
36 * automationUtil.Dir| | 42 * automationUtil.Dir| |
37 * Object>>} | 43 * Object>>} |
38 * moves An array of arrays. Each inner array contains 4 items: unit, | 44 * moves An array of arrays. Each inner array contains 4 items: unit, |
39 * movement, direction, and assertions object. See example below. | 45 * movement, direction, and assertions object. See example below. |
40 */ | 46 */ |
41 moveAndAssert: function(cursor, moves) { | 47 cursorMoveAndAssert: function(cursor, moves) { |
42 var move = null; | 48 var move = null; |
43 while (move = moves.shift()) { | 49 while (move = moves.shift()) { |
44 cursor.move(move[0], move[1], move[2]); | 50 cursor = cursor.move(move[0], move[1], move[2]); |
45 var expected = move[3]; | 51 var expected = move[3]; |
46 if (expected.index) | 52 this.makeCursorAssertion(expected, cursor); |
47 assertEquals(expected.index, cursor.index); | |
48 if (expected.value) | |
49 assertEquals(expected.value, cursor.node.attributes.value); | |
50 } | 53 } |
51 } | 54 }, |
52 }; | 55 |
53 | 56 /** |
54 /** Tests basic text movement. */ | 57 * Performs a series of operations on a range and asserts the result. |
55 TEST_F('CursorsTest', 'BasicMovement', function() { | 58 * @param {cursors.Range} range The starting range. |
56 this.runWithDocument(function() {/*! | 59 * @param {!Array.<Array.< |
60 * cursors.Unit| | |
dmazzoni
2014/10/24 16:13:30
funny indentation?
| |
61 * cursors.Movement| | |
62 * automationUtil.Dir| | |
63 * Object>>} | |
64 * moves An array of arrays. Each inner array contains 4 items: unit, | |
65 * direction, start and end assertions objects. See example below. | |
66 */ | |
67 rangeMoveAndAssert: function(range, moves) { | |
68 var move = null; | |
69 while (move = moves.shift()) { | |
70 range = range.move(move[0], move[1]); | |
71 var expectedStart = move[2]; | |
72 var expectedEnd = move[3]; | |
73 this.makeCursorAssertion(expectedStart, range.getStart()); | |
74 this.makeCursorAssertion(expectedEnd, range.getEnd()); | |
75 } | |
76 }, | |
77 | |
78 /** | |
79 * Makes assertions about the given |cursor|. | |
80 * @param {Object} expected | |
81 * @param {Cursor} cursor | |
82 */ | |
83 makeCursorAssertion: function(expected, cursor) { | |
84 if (goog.isDef(expected.index)) | |
85 assertEquals(expected.index, cursor.getIndex()); | |
86 if (goog.isDef(expected.value)) | |
87 assertEquals(expected.value, cursor.getNode().attributes.value); | |
88 }, | |
89 | |
90 /** | |
91 * Runs the specified moves on the |doc| and asserts expectations. | |
92 * @param {function} doc | |
93 * @param {string=} opt_testType Either CURSOR or RANGE. | |
94 */ | |
95 runCursorMovesOnDocument: function(doc, moves, opt_testType) { | |
96 this.runWithDocument(doc, | |
97 function() { | |
98 chrome.automation.getTree(function(root) { | |
99 var start = null; | |
100 | |
101 // This occurs as a result of a load complete. | |
102 var start = AutomationUtil.findNodePost(root, | |
103 FORWARD, | |
104 AutomationPredicate.leaf); | |
105 | |
106 var cursor = new cursors.Cursor(start, 0); | |
107 if (!opt_testType || opt_testType == this.CURSOR) { | |
108 var cursor = new cursors.Cursor(start, 0); | |
109 this.cursorMoveAndAssert(cursor, moves); | |
110 testDone(); | |
111 } else if (opt_testType == this.RANGE) { | |
112 var range = new cursors.Range(cursor, cursor); | |
113 this.rangeMoveAndAssert(range, moves); | |
114 testDone(); | |
115 } | |
116 }.bind(this)); | |
117 }.bind(this)); | |
118 }, | |
119 | |
120 simpleDoc: function() {/*! | |
57 <p>start <span>same line</span> | 121 <p>start <span>same line</span> |
58 <p>end | 122 <p>end |
59 */}, | 123 */} |
60 function() { | 124 }; |
61 chrome.automation.getTree(function(root) { | 125 |
62 // This occurs as a result of a load complete. | 126 TEST_F('CursorsTest', 'CharacterCursor', function() { |
63 var leftmost = AutomationUtil.findNodePost(root, | 127 this.runCursorMovesOnDocument(this.simpleDoc, [ |
64 FORWARD, | 128 [CHARACTER, DIRECTIONAL, FORWARD, {index: 1, value: 'start '}], |
65 AutomationPredicate.leaf); | 129 [CHARACTER, DIRECTIONAL, BACKWARD, {index: 0, value: 'start '}], |
66 assertEquals('start ', leftmost.attributes.value); | 130 [CHARACTER, DIRECTIONAL, BACKWARD, {index: 0, value: 'start '}], |
67 | 131 |
68 // Construct a cursor and make all possible movements. | 132 [CHARACTER, DIRECTIONAL, FORWARD, {index: 1, value: 'start '}], |
69 var cursor = new cursors.Cursor(leftmost, 0); | 133 [CHARACTER, DIRECTIONAL, FORWARD, {index: 2, value: 'start '}], |
70 | 134 [CHARACTER, DIRECTIONAL, FORWARD, {index: 3, value: 'start '}], |
71 this.moveAndAssert(cursor, [ | 135 [CHARACTER, DIRECTIONAL, FORWARD, {index: 4, value: 'start '}], |
72 // Line (BOUND). | 136 [CHARACTER, DIRECTIONAL, FORWARD, {index: 5, value: 'start '}], |
73 [LINE, BOUND, FORWARD, {value: 'same line'}], | 137 |
74 [LINE, BOUND, FORWARD, {value: 'same line'}], | 138 [CHARACTER, DIRECTIONAL, FORWARD, {index: 0, value: 'same line'}], |
75 [LINE, BOUND, BACKWARD, {value: 'start '}], | 139 [CHARACTER, DIRECTIONAL, FORWARD, {index: 1, value: 'same line'}], |
76 [LINE, BOUND, BACKWARD, {value: 'start '}], | 140 [CHARACTER, DIRECTIONAL, BACKWARD, {index: 0, value: 'same line'}], |
77 | 141 |
78 // Line (DIRECTIONAL). | 142 [CHARACTER, DIRECTIONAL, BACKWARD, {index: 5, value: 'start '}],]); |
79 [LINE, DIRECTIONAL, FORWARD, {value: 'end'}], | 143 }); |
80 [LINE, DIRECTIONAL, FORWARD, {value: 'end'}], | 144 |
81 [LINE, DIRECTIONAL, BACKWARD, {value: 'start '}], | 145 TEST_F('CursorsTest', 'WordCursor', function() { |
82 [LINE, DIRECTIONAL, BACKWARD, {value: 'start '}], | 146 this.runCursorMovesOnDocument(this.simpleDoc, [ |
83 [LINE, BOUND, FORWARD, {value: 'same line'}], | 147 // Word (BOUND). |
84 [LINE, DIRECTIONAL, FORWARD, {value: 'end'}], | 148 [WORD, BOUND, BACKWARD, {index: 0, value: 'start '}], |
85 | 149 [WORD, BOUND, BACKWARD, {index: 0, value: 'start '}], |
86 // Character. | 150 [WORD, BOUND, FORWARD, {index: 5, value: 'start '}], |
87 [CHARACTER, DIRECTIONAL, FORWARD, {index: 1}], | 151 [WORD, BOUND, FORWARD, {index: 5, value: 'start '}], |
88 [CHARACTER, DIRECTIONAL, FORWARD, {index: 2}], | 152 |
89 [CHARACTER, DIRECTIONAL, FORWARD, {index: 2}], | 153 // Word (DIRECTIONAL). |
90 [CHARACTER, DIRECTIONAL, BACKWARD, {index: 1}], | 154 [WORD, DIRECTIONAL, FORWARD, {index: 0, value: 'same line'}], |
91 [CHARACTER, DIRECTIONAL, BACKWARD, {index: 0}], | 155 [WORD, DIRECTIONAL, FORWARD, {index: 5, value: 'same line'}], |
92 | 156 |
93 [CHARACTER, DIRECTIONAL, BACKWARD, {index: 8, value: 'same line'}], | 157 [WORD, DIRECTIONAL, FORWARD, {index: 0, value: 'end'}], |
94 [CHARACTER, DIRECTIONAL, FORWARD, {index: 0, value: 'end'}], | 158 [WORD, DIRECTIONAL, FORWARD, {index: 0, value: 'end'}], |
95 [CHARACTER, DIRECTIONAL, BACKWARD, {index: 8, value: 'same line'}], | 159 |
96 | 160 [WORD, DIRECTIONAL, BACKWARD, {index: 5, value: 'same line'}], |
97 [CHARACTER, DIRECTIONAL, BACKWARD, {index: 7, value: 'same line'}], | 161 [WORD, DIRECTIONAL, BACKWARD, {index: 0, value: 'same line'}], |
98 [CHARACTER, DIRECTIONAL, BACKWARD, {index: 6, value: 'same line'}], | 162 |
99 [CHARACTER, DIRECTIONAL, BACKWARD, {index: 5, value: 'same line'}], | 163 [WORD, DIRECTIONAL, BACKWARD, {index: 0, value: 'start '}], |
100 [CHARACTER, DIRECTIONAL, BACKWARD, {index: 4, value: 'same line'}], | 164 [WORD, DIRECTIONAL, BACKWARD, {index: 0, value: 'start '}]]); |
101 [CHARACTER, DIRECTIONAL, BACKWARD, {index: 3, value: 'same line'}], | 165 }); |
102 [CHARACTER, DIRECTIONAL, BACKWARD, {index: 2, value: 'same line'}], | 166 |
103 [CHARACTER, DIRECTIONAL, BACKWARD, {index: 0, value: 'same line'}], | 167 TEST_F('CursorsTest', 'CharacterWordCursor', function() { |
104 [CHARACTER, DIRECTIONAL, BACKWARD, {index: 0, value: 'same line'}], | 168 this.runCursorMovesOnDocument(this.simpleDoc, [ |
105 [CHARACTER, DIRECTIONAL, BACKWARD, {index: 5, value: 'start '}], | 169 [CHARACTER, DIRECTIONAL, FORWARD, {index: 1, value: 'start '}], |
106 | 170 |
107 // Word (BOUND). | 171 [WORD, DIRECTIONAL, FORWARD, {index: 0, value: 'same line'}], |
108 [WORD, BOUND, BACKWARD, {index: 0, value: 'start '}], | 172 [CHARACTER, DIRECTIONAL, FORWARD, {index: 1, value: 'same line'}], |
109 [WORD, BOUND, BACKWARD, {index: 0, value: 'start '}], | 173 [WORD, DIRECTIONAL, FORWARD, {index: 5, value: 'same line'}], |
110 [WORD, BOUND, FORWARD, {index: 5, value: 'start '}], | 174 [CHARACTER, DIRECTIONAL, BACKWARD, {index: 4, value: 'same line'}], |
111 [WORD, BOUND, FORWARD, {index: 5, value: 'start '}], | 175 [WORD, DIRECTIONAL, FORWARD, {index: 5, value: 'same line'}], |
112 | 176 [CHARACTER, DIRECTIONAL, FORWARD, {index: 6, value: 'same line'}], |
113 // Word (DIRECTIONAL). | 177 [WORD, DIRECTIONAL, BACKWARD, {index: 0, value: 'same line'}], |
114 [WORD, DIRECTIONAL, FORWARD, {index: 0, value: 'same line'}], | 178 [CHARACTER, DIRECTIONAL, BACKWARD, {index: 5, value: 'start '}], |
115 [WORD, DIRECTIONAL, FORWARD, {index: 5, value: 'same line'}], | 179 [CHARACTER, DIRECTIONAL, BACKWARD, {index: 4, value: 'start '}], |
116 | 180 [WORD, DIRECTIONAL, BACKWARD, {index: 0, value: 'start '}]]); |
117 [WORD, DIRECTIONAL, FORWARD, {index: 0, value: 'end'}], | 181 }); |
118 [WORD, DIRECTIONAL, FORWARD, {index: 0, value: 'end'}], | 182 |
119 | 183 TEST_F('CursorsTest', 'LineCursor', function() { |
120 [WORD, DIRECTIONAL, BACKWARD, {index: 5, value: 'same line'}], | 184 this.runCursorMovesOnDocument(this.simpleDoc, [ |
121 [WORD, DIRECTIONAL, BACKWARD, {index: 0, value: 'same line'}], | 185 // Line (BOUND). |
122 | 186 [LINE, BOUND, FORWARD, {value: 'same line'}], |
123 [WORD, DIRECTIONAL, BACKWARD, {index: 0, value: 'start '}], | 187 [LINE, BOUND, FORWARD, {value: 'same line'}], |
124 [WORD, DIRECTIONAL, BACKWARD, {index: 0, value: 'start '}], | 188 [LINE, BOUND, BACKWARD, {value: 'start '}], |
125 | 189 [LINE, BOUND, BACKWARD, {value: 'start '}], |
126 // Characters and words. | 190 |
127 [CHARACTER, DIRECTIONAL, FORWARD, {index: 1, value: 'start '}], | 191 // Line (DIRECTIONAL). |
128 | 192 [LINE, DIRECTIONAL, FORWARD, {value: 'end'}], |
129 [WORD, DIRECTIONAL, FORWARD, {index: 0, value: 'same line'}], | 193 [LINE, DIRECTIONAL, FORWARD, {value: 'end'}], |
130 [CHARACTER, DIRECTIONAL, FORWARD, {index: 1, value: 'same line'}], | 194 [LINE, DIRECTIONAL, BACKWARD, {value: 'start '}], |
131 [WORD, DIRECTIONAL, FORWARD, {index: 5, value: 'same line'}], | 195 [LINE, DIRECTIONAL, BACKWARD, {value: 'start '}], |
132 [CHARACTER, DIRECTIONAL, BACKWARD, {index: 4, value: 'same line'}], | 196 [LINE, BOUND, FORWARD, {value: 'same line'}], |
133 [WORD, DIRECTIONAL, FORWARD, {index: 5, value: 'same line'}], | 197 [LINE, DIRECTIONAL, FORWARD, {value: 'end'}]]); |
134 [CHARACTER, DIRECTIONAL, FORWARD, {index: 6, value: 'same line'}], | 198 }); |
135 [WORD, DIRECTIONAL, BACKWARD, {index: 0, value: 'same line'}], | 199 |
136 [CHARACTER, DIRECTIONAL, BACKWARD, {index: 5, value: 'start '}], | 200 TEST_F('CursorsTest', 'CharacterRange', function() { |
137 [CHARACTER, DIRECTIONAL, BACKWARD, {index: 4, value: 'start '}], | 201 this.runCursorMovesOnDocument(this.simpleDoc, [ |
138 [WORD, DIRECTIONAL, BACKWARD, {index: 0, value: 'start '}], | 202 [CHARACTER, FORWARD, |
139 ]); | 203 {value: 'start ', index: 1}, {value: 'start ', index: 2}], |
140 | 204 [CHARACTER, FORWARD, |
141 testDone(); | 205 {value: 'start ', index: 2}, {value: 'start ', index: 3}], |
142 }.bind(this)); | 206 [CHARACTER, FORWARD, |
143 }.bind(this)); | 207 {value: 'start ', index: 3}, {value: 'start ', index: 4}], |
144 }); | 208 [CHARACTER, FORWARD, |
209 {value: 'start ', index: 4}, {value: 'start ', index: 5}], | |
210 [CHARACTER, FORWARD, | |
211 {value: 'start ', index: 5}, {value: 'start ', index: 5}], | |
212 | |
213 [CHARACTER, FORWARD, | |
214 {value: 'same line', index: 0}, {value: 'same line', index: 1}], | |
215 | |
216 [CHARACTER, BACKWARD, | |
217 {value: 'start ', index: 5}, {value: 'start ', index: 5}], | |
218 [CHARACTER, BACKWARD, | |
219 {value: 'start ', index: 4}, {value: 'start ', index: 5}], | |
220 [CHARACTER, BACKWARD, | |
221 {value: 'start ', index: 3}, {value: 'start ', index: 4}], | |
222 [CHARACTER, BACKWARD, | |
223 {value: 'start ', index: 2}, {value: 'start ', index: 3}], | |
224 [CHARACTER, BACKWARD, | |
225 {value: 'start ', index: 1}, {value: 'start ', index: 2}], | |
226 [CHARACTER, BACKWARD, | |
227 {value: 'start ', index: 0}, {value: 'start ', index: 1}], | |
228 [CHARACTER, BACKWARD, | |
229 {value: 'start ', index: 0}, {value: 'start ', index: 1}], | |
230 ], this.RANGE); | |
231 }); | |
232 | |
233 TEST_F('CursorsTest', 'WordRange', function() { | |
234 this.runCursorMovesOnDocument(this.simpleDoc, [ | |
235 [WORD, FORWARD, | |
236 {value: 'same line', index: 0}, {value: 'same line', index: 4}], | |
237 [WORD, FORWARD, | |
238 {value: 'same line', index: 5}, {value: 'same line', index: 9}], | |
239 | |
240 [WORD, FORWARD, | |
241 {value: 'end', index: 0}, {value: 'end', index: 3}], | |
242 [WORD, FORWARD, | |
243 {value: 'end', index: 0}, {value: 'end', index: 3}], | |
244 | |
245 [WORD, BACKWARD, | |
246 {value: 'same line', index: 5}, {value: 'same line', index: 9}], | |
247 [WORD, BACKWARD, | |
248 {value: 'same line', index: 0}, {value: 'same line', index: 4}], | |
249 | |
250 [WORD, BACKWARD, | |
251 {value: 'start ', index: 0}, {value: 'start ', index: 5}], | |
252 [WORD, BACKWARD, | |
253 {value: 'start ', index: 0}, {value: 'start ', index: 5}], | |
254 ], this.RANGE); | |
255 }); | |
256 | |
257 | |
258 TEST_F('CursorsTest', 'LineRange', function() { | |
259 this.runCursorMovesOnDocument(this.simpleDoc, [ | |
260 [LINE, FORWARD, {value: 'end', index: 0}, {value: 'end', index: 2}], | |
261 [LINE, FORWARD, {value: 'end', index: 0}, {value: 'end', index: 2}], | |
262 | |
263 [LINE, BACKWARD, | |
264 {value: 'start ', index: 0}, {value: 'same line', index: 8}], | |
265 | |
266 [LINE, BACKWARD, | |
267 {value: 'start ', index: 0}, {value: 'same line', index: 8}], | |
268 ], this.RANGE); | |
269 }); | |
270 | |
OLD | NEW |