test_nsITableEditor_deleteTableColumn.html (29379B)
1 <!DOCTYPE> 2 <html> 3 <head> 4 <title>Test for nsITableEditor.deleteTableColumn()</title> 5 <script src="/tests/SimpleTest/SimpleTest.js"></script> 6 <link rel="stylesheet" href="/tests/SimpleTest/test.css"> 7 </head> 8 <body> 9 <div id="display"> 10 </div> 11 <div id="content" contenteditable>out of table<table><tr><td>default content</td></tr></table></div> 12 <pre id="test"> 13 </pre> 14 15 <script class="testbody" type="application/javascript"> 16 "use strict"; 17 18 SimpleTest.waitForExplicitFinish(); 19 SimpleTest.waitForFocus(() => { 20 let editor = document.getElementById("content"); 21 let selection = document.getSelection(); 22 let selectionRanges = []; 23 24 function checkInputEvent(aEvent, aDescription) { 25 ok(aEvent instanceof InputEvent, 26 `"${aEvent.type}" event should be dispatched with InputEvent interface ${aDescription}`); 27 is(aEvent.cancelable, aEvent.type === "beforeinput", 28 `"${aEvent.type}" event should ${aEvent.type === "beforeinput" ? "be" : "be never"} cancelable ${aDescription}`); 29 is(aEvent.bubbles, true, 30 `"${aEvent.type}" event should always bubble ${aDescription}`); 31 is(aEvent.inputType, "deleteContent", 32 `inputType of "${aEvent.type}" event should be "deleteContent" ${aDescription}`); 33 is(aEvent.data, null, 34 `data of "${aEvent.type}" event should be null ${aDescription}`); 35 is(aEvent.dataTransfer, null, 36 `dataTransfer of "${aEvent.type}" event should be null ${aDescription}`); 37 let targetRanges = aEvent.getTargetRanges(); 38 if (aEvent.type === "beforeinput") { 39 is(targetRanges.length, selectionRanges.length, 40 `getTargetRanges() of "beforeinput" event should return selection ranges ${aDescription}`); 41 if (targetRanges.length === selectionRanges.length) { 42 for (let i = 0; i < selectionRanges.length; i++) { 43 is(targetRanges[i].startContainer, selectionRanges[i].startContainer, 44 `startContainer of getTargetRanges()[${i}] of "beforeinput" event does not match ${aDescription}`); 45 is(targetRanges[i].startOffset, selectionRanges[i].startOffset, 46 `startOffset of getTargetRanges()[${i}] of "beforeinput" event does not match ${aDescription}`); 47 is(targetRanges[i].endContainer, selectionRanges[i].endContainer, 48 `endContainer of getTargetRanges()[${i}] of "beforeinput" event does not match ${aDescription}`); 49 is(targetRanges[i].endOffset, selectionRanges[i].endOffset, 50 `endOffset of getTargetRanges()[${i}] of "beforeinput" event does not match ${aDescription}`); 51 } 52 } 53 } else { 54 is(targetRanges.length, 0, 55 `getTargetRanges() of "${aEvent.type}" event should return empty array ${aDescription}`); 56 } 57 } 58 59 let beforeInputEvents = []; 60 let inputEvents = []; 61 function onBeforeInput(aEvent) { 62 beforeInputEvents.push(aEvent); 63 selectionRanges = []; 64 for (let i = 0; i < selection.rangeCount; i++) { 65 let range = selection.getRangeAt(i); 66 selectionRanges.push({startContainer: range.startContainer, startOffset: range.startOffset, 67 endContainer: range.endContainer, endOffset: range.endOffset}); 68 } 69 } 70 function onInput(aEvent) { 71 inputEvents.push(aEvent); 72 } 73 editor.addEventListener("beforeinput", onBeforeInput); 74 editor.addEventListener("input", onInput); 75 76 beforeInputEvents = []; 77 inputEvents = []; 78 selection.collapse(editor.firstChild, 0); 79 getTableEditor().deleteTableColumn(1); 80 is(editor.innerHTML, "out of table<table><tbody><tr><td>default content</td></tr></tbody></table>", 81 "nsITableEditor.deleteTableColumn(1) should do nothing if selection is not in <table>"); 82 // If there were specific inputType value for this API, we should dispatch cancelable "beforeinput", though. 83 is(beforeInputEvents.length, 1, 84 '"beforeinput" event should be fired when a call of nsITableEditor.deleteTableColumn(1) will do nothing'); 85 checkInputEvent(beforeInputEvents[0], "when selection is collapsed outside table element (nsITableEditor.deleteTableColumn(1))"); 86 is(inputEvents.length, 0, 87 'No "input" event should be fired when a call of nsITableEditor.deleteTableColumn(1) does nothing'); 88 89 selection.removeAllRanges(); 90 try { 91 beforeInputEvents = []; 92 inputEvents = []; 93 getTableEditor().deleteTableColumn(1); 94 ok(false, "getTableEditor().deleteTableColumn(1) without selection ranges should throw exception"); 95 } catch (e) { 96 ok(true, "getTableEditor().deleteTableColumn(1) without selection ranges should throw exception"); 97 is(beforeInputEvents.length, 0, 98 'No "beforeinput" event should be fired when nsITableEditor.deleteTableColumn(1) causes exception due to no selection range'); 99 is(inputEvents.length, 0, 100 'No "input" event should be fired when nsITableEditor.deleteTableColumn(1) causes exception due to no selection range'); 101 } 102 103 // If a cell is selected and the argument is less than number of rows, 104 // specified number of rows should be removed starting from the row 105 // containing the selected cell. But if the argument is same or 106 // larger than actual number of rows, the <table> should be removed. 107 selection.removeAllRanges(); 108 editor.innerHTML = 109 '<table><tr><td id="select">cell1-1</td><td>cell1-2</td></tr><tr><td>cell2-1</td><td>cell2-2</td></tr></table>'; 110 beforeInputEvents = []; 111 inputEvents = []; 112 let range = document.createRange(); 113 range.selectNode(document.getElementById("select")); 114 selection.addRange(range); 115 getTableEditor().deleteTableColumn(1); 116 is(editor.innerHTML, "<table><tbody><tr><td>cell1-2</td></tr><tr><td>cell2-2</td></tr></tbody></table>", 117 "nsITableEditor.deleteTableColumn(1) should delete the first column when a cell in the first column is selected"); 118 is(beforeInputEvents.length, 1, 119 'Only one "beforeinput" event should be fired when a cell in the first column is selected'); 120 checkInputEvent(beforeInputEvents[0], "when a cell in the first column is selected"); 121 is(inputEvents.length, 1, 122 'Only one "input" event should be fired when a cell in the first column is selected'); 123 checkInputEvent(inputEvents[0], "when a cell in the first column is selected"); 124 125 selection.removeAllRanges(); 126 editor.innerHTML = 127 '<table><tr><td>cell1-1</td><td>cell1-2</td></tr><tr><td>cell2-1</td><td id="select">cell2-2</td></tr></table>'; 128 beforeInputEvents = []; 129 inputEvents = []; 130 range = document.createRange(); 131 range.selectNode(document.getElementById("select")); 132 selection.addRange(range); 133 getTableEditor().deleteTableColumn(1); 134 is(editor.innerHTML, "<table><tbody><tr><td>cell1-1</td></tr><tr><td>cell2-1</td></tr></tbody></table>", 135 "nsITableEditor.deleteTableColumn(1) should delete the second column when a cell in the second column is selected"); 136 is(beforeInputEvents.length, 1, 137 'Only one "beforeinput" event should be fired when a cell in the second column is selected'); 138 checkInputEvent(beforeInputEvents[0], "when a cell in the second column is selected"); 139 is(inputEvents.length, 1, 140 'Only one "input" event should be fired when a cell in the second column is selected'); 141 checkInputEvent(inputEvents[0], "when a cell in the second column is selected"); 142 143 selection.removeAllRanges(); 144 editor.innerHTML = 145 '<table><tr><td id="select">cell1-1</td><td>cell1-2</td></tr><tr><td>cell2-1</td><td>cell2-2</td></tr></table>'; 146 beforeInputEvents = []; 147 inputEvents = []; 148 range = document.createRange(); 149 range.selectNode(document.getElementById("select")); 150 selection.addRange(range); 151 getTableEditor().deleteTableColumn(2); 152 is(editor.innerHTML, "", 153 "nsITableEditor.deleteTableColumn(2) should delete the <table> since there is only 2 columns"); 154 is(beforeInputEvents.length, 1, 155 'Only one "beforeinput" event should be fired when a cell in first column is selected and argument is same as number of rows'); 156 checkInputEvent(beforeInputEvents[0], "when a cell in first column is selected and argument is same as number of rows"); 157 is(inputEvents.length, 1, 158 'Only one "input" event should be fired when a cell in first column is selected and argument is same as number of rows'); 159 checkInputEvent(inputEvents[0], "when a cell in first column is selected and argument is same as number of rows"); 160 161 selection.removeAllRanges(); 162 editor.innerHTML = 163 '<table><tr><td id="select">cell1-1</td><td>cell1-2</td></tr><tr><td>cell2-1</td><td>cell2-2</td></tr></table>'; 164 beforeInputEvents = []; 165 inputEvents = []; 166 range = document.createRange(); 167 range.selectNode(document.getElementById("select")); 168 selection.addRange(range); 169 getTableEditor().deleteTableColumn(3); 170 is(editor.innerHTML, "", 171 "nsITableEditor.deleteTableColumn(3) should delete the <table> when argument is larger than actual number of columns"); 172 is(beforeInputEvents.length, 1, 173 'Only one "beforeinput" event should be fired when argument is larger than actual number of columns'); 174 checkInputEvent(beforeInputEvents[0], "when argument is larger than actual number of columns"); 175 is(inputEvents.length, 1, 176 'Only one "input" event should be fired when argument is larger than actual number of columns'); 177 checkInputEvent(inputEvents[0], "when argument is larger than actual number of columns"); 178 179 selection.removeAllRanges(); 180 editor.innerHTML = 181 '<table><tr><td>cell1-1</td><td id="select">cell1-2</td><td>cell1-3</td></tr><tr><td>cell2-1</td><td>cell2-2</td><td>cell2-3</td></tr></table>'; 182 beforeInputEvents = []; 183 inputEvents = []; 184 range = document.createRange(); 185 range.selectNode(document.getElementById("select")); 186 selection.addRange(range); 187 getTableEditor().deleteTableColumn(2); 188 is(editor.innerHTML, "<table><tbody><tr><td>cell1-1</td></tr><tr><td>cell2-1</td></tr></tbody></table>", 189 "nsITableEditor.deleteTableColumn(2) should delete the second column containing selected cell and next column"); 190 is(beforeInputEvents.length, 1, 191 'Only one "beforeinput" event should be fired when a cell in second column and argument is same as the remaining columns'); 192 checkInputEvent(beforeInputEvents[0], "when a cell in second column and argument is same as the remaining columns"); 193 is(inputEvents.length, 1, 194 'Only one "input" event should be fired when a cell in second column and argument is same as the remaining columns'); 195 checkInputEvent(inputEvents[0], "when a cell in second column and argument is same as the remaining columns"); 196 197 selection.removeAllRanges(); 198 editor.innerHTML = 199 '<table><tr><td>cell1-1</td><td>cell1-2</td></tr><tr><td id="select">cell2-1</td><td>cell2-2</td></tr><tr><td>cell3-1</td><td>cell3-2</td></tr></table>'; 200 beforeInputEvents = []; 201 inputEvents = []; 202 range = document.createRange(); 203 range.selectNode(document.getElementById("select")); 204 selection.addRange(range); 205 getTableEditor().deleteTableColumn(3); 206 is(editor.innerHTML, "", 207 "nsITableEditor.deleteTableColumn(3) should delete the <table> since the argument equals actual number of columns"); 208 is(beforeInputEvents.length, 1, 209 'Only one "beforeinput" event should be fired when a cell in first column and argument is larger than the remaining columns'); 210 checkInputEvent(beforeInputEvents[0], "when a cell in first column and argument is larger than the remaining columns"); 211 is(inputEvents.length, 1, 212 'Only one "input" event should be fired when a cell in first column and argument is larger than the remaining columns'); 213 checkInputEvent(inputEvents[0], "when a cell in first column and argument is larger than the remaining columns"); 214 215 // Similar to selected a cell, when selection is in a cell, the cell should 216 // treated as selected. 217 selection.removeAllRanges(); 218 editor.innerHTML = 219 '<table><tr><td id="select">cell1-1</td><td>cell1-2</td></tr><tr><td>cell2-1</td><td>cell2-2</td></tr></table>'; 220 beforeInputEvents = []; 221 inputEvents = []; 222 range = document.createRange(); 223 range.selectNode(document.getElementById("select").firstChild); 224 selection.addRange(range); 225 getTableEditor().deleteTableColumn(1); 226 is(editor.innerHTML, "<table><tbody><tr><td>cell1-2</td></tr><tr><td>cell2-2</td></tr></tbody></table>", 227 "nsITableEditor.deleteTableColumn(1) should delete the first column when a cell in the first column contains selection range"); 228 is(beforeInputEvents.length, 1, 229 'Only one "beforeinput" event should be fired when a cell in the first column contains selection range'); 230 checkInputEvent(beforeInputEvents[0], "when a cell in the first column contains selection range"); 231 is(inputEvents.length, 1, 232 'Only one "input" event should be fired when a cell in the first column contains selection range'); 233 checkInputEvent(inputEvents[0], "when a cell in the first column contains selection range"); 234 235 selection.removeAllRanges(); 236 editor.innerHTML = 237 '<table><tr><td>cell1-1</td><td>cell1-2</td></tr><tr><td>cell2-1</td><td id="select">cell2-2</td></tr></table>'; 238 beforeInputEvents = []; 239 inputEvents = []; 240 range = document.createRange(); 241 range.selectNode(document.getElementById("select").firstChild); 242 selection.addRange(range); 243 getTableEditor().deleteTableColumn(1); 244 is(editor.innerHTML, "<table><tbody><tr><td>cell1-1</td></tr><tr><td>cell2-1</td></tr></tbody></table>", 245 "nsITableEditor.deleteTableColumn(1) should delete the second column when a cell in the second column contains selection range"); 246 is(beforeInputEvents.length, 1, 247 'Only one "beforeinput" event should be fired when a cell in the second column contains selection range'); 248 checkInputEvent(beforeInputEvents[0], "when a cell in the second column contains selection range"); 249 is(inputEvents.length, 1, 250 'Only one "input" event should be fired when a cell in the second column contains selection range'); 251 checkInputEvent(inputEvents[0], "when a cell in the second column contains selection range"); 252 253 selection.removeAllRanges(); 254 editor.innerHTML = 255 '<table><tr><td id="select">cell1-1</td><td>cell1-2</td></tr><tr><td>cell2-1</td><td>cell2-2</td></tr></table>'; 256 beforeInputEvents = []; 257 inputEvents = []; 258 range = document.createRange(); 259 range.selectNode(document.getElementById("select").firstChild); 260 selection.addRange(range); 261 getTableEditor().deleteTableColumn(2); 262 is(editor.innerHTML, "", 263 "nsITableEditor.deleteTableColumn(2) should delete the <table> since there is only 2 columns"); 264 is(beforeInputEvents.length, 1, 265 'Only one "beforeinput" event should be fired when all text in a cell in first column is selected and argument includes next row'); 266 checkInputEvent(beforeInputEvents[0], "when all text in a cell in first column is selected and argument includes next row"); 267 is(inputEvents.length, 1, 268 'Only one "input" event should be fired when all text in a cell in first column is selected and argument includes next row'); 269 checkInputEvent(inputEvents[0], "when all text in a cell in first column is selected and argument includes next row"); 270 271 selection.removeAllRanges(); 272 editor.innerHTML = 273 '<table><tr><td id="select">cell1-1</td><td>cell1-2</td></tr><tr><td>cell2-1</td><td>cell2-2</td></tr></table>'; 274 beforeInputEvents = []; 275 inputEvents = []; 276 range = document.createRange(); 277 range.selectNode(document.getElementById("select").firstChild); 278 selection.addRange(range); 279 getTableEditor().deleteTableColumn(3); 280 is(editor.innerHTML, "", 281 "nsITableEditor.deleteTableColumn(3) should delete the <table> when argument is larger than actual number of columns"); 282 is(beforeInputEvents.length, 1, 283 'Only one "beforeinput" event should be fired when all text in a cell in first column is selected and argument is same as number of all rows'); 284 checkInputEvent(beforeInputEvents[0], "when all text in a cell in first column is selected and argument is same as number of all rows"); 285 is(inputEvents.length, 1, 286 'Only one "input" event should be fired when all text in a cell in first column is selected and argument is same as number of all rows'); 287 checkInputEvent(inputEvents[0], "when all text in a cell in first column is selected and argument is same as number of all rows"); 288 289 selection.removeAllRanges(); 290 editor.innerHTML = 291 '<table><tr><td>cell1-1</td><td id="select">cell1-2</td><td>cell1-3</td></tr><tr><td>cell2-1</td><td>cell2-2</td><td>cell2-3</td></tr></table>'; 292 beforeInputEvents = []; 293 inputEvents = []; 294 range = document.createRange(); 295 range.selectNode(document.getElementById("select").firstChild); 296 selection.addRange(range); 297 getTableEditor().deleteTableColumn(2); 298 is(editor.innerHTML, "<table><tbody><tr><td>cell1-1</td></tr><tr><td>cell2-1</td></tr></tbody></table>", 299 "nsITableEditor.deleteTableColumn(2) should delete the second column containing a cell containing selection range and next column"); 300 is(beforeInputEvents.length, 1, 301 'Only one "beforeinput" event should be fired when all text in a cell is selected and argument is same than renaming number of columns'); 302 checkInputEvent(beforeInputEvents[0], "when all text in a cell is selected and argument is same than renaming number of columns"); 303 is(inputEvents.length, 1, 304 'Only one "input" event should be fired when all text in a cell is selected and argument is same than renaming number of columns'); 305 checkInputEvent(inputEvents[0], "when all text in a cell is selected and argument is same than renaming number of columns"); 306 307 selection.removeAllRanges(); 308 editor.innerHTML = 309 '<table><tr><td>cell1-1</td><td>cell1-2</td></tr><tr><td id="select">cell2-1</td><td>cell2-2</td></tr><tr><td>cell3-1</td><td>cell3-2</td></tr></table>'; 310 beforeInputEvents = []; 311 inputEvents = []; 312 range = document.createRange(); 313 range.selectNode(document.getElementById("select").firstChild); 314 selection.addRange(range); 315 getTableEditor().deleteTableColumn(3); 316 is(editor.innerHTML, "", 317 "nsITableEditor.deleteTableColumn(3) should delete the <table> since the argument equals actual number of columns"); 318 is(beforeInputEvents.length, 1, 319 'Only one "beforeinput" event should be fired when all text in a cell in the first column and argument is larger than renaming number of columns'); 320 checkInputEvent(beforeInputEvents[0], "when all text in a cell in the first column and argument is larger than renaming number of columns"); 321 is(inputEvents.length, 1, 322 'Only one "input" event should be fired when all text in a cell in the first column and argument is larger than renaming number of columns'); 323 checkInputEvent(inputEvents[0], "when all text in a cell in the first column and argument is larger than renaming number of columns"); 324 325 // The argument should be ignored when 2 or more cells are selected. 326 // XXX Different from deleteTableRow(), this removes the <table> completely. 327 selection.removeAllRanges(); 328 editor.innerHTML = 329 '<table><tr><td id="select1">cell1-1</td><td>cell1-2</td></tr><tr><td>cell2-1</td><td id="select2">cell2-2</td></tr></table>'; 330 beforeInputEvents = []; 331 inputEvents = []; 332 range = document.createRange(); 333 range.selectNode(document.getElementById("select1")); 334 selection.addRange(range); 335 range = document.createRange(); 336 range.selectNode(document.getElementById("select2")); 337 selection.addRange(range); 338 getTableEditor().deleteTableColumn(1); 339 is(editor.innerHTML, "", 340 "nsITableEditor.deleteTableColumn(1) should delete the <table> when both columns have selected cell"); 341 is(beforeInputEvents.length, 1, 342 'Only one "beforeinput" event should be fired when both columns have selected cell'); 343 checkInputEvent(beforeInputEvents[0], "when both columns have selected cell"); 344 is(inputEvents.length, 1, 345 'Only one "input" event should be fired when both columns have selected cell'); 346 checkInputEvent(inputEvents[0], "when both columns have selected cell"); 347 348 selection.removeAllRanges(); 349 editor.innerHTML = 350 '<table><tr><td id="select1">cell1-1</td><td>cell1-2</td></tr><tr><td id="select2">cell2-1</td><td>cell2-2</td></tr></table>'; 351 beforeInputEvents = []; 352 inputEvents = []; 353 range = document.createRange(); 354 range.selectNode(document.getElementById("select1")); 355 selection.addRange(range); 356 range = document.createRange(); 357 range.selectNode(document.getElementById("select2")); 358 selection.addRange(range); 359 getTableEditor().deleteTableColumn(2); 360 is(editor.innerHTML, "", 361 "nsITableEditor.deleteTableColumn(2) should delete the <table> since 2 is number of columns of the <table>"); 362 is(beforeInputEvents.length, 1, 363 'Only one "beforeinput" event should be fired when cells in every column are selected #2'); 364 checkInputEvent(beforeInputEvents[0], "when cells in every column are selected #2"); 365 is(inputEvents.length, 1, 366 'Only one "input" event should be fired when cells in every column are selected #2'); 367 checkInputEvent(inputEvents[0], "when cells in every column are selected #2"); 368 369 selection.removeAllRanges(); 370 editor.innerHTML = 371 '<table><tr><td id="select1">cell1-1</td><td>cell1-2</td></tr><tr><td id="select2">cell2-1</td><td>cell2-2</td></tr></table>'; 372 beforeInputEvents = []; 373 inputEvents = []; 374 range = document.createRange(); 375 range.selectNode(document.getElementById("select1")); 376 selection.addRange(range); 377 range = document.createRange(); 378 range.selectNode(document.getElementById("select2")); 379 selection.addRange(range); 380 getTableEditor().deleteTableColumn(2); 381 is(editor.innerHTML, "", 382 "nsITableEditor.deleteTableColumn(2) should delete the <table> since 2 is number of columns of the <table>"); 383 is(beforeInputEvents.length, 1, 384 'Only one "beforeinput" event should be fired when 2 cells in same column are selected'); 385 checkInputEvent(beforeInputEvents[0], "when 2 cells in same column are selected"); 386 is(inputEvents.length, 1, 387 'Only one "input" event should be fired when 2 cells in same column are selected'); 388 checkInputEvent(inputEvents[0], "when 2 cells in same column are selected"); 389 390 selection.removeAllRanges(); 391 editor.innerHTML = 392 '<table><tr><td id="select1">cell1-1</td><td id="select2">cell1-2</td><td>cell1-3</td></tr><tr><td>cell2-1</td><td>cell2-2</td><td>cell2-3</td></tr></table>'; 393 beforeInputEvents = []; 394 inputEvents = []; 395 range = document.createRange(); 396 range.selectNode(document.getElementById("select1")); 397 selection.addRange(range); 398 range = document.createRange(); 399 range.selectNode(document.getElementById("select2")); 400 selection.addRange(range); 401 getTableEditor().deleteTableColumn(1); 402 is(editor.innerHTML, "<table><tbody><tr><td>cell1-3</td></tr><tr><td>cell2-3</td></tr></tbody></table>", 403 "nsITableEditor.deleteTableColumn(1) should delete first 2 columns because cells in the both columns are selected"); 404 is(beforeInputEvents.length, 1, 405 'Only one "beforeinput" event should be fired when 2 cell elements in different columns are selected #1'); 406 checkInputEvent(beforeInputEvents[0], "when 2 cell elements in different columns are selected #1"); 407 is(inputEvents.length, 1, 408 'Only one "input" event should be fired when 2 cell elements in different columns are selected #1'); 409 checkInputEvent(inputEvents[0], "when 2 cell elements in different columns are selected #1"); 410 411 selection.removeAllRanges(); 412 editor.innerHTML = 413 '<table><tr><td id="select1">cell1-1</td><td>cell1-2</td><td id="select2">cell1-3</td></tr><tr><td>cell2-1</td><td>cell2-2</td><td>cell2-3</td></tr></table>'; 414 beforeInputEvents = []; 415 inputEvents = []; 416 range = document.createRange(); 417 range.selectNode(document.getElementById("select1")); 418 selection.addRange(range); 419 range = document.createRange(); 420 range.selectNode(document.getElementById("select2")); 421 selection.addRange(range); 422 getTableEditor().deleteTableColumn(1); 423 is(editor.innerHTML, "<table><tbody><tr><td>cell1-2</td></tr><tr><td>cell2-2</td></tr></tbody></table>", 424 "nsITableEditor.deleteTableColumn(1) should delete the first and the last columns because cells in the both columns are selected"); 425 is(beforeInputEvents.length, 1, 426 'Only one "beforeinput" event should be fired when 2 cell elements in different columns are selected #2'); 427 checkInputEvent(beforeInputEvents[0], "when 2 cell elements in different columns are selected #2"); 428 is(inputEvents.length, 1, 429 'Only one "input" event should be fired when 2 cell elements in different columns are selected #2'); 430 checkInputEvent(inputEvents[0], "when 2 cell elements in different columns are selected #2"); 431 432 selection.removeAllRanges(); 433 editor.innerHTML = 434 '<table><tr><td id="select" colspan="2">cell1-1</td><td>cell1-3</td></tr><tr><td>cell2-1</td><td>cell2-2</td><td>cell2-3</td></tr></table>'; 435 beforeInputEvents = []; 436 inputEvents = []; 437 range = document.createRange(); 438 range.selectNode(document.getElementById("select")); 439 selection.addRange(range); 440 getTableEditor().deleteTableColumn(1); 441 is(editor.innerHTML, '<table><tbody><tr><td id="select" colspan="1"><br></td><td>cell1-3</td></tr><tr><td>cell2-2</td><td>cell2-3</td></tr></tbody></table>', 442 "nsITableEditor.deleteTableColumn(1) with a selected cell is colspan=\"2\" should delete the first column and add empty cell to the second column"); 443 is(beforeInputEvents.length, 1, 444 'Only one "beforeinput" event should be fired when a cell is selected and its colspan is 2'); 445 checkInputEvent(beforeInputEvents[0], "when a cell is selected and its colspan is 2"); 446 is(inputEvents.length, 1, 447 'Only one "input" event should be fired when a cell is selected and its colspan is 2'); 448 checkInputEvent(inputEvents[0], "when a cell is selected and its colspan is 2"); 449 450 selection.removeAllRanges(); 451 editor.innerHTML = 452 '<table><tr><td id="select" colspan="3">cell1-1</td></tr><tr><td>cell2-1</td><td>cell2-2</td><td>cell2-3</td></tr></table>'; 453 beforeInputEvents = []; 454 inputEvents = []; 455 range = document.createRange(); 456 range.selectNode(document.getElementById("select")); 457 selection.addRange(range); 458 getTableEditor().deleteTableColumn(1); 459 is(editor.innerHTML, '<table><tbody><tr><td id="select" colspan="2"><br></td></tr><tr><td>cell2-2</td><td>cell2-3</td></tr></tbody></table>', 460 "nsITableEditor.deleteTableColumn(1) with a selected cell is colspan=\"3\" should delete the first column and add empty cell whose colspan is 2 to the second column"); 461 is(beforeInputEvents.length, 1, 462 'Only one "beforeinput" event should be fired when a cell is selected and its colspan is 3'); 463 checkInputEvent(beforeInputEvents[0], "when a cell is selected and its colspan is 3"); 464 is(inputEvents.length, 1, 465 'Only one "input" event should be fired when a cell is selected and its colspan is 3'); 466 checkInputEvent(inputEvents[0], "when a cell is selected and its colspan is 3"); 467 468 selection.removeAllRanges(); 469 editor.innerHTML = 470 '<table><tr><td colspan="3">cell1-1</td></tr><tr><td>cell2-1</td><td id="select">cell2-2</td><td>cell2-3</td></tr></table>'; 471 beforeInputEvents = []; 472 inputEvents = []; 473 range = document.createRange(); 474 range.selectNode(document.getElementById("select")); 475 selection.addRange(range); 476 getTableEditor().deleteTableColumn(1); 477 is(editor.innerHTML, '<table><tbody><tr><td colspan="2">cell1-1</td></tr><tr><td>cell2-1</td><td>cell2-3</td></tr></tbody></table>', 478 "nsITableEditor.deleteTableColumn(1) with selected cell in the second column should delete the second column and the colspan in the first row should be adjusted"); 479 is(beforeInputEvents.length, 1, 480 'Only one "beforeinput" event should be fired when a cell in 2nd column is only cell defined by the column #1'); 481 checkInputEvent(beforeInputEvents[0], "when a cell in 2nd column is only cell defined by the column #1"); 482 is(inputEvents.length, 1, 483 'Only one "input" event should be fired when a cell in 2nd column is only cell defined by the column #1'); 484 checkInputEvent(inputEvents[0], "when a cell in 2nd column is only cell defined by the column #1"); 485 486 selection.removeAllRanges(); 487 editor.innerHTML = 488 '<table><tr><td colspan="2">cell1-1</td><td>cell1-3</td></tr><tr><td>cell2-1</td><td id="select">cell2-2</td><td>cell2-3</td></tr></table>'; 489 beforeInputEvents = []; 490 inputEvents = []; 491 range = document.createRange(); 492 range.selectNode(document.getElementById("select")); 493 selection.addRange(range); 494 getTableEditor().deleteTableColumn(1); 495 is(editor.innerHTML, '<table><tbody><tr><td colspan="1">cell1-1</td><td>cell1-3</td></tr><tr><td>cell2-1</td><td>cell2-3</td></tr></tbody></table>', 496 "nsITableEditor.deleteTableColumn(1) with selected cell in the second column should delete the second column and the colspan should be adjusted"); 497 is(beforeInputEvents.length, 1, 498 'Only one "beforeinput" event should be fired when a cell in 2nd column is only cell defined by the column #2'); 499 checkInputEvent(beforeInputEvents[0], "when a cell in 2nd column is only cell defined by the column #2"); 500 is(inputEvents.length, 1, 501 'Only one "input" event should be fired when a cell in 2nd column is only cell defined by the column #2'); 502 checkInputEvent(inputEvents[0], "when a cell in 2nd column is only cell defined by the column #2"); 503 504 SimpleTest.finish(); 505 }); 506 507 function getTableEditor() { 508 var editingSession = SpecialPowers.wrap(window).docShell.editingSession; 509 return editingSession.getEditorForWindow(window).QueryInterface(SpecialPowers.Ci.nsITableEditor); 510 } 511 512 </script> 513 </body> 514 515 </html>