<!DOCTYPE HTML> <html> <!-- https://bugzilla.mozilla.org/show_bug.cgi?id=551704 --> <head> <title>Test for Bug 551704</title> <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> <script type="text/javascript" src="/tests/SimpleTest/EventUtils.js"></script> <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> </head> <body> <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=551704">Mozilla Bug 551704</a> <p id="display"></p> <div id="content"> <div id="preformatted" style="white-space: pre" contenteditable>a b</div> <div id="test1" contenteditable><br></div> <div id="test2" contenteditable>a<br></div> <div id="test3" contenteditable style="white-space: pre"><br></div> <div id="test4" contenteditable style="white-space: pre">a<br></div> <div id="test5" contenteditable></div> <div id="test6" contenteditable>a</div> <div id="test7" contenteditable style="white-space: pre"></div> <div id="test8" contenteditable style="white-space: pre">a</div> </div> <pre id="test"> <script type="application/javascript"> function testLineBreak(div, type, expectedText, expectedHTML, callback) { div.focus(); getSelection().collapse(div, 0); type(); is(div.innerHTML, expectedHTML, "The expected HTML after editing should be correct"); SimpleTest.waitForClipboard(expectedText, function() { getSelection().selectAllChildren(div); synthesizeKey("C", {accelKey: true}); }, function() { var t = document.createElement("textarea"); document.body.appendChild(t); t.focus(); synthesizeKey("V", {accelKey: true}); is(t.value, expectedText, "The expected text should be copied to the clipboard"); callback(); }, function() { SimpleTest.finish(); } ); } function typeABCDEF() { synthesizeKey("a", {}); typeBCDEF_chars(); } function typeBCDEF() { synthesizeKey("VK_RIGHT", {}); typeBCDEF_chars(); } function typeBCDEF_chars() { synthesizeKey("b", {}); synthesizeKey("c", {}); synthesizeKey("VK_RETURN", {}); synthesizeKey("d", {}); synthesizeKey("e", {}); synthesizeKey("f", {}); } /** Test for Bug 551704 **/ SimpleTest.waitForExplicitFinish(); SimpleTest.waitForFocus(function() { var preformatted = document.getElementById("preformatted"); is(preformatted.innerHTML, "a\nb", "No BR node should be injected for preformatted editable fields"); var iframe = document.createElement("iframe"); iframe.addEventListener("load", function() { var sel = iframe.contentWindow.getSelection(); is(sel.rangeCount, 0, "There should be no range in the selection initially"); iframe.contentDocument.designMode = "on"; sel = iframe.contentWindow.getSelection(); is(sel.rangeCount, 1, "There should be a single range in the selection after setting designMode"); var range = sel.getRangeAt(0); ok(range.collapsed, "The range should be collapsed"); is(range.startContainer, iframe.contentDocument.body.firstChild, "The range should start on the text"); is(range.startOffset, 0, "The start offset should be zero"); continueTest(); }, false); iframe.src = "data:text/html,foo"; document.getElementById("content").appendChild(iframe); }); function continueTest() { var divs = []; for (var i = 0; i < 8; ++i) { divs[i] = document.getElementById("test" + (i+1)); } var current = 0; function doNextTest() { if (current == divs.length) { SimpleTest.finish(); return; } var div = divs[current++]; if (div.textContent == "a") { var type = typeBCDEF; } else { var type = typeABCDEF; } var expectedHTML = "abc<br>def<br>"; var expectedText = "abc\ndef"; testLineBreak(div, type, expectedText, expectedHTML, doNextTest); } doNextTest(); } </script> </pre> </body> </html>