Chromium Code Reviews| 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 |