1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/layout/reftests/selection/dom-mutations.html Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,250 @@ 1.4 +<!DOCTYPE HTML> 1.5 +<html class="reftest-wait"> 1.6 +<!-- 1.7 +https://bugzilla.mozilla.org/show_bug.cgi?id=619273 1.8 +--> 1.9 +<head> 1.10 + <title>Test for Bug 619273</title> 1.11 +<script type="application/javascript;version=1.7"> 1.12 +/** Test DOM mutations inside selection **/ 1.13 +function createDOM(doc) { 1.14 + let s = doc.createElement('span'); 1.15 + s.appendChild(doc.createTextNode('|')) 1.16 + let s2 = doc.createElement('span'); 1.17 + s2.appendChild(doc.createTextNode('z')) 1.18 + s.appendChild(s2) 1.19 + return s; 1.20 +} 1.21 + 1.22 +var tests_done = 0; 1.23 +var tests = [ 1.24 + function(win,doc,sel) { 1.25 + doc.body.innerHTML = 'I<br>B<br>C' 1.26 + let a = doc.body.firstChild; 1.27 + let r = doc.createRange(); 1.28 + r.setStart(a, 0); 1.29 + r.setEnd(a, 1); 1.30 + sel.addRange(r); 1.31 + doc.body.insertBefore(doc.createTextNode('.'), a); 1.32 + doc.body.appendChild(createDOM(doc)); 1.33 + }, 1.34 + function(win,doc,sel) { 1.35 + doc.body.innerHTML = 'I<br>B<br>C' 1.36 + let a = doc.body.firstChild; 1.37 + let r = doc.createRange(); 1.38 + r.setStart(doc.firstChild, 0); 1.39 + r.setEnd(a, 1); 1.40 + sel.addRange(r); 1.41 + doc.body.insertBefore(doc.createTextNode('.'), a); 1.42 + doc.body.appendChild(createDOM(doc)); 1.43 + }, 1.44 + function(win,doc,sel) { 1.45 + doc.body.innerHTML = 'I<br>B<br>C' 1.46 + let a = doc.body.firstChild; 1.47 + let b = doc.body.childNodes[2]; 1.48 + let c = doc.body.childNodes[4]; 1.49 + let r = doc.createRange(); 1.50 + r.setStart(a, 0); 1.51 + r.setEnd(c, 1); 1.52 + sel.addRange(r); 1.53 + doc.body.insertBefore(doc.createTextNode('.'), b); 1.54 + doc.body.appendChild(createDOM(doc)); 1.55 + }, 1.56 + function(win,doc,sel) { 1.57 + doc.body.innerHTML = 'I<br>B<br>C' 1.58 + let b = doc.body.childNodes[2]; 1.59 + let c = doc.body.childNodes[4]; 1.60 + let r = doc.createRange(); 1.61 + r.setStart(doc.body, 0); 1.62 + r.setEnd(c, 1); 1.63 + sel.addRange(r); 1.64 + doc.body.insertBefore(doc.createTextNode('.'), b); 1.65 + doc.body.appendChild(createDOM(doc)); 1.66 + }, 1.67 + function(win,doc,sel) { 1.68 + doc.body.innerHTML = 'I<br>B<br>C' 1.69 + let b = doc.body.childNodes[2]; 1.70 + let c = doc.body.childNodes[4]; 1.71 + let r = doc.createRange(); 1.72 + r.setStart(doc, 0); 1.73 + r.setEnd(c, 1); 1.74 + sel.addRange(r); 1.75 + doc.body.insertBefore(doc.createTextNode('.'), b); 1.76 + doc.body.appendChild(createDOM(doc)); 1.77 + }, 1.78 + function(win,doc,sel) { 1.79 + doc.body.innerHTML = 'I<br>B<br>C' 1.80 + let a = doc.body.firstChild; 1.81 + let c = doc.body.childNodes[4]; 1.82 + let r = doc.createRange(); 1.83 + r.setStart(a, 0); 1.84 + r.setEnd(c, 1); 1.85 + sel.addRange(r); 1.86 + doc.body.insertBefore(doc.createTextNode('.'), c); 1.87 + doc.body.appendChild(createDOM(doc)); 1.88 + }, 1.89 + 1.90 + function(win,doc,sel) { 1.91 + doc.body.innerHTML = 'I<br>B<br>C' 1.92 + let a = doc.body.firstChild; 1.93 + let r = doc.createRange(); 1.94 + r.setStart(a, 0); 1.95 + r.setEnd(a, 1); 1.96 + sel.addRange(r); 1.97 + let span = createDOM(doc); 1.98 + doc.body.insertBefore(span, a); 1.99 + span.appendChild(createDOM(doc)); 1.100 + }, 1.101 + function(win,doc,sel) { 1.102 + doc.body.innerHTML = 'I<br>B<br>C' 1.103 + let a = doc.body.firstChild; 1.104 + let r = doc.createRange(); 1.105 + r.setStart(doc.firstChild, 0); 1.106 + r.setEnd(a, 1); 1.107 + sel.addRange(r); 1.108 + let span = createDOM(doc); 1.109 + doc.body.insertBefore(span, a); 1.110 + span.appendChild(createDOM(doc)); 1.111 + }, 1.112 + function(win,doc,sel) { 1.113 + doc.body.innerHTML = 'I<br>B<br>C' 1.114 + let a = doc.body.firstChild; 1.115 + let b = doc.body.childNodes[2]; 1.116 + let c = doc.body.childNodes[4]; 1.117 + let r = doc.createRange(); 1.118 + r.setStart(a, 0); 1.119 + r.setEnd(c, 1); 1.120 + sel.addRange(r); 1.121 + let span = createDOM(doc); 1.122 + doc.body.insertBefore(span, b); 1.123 + span.appendChild(createDOM(doc)); 1.124 + }, 1.125 + function(win,doc,sel) { 1.126 + doc.body.innerHTML = 'I<br>B<br>C' 1.127 + let b = doc.body.childNodes[2]; 1.128 + let c = doc.body.childNodes[4]; 1.129 + let r = doc.createRange(); 1.130 + r.setStart(doc.body, 0); 1.131 + r.setEnd(c, 1); 1.132 + sel.addRange(r); 1.133 + let span = createDOM(doc); 1.134 + doc.body.insertBefore(span, b); 1.135 + span.appendChild(createDOM(doc)); 1.136 + }, 1.137 + function(win,doc,sel) { 1.138 + doc.body.innerHTML = 'I<br>B<br>C' 1.139 + let b = doc.body.childNodes[2]; 1.140 + let c = doc.body.childNodes[4]; 1.141 + let r = doc.createRange(); 1.142 + r.setStart(doc, 0); 1.143 + r.setEnd(c, 1); 1.144 + sel.addRange(r); 1.145 + let span = createDOM(doc); 1.146 + doc.body.insertBefore(span, b); 1.147 + span.appendChild(createDOM(doc)); 1.148 + }, 1.149 + function(win,doc,sel) { 1.150 + doc.body.innerHTML = 'I<br>B<br>C' 1.151 + let a = doc.body.firstChild; 1.152 + let c = doc.body.childNodes[4]; 1.153 + let r = doc.createRange(); 1.154 + r.setStart(a, 0); 1.155 + r.setEnd(c, 1); 1.156 + sel.addRange(r); 1.157 + let span = createDOM(doc); 1.158 + doc.body.insertBefore(span, c); 1.159 + span.appendChild(createDOM(doc)); 1.160 + }, 1.161 + 1.162 + function(win,doc,sel) { 1.163 + doc.body.innerHTML = 'I<br>B<br>C' 1.164 + let a = doc.body.firstChild; 1.165 + let r = doc.createRange(); 1.166 + r.setStart(a, 0); 1.167 + r.setEnd(a, 1); 1.168 + sel.addRange(r); 1.169 + doc.body.appendChild(a); 1.170 + }, 1.171 + function(win,doc,sel) { 1.172 + doc.body.innerHTML = 'I<br>B<br>C' 1.173 + let a = doc.body.firstChild; 1.174 + let r = doc.createRange(); 1.175 + r.setStart(a, 0); 1.176 + r.setEnd(a, 1); 1.177 + sel.addRange(r); 1.178 + document.adoptNode(a); 1.179 + document.body.appendChild(a); 1.180 + document.body.appendChild(document.createTextNode(' ')); 1.181 + }, 1.182 + function(win,doc,sel) { 1.183 + doc.body.innerHTML = 'I<br>B<br>C' 1.184 + let a = doc.body.firstChild; 1.185 + let c = doc.body.childNodes[4]; 1.186 + let r = doc.createRange(); 1.187 + r.setStart(a, 0); 1.188 + r.setEnd(c, 1); 1.189 + sel.addRange(r); 1.190 + let span = createDOM(doc); 1.191 + doc.body.insertBefore(span, c); 1.192 + document.adoptNode(span); 1.193 + document.body.appendChild(span); 1.194 + }, 1.195 + 1.196 + function(win,doc,sel) { 1.197 + doc.body.innerHTML = 'I' 1.198 + let a = doc.body.firstChild; 1.199 + let span = createDOM(doc); 1.200 + let r = doc.createRange(); 1.201 + r.setStart(span, 0); 1.202 + r.setEnd(span, 1); 1.203 + sel.addRange(r); 1.204 + doc.body.appendChild(span); 1.205 + }, 1.206 + 1.207 + function(win,doc,sel) { 1.208 + doc.body.innerHTML = 'I' 1.209 + let a = doc.body.firstChild; 1.210 + let span = createDOM(doc); 1.211 + let r = doc.createRange(); 1.212 + r.setStart(span.firstChild, 0); 1.213 + r.setEnd(span.firstChild, 1); 1.214 + sel.addRange(r); 1.215 + doc.body.appendChild(span); 1.216 + doc.body.appendChild(span.firstChild); 1.217 + r.setEnd(span.firstChild, 1); 1.218 + }, 1.219 +] 1.220 + 1.221 +function runTestInIframe(run,t) { 1.222 + let f = document.createElement('iframe'); 1.223 + f.setAttribute('frameborder','0'); 1.224 + f.setAttribute('height','100'); 1.225 + f.setAttribute('width','200'); 1.226 + f.src = 'data:text/html,<body style="margin:0;padding:0;font-family:monospace">'; 1.227 + f.onload = function () { 1.228 + try { 1.229 + run(f.contentWindow, f.contentDocument, f.contentWindow.getSelection()); 1.230 + } finally { ++tests_done; } 1.231 + } 1.232 + return f; 1.233 +} 1.234 + 1.235 +var id; 1.236 +function checkFinished() { 1.237 + if (window.frames.length == tests_done) { 1.238 + clearInterval(id); 1.239 + document.documentElement.className = ""; 1.240 + } 1.241 +} 1.242 + 1.243 +function runTest() { 1.244 + for (let i=0; i < tests.length; ++i) { 1.245 + let t = tests[i]; 1.246 + document.body.appendChild(runTestInIframe(t)); 1.247 + } 1.248 + id = setInterval(checkFinished,500); 1.249 +} 1.250 +</script> 1.251 +</head> 1.252 +<body onload="runTest()"></body> 1.253 +</html>