Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(192)

Side by Side Diff: chrome/browser/resources/chromeos/chromevox/cvox2/background/cursors_test.extjs

Issue 637223006: Initial support for Ranges over automation nodes (used to track ChromeVox focus). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add tests for range. Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698