test_nsIEditor_insertLineBreak.html (23825B)
1 <!DOCTYPE> 2 <html> 3 <head> 4 <title>Test for nsIEditor.insertLineBreak()</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 <input value="abcdef"> 12 <textarea>abcdef</textarea> 13 <div id="content" contenteditable></div> 14 <pre id="test"> 15 </pre> 16 17 <script class="testbody" type="application/javascript"> 18 "use strict"; 19 20 SimpleTest.waitForExplicitFinish(); 21 SimpleTest.expectAssertions(0, 2); // In a11y module 22 SimpleTest.waitForFocus(() => { 23 let input = document.getElementsByTagName("input")[0]; 24 let textarea = document.getElementsByTagName("textarea")[0]; 25 let contenteditable = document.getElementById("content"); 26 let selection = window.getSelection(); 27 28 let beforeInputEvents = []; 29 let inputEvents = []; 30 function onBeforeInput(event) { 31 beforeInputEvents.push(event); 32 } 33 function onInput(event) { 34 inputEvents.push(event); 35 } 36 37 function checkInputEvent(aEvent, aInputType, aTargetRanges, aDescription) { 38 ok(aEvent != null, `aEvent is null (${aDescription})`); 39 ok(aEvent instanceof InputEvent, 40 `"${aEvent.type}" event should be dispatched with InputEvent interface (${aDescription})`); 41 is(aEvent.cancelable, aEvent.type === "beforeinput", 42 `"${aEvent.type}" event should ${aEvent.type === "beforeinput" ? "be" : "be never"} cancelable (${aDescription})`); 43 is(aEvent.bubbles, true, 44 `"${aEvent.type}" event should always bubble (${aDescription})`); 45 is(aEvent.inputType, aInputType, 46 `inputType of "${aEvent.type}" event should be "${aInputType}" ${aDescription}`); 47 is(aEvent.data, null, 48 `data of "${aEvent.type}" event should be null ${aDescription}`); 49 is(aEvent.dataTransfer, null, 50 `dataTransfer of "${aEvent.type}" event should be null ${aDescription}`); 51 let targetRanges = aEvent.getTargetRanges(); 52 if (aTargetRanges.length === 0) { 53 is(targetRanges.length, 0, 54 `getTargetRange() of "${aEvent.type}" event should return empty array: ${aDescription}`); 55 } else { 56 is(targetRanges.length, aTargetRanges.length, 57 `getTargetRange() of "${aEvent.type}" event should return static range array: ${aDescription}`); 58 if (targetRanges.length == aTargetRanges.length) { 59 for (let i = 0; i < targetRanges.length; i++) { 60 is(targetRanges[i].startContainer, aTargetRanges[i].startContainer, 61 `startContainer of getTargetRanges()[${i}] of "${aEvent.type}" event does not match: ${aDescription}`); 62 is(targetRanges[i].startOffset, aTargetRanges[i].startOffset, 63 `startOffset of getTargetRanges()[${i}] of "${aEvent.type}" event does not match: ${aDescription}`); 64 is(targetRanges[i].endContainer, aTargetRanges[i].endContainer, 65 `endContainer of getTargetRanges()[${i}] of "${aEvent.type}" event does not match: ${aDescription}`); 66 is(targetRanges[i].endOffset, aTargetRanges[i].endOffset, 67 `endOffset of getTargetRanges()[${i}] of "${aEvent.type}" event does not match: ${aDescription}`); 68 } 69 } 70 } 71 } 72 73 input.focus(); 74 input.selectionStart = input.selectionEnd = 3; 75 beforeInputEvents = []; 76 inputEvents = []; 77 input.addEventListener("beforeinput", onBeforeInput); 78 input.addEventListener("input", onInput); 79 try { 80 getPlaintextEditor(input).insertLineBreak(); 81 } catch (e) { 82 ok(true, e.message); 83 } 84 input.removeEventListener("beforeinput", onBeforeInput); 85 input.removeEventListener("input", onInput); 86 is(input.value, "abcdef", "nsIEditor.insertLineBreak() should do nothing on single line editor"); 87 is(beforeInputEvents.length, 1, 'nsIEditor.insertLineBreak() should cause a "beforeinput" event on single line editor'); 88 checkInputEvent(beforeInputEvents[0], "insertLineBreak", [], "on single line editor"); 89 is(inputEvents.length, 0, 'nsIEditor.insertLineBreak() should not cause "input" event on single line editor'); 90 91 textarea.focus(); 92 textarea.selectionStart = textarea.selectionEnd = 3; 93 beforeInputEvents = []; 94 inputEvents = []; 95 textarea.addEventListener("beforeinput", onBeforeInput); 96 textarea.addEventListener("input", onInput); 97 getPlaintextEditor(textarea).insertLineBreak(); 98 textarea.removeEventListener("beforeinput", onBeforeInput); 99 textarea.removeEventListener("input", onInput); 100 is(textarea.value, "abc\ndef", "nsIEditor.insertLineBreak() should insert \\n into multi-line editor"); 101 is(beforeInputEvents.length, 1, 'nsIEditor.insertLineBreak() should cause "beforeinput" event once on multi-line editor'); 102 checkInputEvent(beforeInputEvents[0], "insertLineBreak", [], "on multi-line editor"); 103 is(inputEvents.length, 1, 'nsIEditor.insertLineBreak() should cause "input" event once on multi-line editor'); 104 checkInputEvent(inputEvents[0], "insertLineBreak", [], "on multi-line editor"); 105 106 // Note that despite of the name, insertLineBreak() should insert paragraph separator in HTMLEditor. 107 108 document.execCommand("defaultParagraphSeparator", false, "br"); 109 110 contenteditable.innerHTML = "abcdef"; 111 contenteditable.focus(); 112 contenteditable.scrollTop; 113 let selectionContainer = contenteditable.firstChild; 114 selection.collapse(selectionContainer, 3); 115 beforeInputEvents = []; 116 inputEvents = []; 117 contenteditable.addEventListener("beforeinput", onBeforeInput); 118 contenteditable.addEventListener("input", onInput); 119 getPlaintextEditor(contenteditable).insertLineBreak(); 120 contenteditable.removeEventListener("beforeinput", onBeforeInput); 121 contenteditable.removeEventListener("input", onInput); 122 is(contenteditable.innerHTML, "abc<br>def", 123 'nsIEditor.insertLineBreak() should insert <br> element into text node when defaultParagraphSeparator is "br"'); 124 is(beforeInputEvents.length, 1, 125 'nsIEditor.insertLineBreak() should cause "beforeinput" event once on contenteditable which has only text node when defaultParagraphSeparator is "br"'); 126 checkInputEvent(beforeInputEvents[0], "insertParagraph", 127 [{startContainer: selectionContainer, startOffset: 3, 128 endContainer: selectionContainer, endOffset: 3}], 129 'on HTMLEditor (when defaultParagraphSeparator is "br")'); 130 is(inputEvents.length, 1, 131 'nsIEditor.insertLineBreak() should cause "input" event once on contenteditable which has only text node when defaultParagraphSeparator is "br"'); 132 checkInputEvent(inputEvents[0], "insertParagraph", [], 'on HTMLEditor (when defaultParagraphSeparator is "br")'); 133 134 contenteditable.innerHTML = "<p>abcdef</p>"; 135 contenteditable.focus(); 136 contenteditable.scrollTop; 137 selectionContainer = contenteditable.firstChild.firstChild; 138 selection.collapse(selectionContainer, 3); 139 beforeInputEvents = []; 140 inputEvents = []; 141 contenteditable.addEventListener("beforeinput", onBeforeInput); 142 contenteditable.addEventListener("input", onInput); 143 getPlaintextEditor(contenteditable).insertLineBreak(); 144 contenteditable.removeEventListener("beforeinput", onBeforeInput); 145 contenteditable.removeEventListener("input", onInput); 146 is(contenteditable.innerHTML, "<p>abc</p><p>def</p>", 147 'nsIEditor.insertLineBreak() should add <p> element after <p> element even when defaultParagraphSeparator is "br"'); 148 is(beforeInputEvents.length, 1, 149 'nsIEditor.insertLineBreak() should cause "beforeinput" event once on contenteditable which has <p> element when defaultParagraphSeparator is "br"'); 150 checkInputEvent(beforeInputEvents[0], "insertParagraph", 151 [{startContainer: selectionContainer, startOffset: 3, 152 endContainer: selectionContainer, endOffset: 3}], 153 'in <p> element on HTMLEditor (when defaultParagraphSeparator is "br")'); 154 is(inputEvents.length, 1, 155 'nsIEditor.insertLineBreak() should cause "input" event once on contenteditable which has <p> element when defaultParagraphSeparator is "br"'); 156 checkInputEvent(inputEvents[0], "insertParagraph", [], 'in <p> element on HTMLEditor (when defaultParagraphSeparator is "br")'); 157 158 contenteditable.innerHTML = "<div>abcdef</div>"; 159 contenteditable.focus(); 160 contenteditable.scrollTop; 161 selectionContainer = contenteditable.firstChild.firstChild; 162 selection.collapse(selectionContainer, 3); 163 beforeInputEvents = []; 164 inputEvents = []; 165 contenteditable.addEventListener("beforeinput", onBeforeInput); 166 contenteditable.addEventListener("input", onInput); 167 getPlaintextEditor(contenteditable).insertLineBreak(); 168 contenteditable.removeEventListener("beforeinput", onBeforeInput); 169 contenteditable.removeEventListener("input", onInput); 170 is(contenteditable.innerHTML, "<div>abc<br>def</div>", 171 'nsIEditor.insertLineBreak() should insert <br> element into <div> element when defaultParagraphSeparator is "br"'); 172 is(beforeInputEvents.length, 1, 173 'nsIEditor.insertLineBreak() should cause "beforeinput" event once on contenteditable which has <div> element when defaultParagraphSeparator is "br"'); 174 checkInputEvent(beforeInputEvents[0], "insertParagraph", 175 [{startContainer: selectionContainer, startOffset: 3, 176 endContainer: selectionContainer, endOffset: 3}], 177 'in <div> element on HTMLEditor (when defaultParagraphSeparator is "br")'); 178 is(inputEvents.length, 1, 179 'nsIEditor.insertLineBreak() should cause "input" event once on contenteditable which has <div> element when defaultParagraphSeparator is "br"'); 180 checkInputEvent(inputEvents[0], "insertParagraph", [], 'in <div> element on HTMLEditor (when defaultParagraphSeparator is "br")'); 181 182 contenteditable.innerHTML = "<pre>abcdef</pre>"; 183 contenteditable.focus(); 184 contenteditable.scrollTop; 185 selectionContainer = contenteditable.firstChild.firstChild; 186 selection.collapse(selectionContainer, 3); 187 beforeInputEvents = []; 188 inputEvents = []; 189 contenteditable.addEventListener("beforeinput", onBeforeInput); 190 contenteditable.addEventListener("input", onInput); 191 getPlaintextEditor(contenteditable).insertLineBreak(); 192 contenteditable.removeEventListener("beforeinput", onBeforeInput); 193 contenteditable.removeEventListener("input", onInput); 194 is(contenteditable.innerHTML, "<pre>abc<br>def</pre>", 195 'nsIEditor.insertLineBreak() should insert <br> element into <pre> element when defaultParagraphSeparator is "br"'); 196 is(beforeInputEvents.length, 1, 197 'nsIEditor.insertLineBreak() should cause "beforeinput" event once on contenteditable which has <pre> element when defaultParagraphSeparator is "br"'); 198 checkInputEvent(beforeInputEvents[0], "insertParagraph", 199 [{startContainer: selectionContainer, startOffset: 3, 200 endContainer: selectionContainer, endOffset: 3}], 201 'in <pre> element on HTMLEditor (when defaultParagraphSeparator is "br")'); 202 is(inputEvents.length, 1, 203 'nsIEditor.insertLineBreak() should cause "input" event once on contenteditable which has <pre> element when defaultParagraphSeparator is "br"'); 204 checkInputEvent(inputEvents[0], "insertParagraph", [], 'in <pre> element on HTMLEditor (when defaultParagraphSeparator is "br")'); 205 206 document.execCommand("defaultParagraphSeparator", false, "p"); 207 208 contenteditable.innerHTML = "abcdef"; 209 contenteditable.focus(); 210 contenteditable.scrollTop; 211 selectionContainer = contenteditable.firstChild; 212 selection.collapse(selectionContainer, 3); 213 beforeInputEvents = []; 214 inputEvents = []; 215 contenteditable.addEventListener("beforeinput", onBeforeInput); 216 contenteditable.addEventListener("input", onInput); 217 getPlaintextEditor(contenteditable).insertLineBreak(); 218 contenteditable.removeEventListener("beforeinput", onBeforeInput); 219 contenteditable.removeEventListener("input", onInput); 220 is(contenteditable.innerHTML, "<p>abc</p><p>def</p>", 221 'nsIEditor.insertLineBreak() should create <p> elements when there is only text node and defaultParagraphSeparator is "p"'); 222 is(beforeInputEvents.length, 1, 223 'nsIEditor.insertLineBreak() should cause "beforeinput" event once on contenteditable which has only text node when defaultParagraphSeparator is "p"'); 224 checkInputEvent(beforeInputEvents[0], "insertParagraph", 225 [{startContainer: selectionContainer, startOffset: 3, 226 endContainer: selectionContainer, endOffset: 3}], 227 'on HTMLEditor (when defaultParagraphSeparator is "p")'); 228 is(inputEvents.length, 1, 229 'nsIEditor.insertLineBreak() should cause "input" event once on contenteditable which has only text node when defaultParagraphSeparator is "p"'); 230 checkInputEvent(inputEvents[0], "insertParagraph", [], 'on HTMLEditor (when defaultParagraphSeparator is "p")'); 231 232 contenteditable.innerHTML = "<p>abcdef</p>"; 233 contenteditable.focus(); 234 contenteditable.scrollTop; 235 selectionContainer = contenteditable.firstChild.firstChild; 236 selection.collapse(selectionContainer, 3); 237 beforeInputEvents = []; 238 inputEvents = []; 239 contenteditable.addEventListener("beforeinput", onBeforeInput); 240 contenteditable.addEventListener("input", onInput); 241 getPlaintextEditor(contenteditable).insertLineBreak(); 242 contenteditable.removeEventListener("beforeinput", onBeforeInput); 243 contenteditable.removeEventListener("input", onInput); 244 is(contenteditable.innerHTML, "<p>abc</p><p>def</p>", 245 'nsIEditor.insertLineBreak() should add <p> element after <p> element when defaultParagraphSeparator is "p"'); 246 is(beforeInputEvents.length, 1, 247 'nsIEditor.insertLineBreak() should cause "beforeinput" event once on contenteditable which has <p> element when defaultParagraphSeparator is "p"'); 248 checkInputEvent(beforeInputEvents[0], "insertParagraph", 249 [{startContainer: selectionContainer, startOffset: 3, 250 endContainer: selectionContainer, endOffset: 3}], 251 'in <p> element on HTMLEditor (when defaultParagraphSeparator is "p")'); 252 is(inputEvents.length, 1, 253 'nsIEditor.insertLineBreak() should cause "input" event once on contenteditable which has <p> element when defaultParagraphSeparator is "p"'); 254 checkInputEvent(inputEvents[0], "insertParagraph", [], 'in <p> element on HTMLEditor (when defaultParagraphSeparator is "p")'); 255 256 contenteditable.innerHTML = "<div>abcdef</div>"; 257 contenteditable.focus(); 258 contenteditable.scrollTop; 259 selectionContainer = contenteditable.firstChild.firstChild; 260 selection.collapse(selectionContainer, 3); 261 beforeInputEvents = []; 262 inputEvents = []; 263 contenteditable.addEventListener("beforeinput", onBeforeInput); 264 contenteditable.addEventListener("input", onInput); 265 getPlaintextEditor(contenteditable).insertLineBreak(); 266 contenteditable.removeEventListener("beforeinput", onBeforeInput); 267 contenteditable.removeEventListener("input", onInput); 268 is(contenteditable.innerHTML, "<div>abc</div><div>def</div>", 269 'nsIEditor.insertLineBreak() should add <div> element after <div> element even when defaultParagraphSeparator is "p"'); 270 is(beforeInputEvents.length, 1, 271 'nsIEditor.insertLineBreak() should cause "beforeinput" event once on contenteditable which has <div> element when defaultParagraphSeparator is "p"'); 272 checkInputEvent(beforeInputEvents[0], "insertParagraph", 273 [{startContainer: selectionContainer, startOffset: 3, 274 endContainer: selectionContainer, endOffset: 3}], 275 'in <div> element on HTMLEditor (when defaultParagraphSeparator is "p")'); 276 is(inputEvents.length, 1, 277 'nsIEditor.insertLineBreak() should cause "input" event once on contenteditable which has <div> element when defaultParagraphSeparator is "p"'); 278 checkInputEvent(inputEvents[0], "insertParagraph", [], 'in <div> element on HTMLEditor (when defaultParagraphSeparator is "p")'); 279 280 contenteditable.innerHTML = "<pre>abcdef</pre>"; 281 contenteditable.focus(); 282 contenteditable.scrollTop; 283 selectionContainer = contenteditable.firstChild.firstChild; 284 selection.collapse(selectionContainer, 3); 285 beforeInputEvents = []; 286 inputEvents = []; 287 contenteditable.addEventListener("beforeinput", onBeforeInput); 288 contenteditable.addEventListener("input", onInput); 289 getPlaintextEditor(contenteditable).insertLineBreak(); 290 contenteditable.removeEventListener("beforeinput", onBeforeInput); 291 contenteditable.removeEventListener("input", onInput); 292 is(contenteditable.innerHTML, "<pre>abc<br>def</pre>", 293 'nsIEditor.insertLineBreak() should insert <br> element into <pre> element when defaultParagraphSeparator is "p"'); 294 is(beforeInputEvents.length, 1, 295 'nsIEditor.insertLineBreak() should cause "beforeinput" event once on contenteditable which has <pre> element when defaultParagraphSeparator is "p"'); 296 checkInputEvent(beforeInputEvents[0], "insertParagraph", 297 [{startContainer: selectionContainer, startOffset: 3, 298 endContainer: selectionContainer, endOffset: 3}], 299 'in <pre> element on HTMLEditor (when defaultParagraphSeparator is "p")'); 300 is(inputEvents.length, 1, 301 'nsIEditor.insertLineBreak() should cause "input" event once on contenteditable which has <pre> element when defaultParagraphSeparator is "p"'); 302 checkInputEvent(inputEvents[0], "insertParagraph", [], 'in <pre> element on HTMLEditor (when defaultParagraphSeparator is "p")'); 303 304 document.execCommand("defaultParagraphSeparator", false, "div"); 305 306 contenteditable.innerHTML = "abcdef"; 307 contenteditable.focus(); 308 contenteditable.scrollTop; 309 selectionContainer = contenteditable.firstChild; 310 selection.collapse(selectionContainer, 3); 311 beforeInputEvents = []; 312 inputEvents = []; 313 contenteditable.addEventListener("beforeinput", onBeforeInput); 314 contenteditable.addEventListener("input", onInput); 315 getPlaintextEditor(contenteditable).insertLineBreak(); 316 contenteditable.removeEventListener("beforeinput", onBeforeInput); 317 contenteditable.removeEventListener("input", onInput); 318 is(contenteditable.innerHTML, "<div>abc</div><div>def</div>", 319 'nsIEditor.insertLineBreak() should create <div> elements when there is only text node and defaultParagraphSeparator is "div"'); 320 is(beforeInputEvents.length, 1, 321 'nsIEditor.insertLineBreak() should cause "beforeinput" event once on contenteditable which has only text node when defaultParagraphSeparator is "div"'); 322 checkInputEvent(beforeInputEvents[0], "insertParagraph", 323 [{startContainer: selectionContainer, startOffset: 3, 324 endContainer: selectionContainer, endOffset: 3}], 325 'on HTMLEditor (when defaultParagraphSeparator is "div")'); 326 is(inputEvents.length, 1, 327 'nsIEditor.insertLineBreak() should cause "input" event once on contenteditable which has only text node when defaultParagraphSeparator is "div"'); 328 checkInputEvent(inputEvents[0], "insertParagraph", [], 'on HTMLEditor (when defaultParagraphSeparator is "div")'); 329 330 contenteditable.innerHTML = "<p>abcdef</p>"; 331 contenteditable.focus(); 332 contenteditable.scrollTop; 333 selectionContainer = contenteditable.firstChild.firstChild; 334 selection.collapse(selectionContainer, 3); 335 beforeInputEvents = []; 336 inputEvents = []; 337 contenteditable.addEventListener("beforeinput", onBeforeInput); 338 contenteditable.addEventListener("input", onInput); 339 getPlaintextEditor(contenteditable).insertLineBreak(); 340 contenteditable.removeEventListener("beforeinput", onBeforeInput); 341 contenteditable.removeEventListener("input", onInput); 342 is(contenteditable.innerHTML, "<p>abc</p><p>def</p>", 343 'nsIEditor.insertLineBreak() should add <p> element after <p> element even when defaultParagraphSeparator is "div"'); 344 is(beforeInputEvents.length, 1, 345 'nsIEditor.insertLineBreak() should cause "beforeinput" event once on contenteditable which has <p> element when defaultParagraphSeparator is "div"'); 346 checkInputEvent(beforeInputEvents[0], "insertParagraph", 347 [{startContainer: selectionContainer, startOffset: 3, 348 endContainer: selectionContainer, endOffset: 3}], 349 'in <p> element on HTMLEditor (when defaultParagraphSeparator is "div")'); 350 is(inputEvents.length, 1, 351 'nsIEditor.insertLineBreak() should cause "input" event once on contenteditable which has <p> element when defaultParagraphSeparator is "div"'); 352 checkInputEvent(inputEvents[0], "insertParagraph", [], 'in <p> element on HTMLEditor (when defaultParagraphSeparator is "div")'); 353 354 contenteditable.innerHTML = "<div>abcdef</div>"; 355 contenteditable.focus(); 356 contenteditable.scrollTop; 357 selectionContainer = contenteditable.firstChild.firstChild; 358 selection.collapse(selectionContainer, 3); 359 beforeInputEvents = []; 360 inputEvents = []; 361 contenteditable.addEventListener("beforeinput", onBeforeInput); 362 contenteditable.addEventListener("input", onInput); 363 getPlaintextEditor(contenteditable).insertLineBreak(); 364 contenteditable.removeEventListener("beforeinput", onBeforeInput); 365 contenteditable.removeEventListener("input", onInput); 366 is(contenteditable.innerHTML, "<div>abc</div><div>def</div>", 367 'nsIEditor.insertLineBreak() should add <div> element after <div> element when defaultParagraphSeparator is "div"'); 368 is(beforeInputEvents.length, 1, 369 'nsIEditor.insertLineBreak() should cause "beforeinput" event once on contenteditable which has <div> element when defaultParagraphSeparator is "div"'); 370 checkInputEvent(beforeInputEvents[0], "insertParagraph", 371 [{startContainer: selectionContainer, startOffset: 3, 372 endContainer: selectionContainer, endOffset: 3}], 373 'in <div> element on HTMLEditor (when defaultParagraphSeparator is "div")'); 374 is(inputEvents.length, 1, 375 'nsIEditor.insertLineBreak() should cause "input" event once on contenteditable which has <div> element when defaultParagraphSeparator is "div"'); 376 checkInputEvent(inputEvents[0], "insertParagraph", [], 'in <div> element on HTMLEditor (when defaultParagraphSeparator is "div")'); 377 378 contenteditable.innerHTML = "<pre>abcdef</pre>"; 379 contenteditable.focus(); 380 contenteditable.scrollTop; 381 selectionContainer = contenteditable.firstChild.firstChild; 382 selection.collapse(selectionContainer, 3); 383 beforeInputEvents = []; 384 inputEvents = []; 385 contenteditable.addEventListener("beforeinput", onBeforeInput); 386 contenteditable.addEventListener("input", onInput); 387 getPlaintextEditor(contenteditable).insertLineBreak(); 388 contenteditable.removeEventListener("beforeinput", onBeforeInput); 389 contenteditable.removeEventListener("input", onInput); 390 is(contenteditable.innerHTML, "<pre>abc<br>def</pre>", 391 'nsIEditor.insertLineBreak() should insert <br> element into <pre> element when defaultParagraphSeparator is "div"'); 392 is(beforeInputEvents.length, 1, 393 'nsIEditor.insertLineBreak() should cause "beforeinput" event once on contenteditable which has <pre> element when defaultParagraphSeparator is "div"'); 394 checkInputEvent(beforeInputEvents[0], "insertParagraph", 395 [{startContainer: selectionContainer, startOffset: 3, 396 endContainer: selectionContainer, endOffset: 3}], 397 'in <pre> element on HTMLEditor (when defaultParagraphSeparator is "div")'); 398 is(inputEvents.length, 1, 399 'nsIEditor.insertLineBreak() should cause "input" event once on contenteditable which has <pre> element when defaultParagraphSeparator is "div"'); 400 checkInputEvent(inputEvents[0], "insertParagraph", [], 'in <pre> element on HTMLEditor (when defaultParagraphSeparator is "div")'); 401 402 SimpleTest.finish(); 403 }); 404 405 function getPlaintextEditor(aEditorElement) { 406 let editor = aEditorElement ? SpecialPowers.wrap(aEditorElement).editor : null; 407 if (!editor) { 408 editor = SpecialPowers.wrap(window).docShell.editingSession.getEditorForWindow(window); 409 } 410 return editor; 411 } 412 413 </script> 414 </body> 415 416 </html>