layout/reftests/selection/dom-mutations.html

changeset 0
6474c204b198
     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>

mercurial