<!DOCTYPE HTML> <html class="reftest-wait"> <!-- https://bugzilla.mozilla.org/show_bug.cgi?id=619273 --> <head> <title>Test for Bug 619273</title> <script type="application/javascript;version=1.7"> /** Test DOM mutations inside selection **/ function createDOM(doc) { let s = doc.createElement('span'); s.appendChild(doc.createTextNode('|')) let s2 = doc.createElement('span'); s2.appendChild(doc.createTextNode('z')) s.appendChild(s2) return s; } var tests_done = 0; var tests = [ function(win,doc,sel) { doc.body.innerHTML = 'I<br>B<br>C' let a = doc.body.firstChild; let r = doc.createRange(); r.setStart(a, 0); r.setEnd(a, 1); sel.addRange(r); doc.body.insertBefore(doc.createTextNode('.'), a); doc.body.appendChild(createDOM(doc)); }, function(win,doc,sel) { doc.body.innerHTML = 'I<br>B<br>C' let a = doc.body.firstChild; let r = doc.createRange(); r.setStart(doc.firstChild, 0); r.setEnd(a, 1); sel.addRange(r); doc.body.insertBefore(doc.createTextNode('.'), a); doc.body.appendChild(createDOM(doc)); }, function(win,doc,sel) { doc.body.innerHTML = 'I<br>B<br>C' let a = doc.body.firstChild; let b = doc.body.childNodes[2]; let c = doc.body.childNodes[4]; let r = doc.createRange(); r.setStart(a, 0); r.setEnd(c, 1); sel.addRange(r); doc.body.insertBefore(doc.createTextNode('.'), b); doc.body.appendChild(createDOM(doc)); }, function(win,doc,sel) { doc.body.innerHTML = 'I<br>B<br>C' let b = doc.body.childNodes[2]; let c = doc.body.childNodes[4]; let r = doc.createRange(); r.setStart(doc.body, 0); r.setEnd(c, 1); sel.addRange(r); doc.body.insertBefore(doc.createTextNode('.'), b); doc.body.appendChild(createDOM(doc)); }, function(win,doc,sel) { doc.body.innerHTML = 'I<br>B<br>C' let b = doc.body.childNodes[2]; let c = doc.body.childNodes[4]; let r = doc.createRange(); r.setStart(doc, 0); r.setEnd(c, 1); sel.addRange(r); doc.body.insertBefore(doc.createTextNode('.'), b); doc.body.appendChild(createDOM(doc)); }, function(win,doc,sel) { doc.body.innerHTML = 'I<br>B<br>C' let a = doc.body.firstChild; let c = doc.body.childNodes[4]; let r = doc.createRange(); r.setStart(a, 0); r.setEnd(c, 1); sel.addRange(r); doc.body.insertBefore(doc.createTextNode('.'), c); doc.body.appendChild(createDOM(doc)); }, function(win,doc,sel) { doc.body.innerHTML = 'I<br>B<br>C' let a = doc.body.firstChild; let r = doc.createRange(); r.setStart(a, 0); r.setEnd(a, 1); sel.addRange(r); let span = createDOM(doc); doc.body.insertBefore(span, a); span.appendChild(createDOM(doc)); }, function(win,doc,sel) { doc.body.innerHTML = 'I<br>B<br>C' let a = doc.body.firstChild; let r = doc.createRange(); r.setStart(doc.firstChild, 0); r.setEnd(a, 1); sel.addRange(r); let span = createDOM(doc); doc.body.insertBefore(span, a); span.appendChild(createDOM(doc)); }, function(win,doc,sel) { doc.body.innerHTML = 'I<br>B<br>C' let a = doc.body.firstChild; let b = doc.body.childNodes[2]; let c = doc.body.childNodes[4]; let r = doc.createRange(); r.setStart(a, 0); r.setEnd(c, 1); sel.addRange(r); let span = createDOM(doc); doc.body.insertBefore(span, b); span.appendChild(createDOM(doc)); }, function(win,doc,sel) { doc.body.innerHTML = 'I<br>B<br>C' let b = doc.body.childNodes[2]; let c = doc.body.childNodes[4]; let r = doc.createRange(); r.setStart(doc.body, 0); r.setEnd(c, 1); sel.addRange(r); let span = createDOM(doc); doc.body.insertBefore(span, b); span.appendChild(createDOM(doc)); }, function(win,doc,sel) { doc.body.innerHTML = 'I<br>B<br>C' let b = doc.body.childNodes[2]; let c = doc.body.childNodes[4]; let r = doc.createRange(); r.setStart(doc, 0); r.setEnd(c, 1); sel.addRange(r); let span = createDOM(doc); doc.body.insertBefore(span, b); span.appendChild(createDOM(doc)); }, function(win,doc,sel) { doc.body.innerHTML = 'I<br>B<br>C' let a = doc.body.firstChild; let c = doc.body.childNodes[4]; let r = doc.createRange(); r.setStart(a, 0); r.setEnd(c, 1); sel.addRange(r); let span = createDOM(doc); doc.body.insertBefore(span, c); span.appendChild(createDOM(doc)); }, function(win,doc,sel) { doc.body.innerHTML = 'I<br>B<br>C' let a = doc.body.firstChild; let r = doc.createRange(); r.setStart(a, 0); r.setEnd(a, 1); sel.addRange(r); doc.body.appendChild(a); }, function(win,doc,sel) { doc.body.innerHTML = 'I<br>B<br>C' let a = doc.body.firstChild; let r = doc.createRange(); r.setStart(a, 0); r.setEnd(a, 1); sel.addRange(r); document.adoptNode(a); document.body.appendChild(a); document.body.appendChild(document.createTextNode(' ')); }, function(win,doc,sel) { doc.body.innerHTML = 'I<br>B<br>C' let a = doc.body.firstChild; let c = doc.body.childNodes[4]; let r = doc.createRange(); r.setStart(a, 0); r.setEnd(c, 1); sel.addRange(r); let span = createDOM(doc); doc.body.insertBefore(span, c); document.adoptNode(span); document.body.appendChild(span); }, function(win,doc,sel) { doc.body.innerHTML = 'I' let a = doc.body.firstChild; let span = createDOM(doc); let r = doc.createRange(); r.setStart(span, 0); r.setEnd(span, 1); sel.addRange(r); doc.body.appendChild(span); }, function(win,doc,sel) { doc.body.innerHTML = 'I' let a = doc.body.firstChild; let span = createDOM(doc); let r = doc.createRange(); r.setStart(span.firstChild, 0); r.setEnd(span.firstChild, 1); sel.addRange(r); doc.body.appendChild(span); doc.body.appendChild(span.firstChild); r.setEnd(span.firstChild, 1); }, ] function runTestInIframe(run,t) { let f = document.createElement('iframe'); f.setAttribute('frameborder','0'); f.setAttribute('height','100'); f.setAttribute('width','200'); f.src = 'data:text/html,<body style="margin:0;padding:0;font-family:monospace">'; f.onload = function () { try { run(f.contentWindow, f.contentDocument, f.contentWindow.getSelection()); } finally { ++tests_done; } } return f; } var id; function checkFinished() { if (window.frames.length == tests_done) { clearInterval(id); document.documentElement.className = ""; } } function runTest() { for (let i=0; i < tests.length; ++i) { let t = tests[i]; document.body.appendChild(runTestInIframe(t)); } id = setInterval(checkFinished,500); } </script> </head> <body onload="runTest()"></body> </html>