test_bug1258085.html (2127B)
1 <!DOCTYPE html> 2 <title>Test for Bug 1258085</title> 3 <script src="/tests/SimpleTest/SimpleTest.js"></script> 4 <script src="/tests/SimpleTest/EventUtils.js"></script> 5 <link rel="stylesheet" href="/tests/SimpleTest/test.css"> 6 <div contenteditable></div> 7 <script> 8 var div = document.querySelector("div"); 9 10 function reset() { 11 div.innerHTML = "x<br> y"; 12 div.focus(); 13 synthesizeKey("KEY_ArrowDown"); 14 } 15 16 function checks(msg) { 17 is(div.innerHTML, "x<br><br>", 18 msg + ": Should add a second <br> to prevent collapse of first"); 19 is(div.childNodes.length, 3, msg + ": No empty text nodes allowed"); 20 ok(getSelection().isCollapsed, msg + ": Selection must be collapsed"); 21 is(getSelection().focusNode, div, msg + ": Focus must be in div"); 22 is(getSelection().focusOffset, 2, 23 msg + ": Focus must be between the two <br>s"); 24 } 25 26 SimpleTest.waitForExplicitFinish(); 27 SimpleTest.waitForFocus(function() { 28 // Put selection after the "y" and backspace 29 reset(); 30 synthesizeKey("KEY_ArrowRight"); 31 synthesizeKey("KEY_Backspace"); 32 checks("Collapsed backspace"); 33 34 // Now do the same with delete 35 reset(); 36 synthesizeKey("KEY_Delete"); 37 checks("Collapsed delete"); 38 39 // Forward selection 40 reset(); 41 synthesizeKey("KEY_ArrowRight", {shiftKey: true}); 42 synthesizeKey("KEY_Backspace"); 43 checks("Forward-selected backspace"); 44 45 // Backward selection 46 reset(); 47 synthesizeKey("KEY_ArrowRight"); 48 synthesizeKey("KEY_ArrowLeft", {shiftKey: true}); 49 synthesizeKey("KEY_Backspace"); 50 checks("Backward-selected backspace"); 51 52 // Make sure we're not deleting if the whitespace isn't actually collapsed 53 div.style.whiteSpace = "pre-wrap"; 54 reset(); 55 synthesizeKey("KEY_ArrowRight"); 56 synthesizeKey("KEY_ArrowRight"); 57 synthesizeKey("KEY_Backspace"); 58 is(div.innerHTML, "x<br> ", "pre-wrap: Don't delete uncollapsed space"); 59 ok(getSelection().isCollapsed, "pre-wrap: Selection must be collapsed"); 60 is(getSelection().focusNode, div.lastChild, 61 "pre-wrap: Focus must be in final text node"); 62 is(getSelection().focusOffset, 1, "pre-wrap: Focus must be at end of node"); 63 64 SimpleTest.finish(); 65 }); 66 </script>