123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251 |
- <!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>
|