dom-mutations-ref.html (4811B)
1 <!DOCTYPE HTML> 2 <html class="reftest-wait"> 3 <!-- 4 https://bugzilla.mozilla.org/show_bug.cgi?id=619273 5 --> 6 <head> 7 <title>Test for Bug 619273</title> 8 <script type="application/javascript"> 9 /** Test DOM mutations inside selection **/ 10 function createDOM(doc) { 11 let s = doc.createElement('span'); 12 s.appendChild(doc.createTextNode('|')) 13 let s2 = doc.createElement('span'); 14 s2.appendChild(doc.createTextNode('z')) 15 s.appendChild(s2) 16 return s; 17 } 18 19 var tests_done = 0; 20 var tests = [ 21 function(win,doc,sel) { 22 doc.body.innerHTML = '.I<br>B<br>C|z' 23 let a = doc.body.firstChild; 24 let r = doc.createRange(); 25 r.setStart(a, 1); 26 r.setEnd(a, 2); 27 sel.addRange(r); 28 }, 29 function(win,doc,sel) { 30 doc.body.innerHTML = '.I<br>B<br>C|z' 31 let a = doc.body.firstChild; 32 let r = doc.createRange(); 33 r.setStart(doc.firstChild, 0); 34 r.setEnd(a, 2); 35 sel.addRange(r); 36 }, 37 function(win,doc,sel) { 38 doc.body.innerHTML = 'I<br>.B<br>C|z' 39 let a = doc.body.firstChild; 40 let b = doc.body.childNodes[2]; 41 let c = doc.body.childNodes[4]; 42 let r = doc.createRange(); 43 r.setStart(a, 0); 44 r.setEnd(c, 1); 45 sel.addRange(r); 46 }, 47 function(win,doc,sel) { 48 doc.body.innerHTML = 'I<br>.B<br>C|z' 49 let b = doc.body.childNodes[2]; 50 let c = doc.body.childNodes[4]; 51 let r = doc.createRange(); 52 r.setStart(doc.body, 0); 53 r.setEnd(c, 1); 54 sel.addRange(r); 55 }, 56 function(win,doc,sel) { 57 doc.body.innerHTML = 'I<br>.B<br>C|z' 58 let b = doc.body.childNodes[2]; 59 let c = doc.body.childNodes[4]; 60 let r = doc.createRange(); 61 r.setStart(doc, 0); 62 r.setEnd(c, 1); 63 sel.addRange(r); 64 }, 65 function(win,doc,sel) { 66 doc.body.innerHTML = 'I<br>B<br>.C|z' 67 let a = doc.body.firstChild; 68 let c = doc.body.childNodes[4]; 69 let r = doc.createRange(); 70 r.setStart(a, 0); 71 r.setEnd(c, 2); 72 sel.addRange(r); 73 }, 74 75 function(win,doc,sel) { 76 doc.body.innerHTML = '|z|zI<br>B<br>C' 77 let a = doc.body.firstChild; 78 let r = doc.createRange(); 79 r.setStart(a, 4); 80 r.setEnd(a, 5); 81 sel.addRange(r); 82 }, 83 function(win,doc,sel) { 84 doc.body.innerHTML = '|z|zI<br>B<br>C' 85 let a = doc.body.firstChild; 86 let r = doc.createRange(); 87 r.setStart(doc.firstChild, 0); 88 r.setEnd(a, 5); 89 sel.addRange(r); 90 }, 91 function(win,doc,sel) { 92 doc.body.innerHTML = 'I<br>|z|zB<br>C' 93 let a = doc.body.firstChild; 94 let b = doc.body.childNodes[2]; 95 let c = doc.body.childNodes[4]; 96 let r = doc.createRange(); 97 r.setStart(a, 0); 98 r.setEnd(c, 1); 99 sel.addRange(r); 100 }, 101 function(win,doc,sel) { 102 doc.body.innerHTML = 'I<br>|z|zB<br>C' 103 let b = doc.body.childNodes[2]; 104 let c = doc.body.childNodes[4]; 105 let r = doc.createRange(); 106 r.setStart(doc.body, 0); 107 r.setEnd(c, 1); 108 sel.addRange(r); 109 }, 110 function(win,doc,sel) { 111 doc.body.innerHTML = 'I<br>|z|zB<br>C' 112 let b = doc.body.childNodes[2]; 113 let c = doc.body.childNodes[4]; 114 let r = doc.createRange(); 115 r.setStart(doc, 0); 116 r.setEnd(c, 1); 117 sel.addRange(r); 118 }, 119 function(win,doc,sel) { 120 doc.body.innerHTML = 'I<br>B<br>|z|zC' 121 let a = doc.body.firstChild; 122 let c = doc.body.childNodes[4]; 123 let r = doc.createRange(); 124 r.setStart(a, 0); 125 r.setEnd(c, 5); 126 sel.addRange(r); 127 }, 128 129 function(win,doc,sel) { 130 doc.body.innerHTML = '<br>B<br>CI' 131 }, 132 function(win,doc,sel) { 133 doc.body.innerHTML = '<br>B<br>C' 134 }, 135 function(win,doc,sel) { 136 doc.body.innerHTML = 'I<br>B<br>C' 137 let a = doc.body.firstChild; 138 let c = doc.body.childNodes[4]; 139 let r = doc.createRange(); 140 r.setStart(a, 0); 141 r.setEnd(c, 1); 142 sel.addRange(r); 143 }, 144 145 function(win,doc,sel) { 146 doc.body.innerHTML = 'I|z' 147 }, 148 149 function(win,doc,sel) { 150 doc.body.innerHTML = 'Iz|' 151 152 document.body.appendChild(document.createTextNode('I')); 153 document.body.appendChild(document.createTextNode(' ')); 154 document.body.appendChild(createDOM(document)); 155 }, 156 ] 157 158 function runTestInIframe(run,t) { 159 let f = document.createElement('iframe'); 160 f.setAttribute('frameborder','0'); 161 f.setAttribute('height','100'); 162 f.setAttribute('width','200'); 163 f.src = 'data:text/html,<body style="margin:0;padding:0;font-family:monospace">'; 164 f.onload = function () { 165 try { 166 run(f.contentWindow, f.contentDocument, f.contentWindow.getSelection()); 167 } finally { ++tests_done; } 168 } 169 return f; 170 } 171 172 var id; 173 function checkFinished() { 174 if (window.frames.length == tests_done) { 175 clearInterval(id); 176 document.documentElement.className = ""; 177 } 178 } 179 180 function runTest() { 181 for (let i=0; i < tests.length; ++i) { 182 let t = tests[i]; 183 document.body.appendChild(runTestInIframe(t)); 184 } 185 id = setInterval(checkFinished,500); 186 } 187 </script> 188 </head> 189 <body onload="runTest()"></body> 190 </html>