<!
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">
/** 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
B
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
B
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
B
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
B
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
B
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
B
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
B
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
B
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
B
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
B
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
B
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
B
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
B
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
B
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
B
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,';
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>