Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 /** | |
| 6 * @fileoverview Unit tests for the hterm.Screen class. | |
| 7 */ | |
| 8 hterm.Screen.Tests = new TestManager.Suite('hterm.Screen.Tests'); | |
| 9 | |
| 10 /** | |
| 11 * Clear out the current document and create a new hterm.Screen object for | |
| 12 * testing. | |
| 13 * | |
| 14 * Called before each test case in this suite. | |
| 15 */ | |
| 16 hterm.Screen.Tests.prototype.preamble = function(result, cx) { | |
| 17 cx.window.document.body.innerHTML = ''; | |
| 18 cx.window.screen = this.screen = new hterm.Screen(); | |
| 19 cx.window.screen.setColumnCount(80); | |
| 20 }; | |
| 21 | |
| 22 /** | |
| 23 * Test the push and pop functionality of the hterm.Screen. | |
| 24 */ | |
| 25 hterm.Screen.Tests.addTest('push-pop', function(result, cx) { | |
| 26 // Push one at a time. | |
|
arv (Not doing code reviews)
2011/11/28 18:21:00
indentation is off in this file
rginda
2011/11/28 20:39:47
This function body is actually part of a parameter
| |
| 27 var ary = []; | |
| 28 for (var i = 0; i < 10; i++) { | |
| 29 ary[i] = document.createElement('div'); | |
| 30 ary[i].textContent = i; | |
| 31 this.screen.pushRow(ary[i]); | |
| 32 } | |
| 33 | |
| 34 result.assertEQ(ary.length, this.screen.rowsArray.length); | |
|
dgozman
2011/11/29 11:35:42
this.screen.getHeight ?
| |
| 35 | |
| 36 // Pop one at a time. | |
| 37 for (var i = ary.length - 1; i >= 0; i--) { | |
| 38 result.assertEQ(ary[i], this.screen.popRow(), 'i:' + i); | |
| 39 } | |
| 40 | |
| 41 // Bulk push. | |
| 42 this.screen.pushRows(ary); | |
| 43 result.assertEQ(ary.length, this.screen.rowsArray.length); | |
| 44 | |
| 45 // Bulk pop. | |
| 46 var popary = this.screen.popRows(ary.length); | |
| 47 | |
| 48 result.assertEQ(ary.length, popary.length); | |
| 49 | |
| 50 for (var i = ary.length - 1; i >= 0; i--) { | |
| 51 result.assertEQ(ary[i], popary[i], 'i:' + i); | |
| 52 } | |
| 53 | |
| 54 // Reset, then partial bulk pop. | |
| 55 this.screen.pushRows(ary); | |
| 56 result.assertEQ(ary.length, this.screen.rowsArray.length); | |
| 57 | |
| 58 var popary = this.screen.popRows(5); | |
| 59 for (var i = 0; i < 5; i++) { | |
| 60 result.assertEQ(ary[i + 5], popary[i], 'i:' + i); | |
| 61 } | |
| 62 | |
| 63 result.pass(); | |
| 64 }); | |
| 65 | |
| 66 /** | |
| 67 * Test the unshift and shift functionality of the hterm.Screen. | |
| 68 */ | |
| 69 hterm.Screen.Tests.addTest('unshift-shift', function(result, cx) { | |
| 70 // Unshift one at a time. | |
| 71 var ary = []; | |
| 72 for (var i = 0; i < 10; i++) { | |
| 73 ary[i] = document.createElement('div'); | |
| 74 ary[i].textContent = i; | |
| 75 this.screen.unshiftRow(ary[i]); | |
| 76 } | |
| 77 | |
| 78 result.assertEQ(ary.length, this.screen.rowsArray.length); | |
| 79 | |
| 80 // Shift one at a time. | |
| 81 for (var i = ary.length - 1; i >= 0; i--) { | |
| 82 result.assertEQ(ary[i], this.screen.shiftRow(), 'i:' + i); | |
| 83 } | |
| 84 | |
| 85 // Bulk unshift. | |
| 86 this.screen.unshiftRows(ary); | |
| 87 result.assertEQ(ary.length, this.screen.rowsArray.length); | |
| 88 | |
| 89 // Bulk shift. | |
| 90 var shiftary = this.screen.shiftRows(ary.length); | |
| 91 | |
| 92 result.assertEQ(ary.length, shiftary.length); | |
| 93 | |
| 94 for (var i = ary.length - 1; i >= 0; i--) { | |
| 95 result.assertEQ(ary[i], shiftary[i], 'i:' + i); | |
| 96 } | |
| 97 | |
| 98 // Reset, then partial bulk shift. | |
| 99 this.screen.unshiftRows(ary); | |
| 100 result.assertEQ(ary.length, this.screen.rowsArray.length); | |
| 101 | |
| 102 var shiftary = this.screen.shiftRows(5); | |
| 103 for (var i = 0; i < 5; i++) { | |
| 104 result.assertEQ(ary[i], shiftary[i], 'i:' + i); | |
| 105 } | |
| 106 | |
| 107 result.pass(); | |
| 108 }); | |
| 109 | |
| 110 /** | |
| 111 * Test cursor positioning functionality. | |
| 112 */ | |
| 113 hterm.Screen.Tests.addTest('cursor-movement', function(result, cx) { | |
| 114 var ary = []; | |
| 115 | |
| 116 for (var i = 0; i < 3; i++) { | |
| 117 ary[i] = document.createElement('div'); | |
| 118 ary[i].textContent = i; | |
| 119 this.screen.pushRow(ary[i]); | |
| 120 } | |
| 121 | |
| 122 this.screen.setCursorPosition(0, 0); | |
| 123 result.assertEQ(this.screen.cursorRowNode_, ary[0]); | |
| 124 result.assertEQ(this.screen.cursorNode_, ary[0].firstChild); | |
| 125 result.assertEQ(this.screen.cursorOffset_, 0); | |
| 126 | |
| 127 this.screen.setCursorPosition(1, 0); | |
| 128 result.assertEQ(this.screen.cursorRowNode_, ary[1]); | |
| 129 result.assertEQ(this.screen.cursorNode_, ary[1].firstChild); | |
| 130 result.assertEQ(this.screen.cursorOffset_, 0); | |
| 131 | |
| 132 this.screen.setCursorPosition(1, 10); | |
| 133 result.assertEQ(this.screen.cursorRowNode_, ary[1]); | |
| 134 result.assertEQ(this.screen.cursorNode_, ary[1].firstChild); | |
| 135 result.assertEQ(this.screen.cursorOffset_, 10); | |
| 136 | |
| 137 this.screen.setCursorPosition(1, 5); | |
| 138 result.assertEQ(this.screen.cursorRowNode_, ary[1]); | |
| 139 result.assertEQ(this.screen.cursorNode_, ary[1].firstChild); | |
| 140 result.assertEQ(this.screen.cursorOffset_, 5); | |
| 141 | |
| 142 this.screen.setCursorPosition(1, 10); | |
| 143 result.assertEQ(this.screen.cursorRowNode_, ary[1]); | |
| 144 result.assertEQ(this.screen.cursorNode_, ary[1].firstChild); | |
| 145 result.assertEQ(this.screen.cursorOffset_, 10); | |
| 146 | |
| 147 ary[2].innerHTML = '01<div>23</div>45<div>67</div>89'; | |
| 148 | |
| 149 this.screen.setCursorPosition(2, 0); | |
| 150 result.assertEQ(this.screen.cursorRowNode_, ary[2]); | |
| 151 result.assertEQ(this.screen.cursorNode_, ary[2].firstChild); | |
| 152 result.assertEQ(this.screen.cursorOffset_, 0); | |
| 153 | |
| 154 this.screen.setCursorPosition(2, 1); | |
| 155 result.assertEQ(this.screen.cursorRowNode_, ary[2]); | |
| 156 result.assertEQ(this.screen.cursorNode_, ary[2].firstChild); | |
| 157 result.assertEQ(this.screen.cursorOffset_, 1); | |
| 158 | |
| 159 this.screen.setCursorPosition(2, 2); | |
| 160 result.assertEQ(this.screen.cursorRowNode_, ary[2]); | |
| 161 result.assertEQ(this.screen.cursorNode_, ary[2].childNodes[1]); | |
| 162 result.assertEQ(this.screen.cursorOffset_, 0); | |
| 163 | |
| 164 this.screen.setCursorPosition(2, 3); | |
| 165 result.assertEQ(this.screen.cursorRowNode_, ary[2]); | |
| 166 result.assertEQ(this.screen.cursorNode_, ary[2].childNodes[1]); | |
| 167 result.assertEQ(this.screen.cursorOffset_, 1); | |
| 168 | |
| 169 this.screen.setCursorPosition(2, 4); | |
| 170 result.assertEQ(this.screen.cursorRowNode_, ary[2]); | |
| 171 result.assertEQ(this.screen.cursorNode_, ary[2].childNodes[2]); | |
| 172 result.assertEQ(this.screen.cursorOffset_, 0); | |
| 173 | |
| 174 this.screen.setCursorPosition(2, 5); | |
| 175 result.assertEQ(this.screen.cursorRowNode_, ary[2]); | |
| 176 result.assertEQ(this.screen.cursorNode_, ary[2].childNodes[2]); | |
| 177 result.assertEQ(this.screen.cursorOffset_, 1); | |
| 178 | |
| 179 this.screen.setCursorPosition(2, 6); | |
| 180 result.assertEQ(this.screen.cursorRowNode_, ary[2]); | |
| 181 result.assertEQ(this.screen.cursorNode_, ary[2].childNodes[3]); | |
| 182 result.assertEQ(this.screen.cursorOffset_, 0); | |
| 183 | |
| 184 this.screen.setCursorPosition(2, 7); | |
| 185 result.assertEQ(this.screen.cursorRowNode_, ary[2]); | |
| 186 result.assertEQ(this.screen.cursorNode_, ary[2].childNodes[3]); | |
| 187 result.assertEQ(this.screen.cursorOffset_, 1); | |
| 188 | |
| 189 this.screen.setCursorPosition(2, 8); | |
| 190 result.assertEQ(this.screen.cursorRowNode_, ary[2]); | |
| 191 result.assertEQ(this.screen.cursorNode_, ary[2].childNodes[4]); | |
| 192 result.assertEQ(this.screen.cursorOffset_, 0); | |
| 193 | |
| 194 this.screen.setCursorPosition(2, 9); | |
| 195 result.assertEQ(this.screen.cursorRowNode_, ary[2]); | |
| 196 result.assertEQ(this.screen.cursorNode_, ary[2].childNodes[4]); | |
| 197 result.assertEQ(this.screen.cursorOffset_, 1); | |
| 198 | |
| 199 this.screen.setCursorPosition(2, 18); | |
| 200 result.assertEQ(this.screen.cursorRowNode_, ary[2]); | |
| 201 result.assertEQ(this.screen.cursorNode_, ary[2].childNodes[4]); | |
| 202 result.assertEQ(this.screen.cursorOffset_, 10); | |
| 203 | |
| 204 result.pass(); | |
| 205 }); | |
| 206 | |
| 207 /** | |
| 208 * Test character removal. | |
| 209 */ | |
| 210 hterm.Screen.Tests.addTest('delete-chars', function(result, cx) { | |
| 211 var row = document.createElement('div'); | |
| 212 row.innerHTML = 'hello<div id="1"> </div><div id="2">world</div>'; | |
| 213 this.screen.pushRow(row); | |
| 214 | |
| 215 this.screen.setCursorPosition(0, 3); | |
| 216 this.screen.deleteChars(5); | |
| 217 | |
| 218 result.assertEQ(row.innerHTML, 'hel<div id="2">rld</div>'); | |
| 219 result.pass(); | |
| 220 }); | |
| 221 | |
| 222 /** | |
| 223 * Test the ability to insert text in a line. | |
| 224 */ | |
| 225 hterm.Screen.Tests.addTest('insert', function(result, cx) { | |
| 226 // Sample rows. Row 0 is a simple, empty row. Row 1 simulates rows with | |
| 227 // mixed text attributes. | |
| 228 var ary = [document.createElement('div'), document.createElement('div')]; | |
| 229 ary[1].innerHTML = 'hello<div id="1"> </div><div id="2">world</div>'; | |
| 230 this.screen.pushRows(ary); | |
| 231 | |
| 232 // Basic insert. | |
| 233 this.screen.setCursorPosition(0, 0); | |
| 234 this.screen.insertString('XXXXX'); | |
| 235 result.assertEQ(ary[0].innerHTML, 'XXXXX'); | |
| 236 | |
| 237 // Test that positioning the cursor beyond the end of the current text does | |
| 238 // not cause spaces to be printed. | |
| 239 this.screen.clearCursorRow(); | |
| 240 this.screen.setCursorPosition(0, 3); | |
| 241 result.assertEQ(ary[0].innerHTML, ''); | |
| 242 | |
| 243 // Print some text at this cursor position and make sure the spaces show up. | |
| 244 this.screen.insertString('XXXXX'); | |
| 245 result.assertEQ(ary[0].innerHTML, ' XXXXX'); | |
| 246 | |
| 247 // Fetch enough whitespace to ensure that the row is full. | |
| 248 var ws = hterm.getWhitespace(this.screen.getWidth()); | |
| 249 | |
| 250 // Check simple overflow. | |
| 251 this.screen.clearCursorRow(); | |
| 252 this.screen.insertString('XXXX'); | |
| 253 this.screen.setCursorPosition(0, 0); | |
|
dgozman
2011/11/29 11:35:42
What about inserting at (0, 1)?
rginda
2011/11/29 19:26:12
I'm not sure I understand the question. I test in
| |
| 254 var overflow = this.screen.insertString(ws); | |
| 255 result.assertEQ(overflow, 'XXXX'); | |
| 256 | |
| 257 // Insert into a more complicated row. | |
| 258 this.screen.setCursorPosition(1, 3); | |
| 259 this.screen.insertString('XXXXX'); | |
| 260 result.assertEQ(ary[1].innerHTML, 'helXXXXXlo<div id="1"> </div>' + | |
| 261 '<div id="2">world</div>'); | |
| 262 | |
| 263 // Check that multi-attribute is not implemented. We'll want a better test | |
| 264 // once its implemented. | |
| 265 this.screen.setCursorPosition(1, 0); | |
| 266 try { | |
| 267 this.screen.insertString(ws); | |
| 268 result.assert(false); | |
| 269 } catch (ex) { | |
| 270 result.assertEQ(ex, 'NOT IMPLEMENTED'); | |
| 271 } | |
| 272 | |
| 273 result.pass(); | |
| 274 }); | |
| 275 | |
| 276 /** | |
| 277 * Test the ability to overwrite test. | |
| 278 */ | |
| 279 hterm.Screen.Tests.addTest('overwrite', function(result, cx) { | |
| 280 var ary = []; | |
| 281 ary[0] = document.createElement('div'); | |
| 282 ary[0].innerHTML = 'hello<div id="1"> </div><div id="2">world</div>'; | |
| 283 ary[1] = document.createElement('div'); | |
| 284 this.screen.pushRows(ary); | |
| 285 | |
| 286 this.screen.setCursorPosition(0, 3); | |
| 287 this.screen.overwriteString('XXXXX'); | |
| 288 | |
| 289 result.assertEQ(ary[0].innerHTML, 'helXXXXX<div id="2">rld</div>'); | |
| 290 | |
| 291 this.screen.setCursorPosition(1, 0); | |
| 292 this.screen.overwriteString('XXXXX'); | |
| 293 | |
| 294 result.assertEQ(ary[1].innerHTML, 'XXXXX'); | |
| 295 | |
| 296 result.pass(); | |
| 297 }); | |
| OLD | NEW |