<!DOCTYPE HTML> <html> <!-- https://bugzilla.mozilla.org/show_bug.cgi?id=682463 --> <head> <title>Test for Bug 682463</title> <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.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=682463">Mozilla Bug 682463</a> <p id="display"></p> <div id="content" style="display: none"> </div> <pre id="test"> <script type="application/javascript"> /** Test for Bug 682463 **/ function text(s) { return document.createTextNode(s); } function div(l,r) { var div = document.createElement("DIV"); if (l) div.appendChild(l); if (r) div.appendChild(r); return div; } function createRange(sn,so,en,eo) { var r = document.createRange(); r.setStart(sn,so); r.setEnd(en,eo); return r; } function verifyRange(msg,r,sn,so,en,eo) { ok(r.startContainer == sn && r.startOffset == so && r.endContainer == en && r.endOffset == eo, msg); } function showRange(r,msg) { var s = "" + r.startContainer + ": " + r.startOffset; s+= '\n'; s += "" + r.endContainer + ": " + r.endOffset; alert(msg + ':\n' + s) } var tests = [ function() { var t = text("foobar"); var r = createRange(t,2,t,t.length); var t2 = t.splitText(1); verifyRange("split before, no parent",r,t2,1,t2,5); }, function() { var t = text("foobar"); var r = createRange(t,0,t,t.length); var t2 = t.splitText(3); verifyRange("split middle, no parent",r,t,0,t,3); }, function() { var t = text("foobar"); var r = createRange(t,0,t,t.length); var n = t.length; var t2 = t.splitText(n); verifyRange("split after, no parent",r,t,0,t,n); }, function() { var t = text("foobar"); var parent = div(t); var r = createRange(t,0,t,t.length); var t2 = t.splitText(3); verifyRange("split middle, parent",r,t,0,t2,3); parent.removeChild(t); verifyRange("removed left, parent",r,parent,0,t2,3); var t2b = t2.splitText(1); verifyRange("split middle, parent, end",r,parent,0,t2b,2); }, function() { var t0 = text("x"); var t = text("foobar"); var parent = div(t0,t); var r = createRange(t,0,t,t.length); var t2 = t.splitText(3); parent.removeChild(t); verifyRange("removed left, text sibling",r,parent,1,t2,3); }, function() { var t = text("foobar"); var parent = div(t); var r = createRange(t,2,t,t.length); var t2 = t.splitText(1); verifyRange("split before, parent",r,t2,1,t2,5); parent.removeChild(t2); verifyRange("removed right, parent",r,parent,1,parent,1); }, function() { var t = text("foobar"); var parent = div(t); var r = createRange(t,0,t,t.length); var n = t.length; var t2 = t.splitText(n); verifyRange("split after, parent",r,t,0,t,n); r.setEnd(t2,0); verifyRange("split after, parent, extend",r,t,0,t2,0); t2.splitText(0); verifyRange("split after, parent, extend, split end",r,t,0,t2,0); t2.textContent = "baz"; t2.splitText(2); verifyRange("split after, parent, extend, split after end",r,t,0,t2,0); r.setEnd(t2,2); var t2b = t2.splitText(1); verifyRange("split after, parent, split end",r,t,0,t2b,1); }, function() { var t = text("foobar"); var parent = div(t); document.body.appendChild(parent); var r = createRange(t,0,t,t.length); var t2 = t.splitText(3); verifyRange("split middle, in document",r,t,0,t2,3); }, function() { var t = text("foobar"); var parent = div(t); document.body.appendChild(parent); var r = createRange(t,2,t,t.length); var t2 = t.splitText(1); verifyRange("split before, in document",r,t2,1,t2,5); }, function() { var t = text("foobar"); var parent = div(t); document.body.appendChild(parent); var r = createRange(t,0,t,t.length); var n = t.length; var t2 = t.splitText(n); verifyRange("split after, in document",r,t,0,t,n); } ]; function runTests() { var len = tests.length; for (var i = 0; i < len; ++i) { tests[i](); } SimpleTest.finish(); } addLoadEvent(runTests); SimpleTest.waitForExplicitFinish(); </script> </pre> </body> </html>