<!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|z' let a = doc.body.firstChild; let r = doc.createRange(); r.setStart(a, 1); r.setEnd(a, 2); sel.addRange(r); }, function(win,doc,sel) { doc.body.innerHTML = '.I<br>B<br>C|z' let a = doc.body.firstChild; let r = doc.createRange(); r.setStart(doc.firstChild, 0); r.setEnd(a, 2); sel.addRange(r); }, function(win,doc,sel) { doc.body.innerHTML = 'I<br>.B<br>C|z' 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); }, function(win,doc,sel) { doc.body.innerHTML = 'I<br>.B<br>C|z' 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); }, function(win,doc,sel) { doc.body.innerHTML = 'I<br>.B<br>C|z' 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); }, function(win,doc,sel) { doc.body.innerHTML = 'I<br>B<br>.C|z' let a = doc.body.firstChild; let c = doc.body.childNodes[4]; let r = doc.createRange(); r.setStart(a, 0); r.setEnd(c, 2); sel.addRange(r); }, function(win,doc,sel) { doc.body.innerHTML = '|z|zI<br>B<br>C' let a = doc.body.firstChild; let r = doc.createRange(); r.setStart(a, 4); r.setEnd(a, 5); sel.addRange(r); }, function(win,doc,sel) { doc.body.innerHTML = '|z|zI<br>B<br>C' let a = doc.body.firstChild; let r = doc.createRange(); r.setStart(doc.firstChild, 0); r.setEnd(a, 5); sel.addRange(r); }, function(win,doc,sel) { doc.body.innerHTML = 'I<br>|z|zB<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); }, function(win,doc,sel) { doc.body.innerHTML = 'I<br>|z|zB<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); }, function(win,doc,sel) { doc.body.innerHTML = 'I<br>|z|zB<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); }, function(win,doc,sel) { doc.body.innerHTML = 'I<br>B<br>|z|zC' let a = doc.body.firstChild; let c = doc.body.childNodes[4]; let r = doc.createRange(); r.setStart(a, 0); r.setEnd(c, 5); sel.addRange(r); }, function(win,doc,sel) { doc.body.innerHTML = '<br>B<br>CI' }, function(win,doc,sel) { doc.body.innerHTML = '<br>B<br>C' }, 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); }, function(win,doc,sel) { doc.body.innerHTML = 'I|z' }, function(win,doc,sel) { doc.body.innerHTML = 'Iz|' document.body.appendChild(document.createTextNode('I')); document.body.appendChild(document.createTextNode(' ')); document.body.appendChild(createDOM(document)); }, ] 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>