<!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|z'
    let a = doc.body.firstChild;
    let r = doc.createRange();
    r.setStart(a, 1);
    r.setEnd(a, 2);
    sel.addRange(r);
  },
   function(win,doc,sel) {
    doc.body.innerHTML = '.I<br>B<br>C|z'
    let a = doc.body.firstChild;
    let r = doc.createRange();
    r.setStart(doc.firstChild, 0);
    r.setEnd(a, 2);
    sel.addRange(r);
  },
 function(win,doc,sel) {
    doc.body.innerHTML = 'I<br>.B<br>C|z'
    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);
  },
  function(win,doc,sel) {
    doc.body.innerHTML = 'I<br>.B<br>C|z'
    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);
  },
  function(win,doc,sel) {
    doc.body.innerHTML = 'I<br>.B<br>C|z'
    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);
  },
  function(win,doc,sel) {
    doc.body.innerHTML = 'I<br>B<br>.C|z'
    let a = doc.body.firstChild;
    let c = doc.body.childNodes[4];
    let r = doc.createRange();
    r.setStart(a, 0);
    r.setEnd(c, 2);
    sel.addRange(r);
  },

  function(win,doc,sel) {
    doc.body.innerHTML = '|z|zI<br>B<br>C'
    let a = doc.body.firstChild;
    let r = doc.createRange();
    r.setStart(a, 4);
    r.setEnd(a, 5);
    sel.addRange(r);
  },
   function(win,doc,sel) {
    doc.body.innerHTML = '|z|zI<br>B<br>C'
    let a = doc.body.firstChild;
    let r = doc.createRange();
    r.setStart(doc.firstChild, 0);
    r.setEnd(a, 5);
    sel.addRange(r);
  },
 function(win,doc,sel) {
    doc.body.innerHTML = 'I<br>|z|zB<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);
  },
  function(win,doc,sel) {
    doc.body.innerHTML = 'I<br>|z|zB<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);
  },
  function(win,doc,sel) {
    doc.body.innerHTML = 'I<br>|z|zB<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);
  },
  function(win,doc,sel) {
    doc.body.innerHTML = 'I<br>B<br>|z|zC'
    let a = doc.body.firstChild;
    let c = doc.body.childNodes[4];
    let r = doc.createRange();
    r.setStart(a, 0);
    r.setEnd(c, 5);
    sel.addRange(r);
  },

  function(win,doc,sel) {
    doc.body.innerHTML = '<br>B<br>CI'
  },
  function(win,doc,sel) {
    doc.body.innerHTML = '<br>B<br>C'
  },
  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);
  },

  function(win,doc,sel) {
    doc.body.innerHTML = 'I|z'
  },

  function(win,doc,sel) {
    doc.body.innerHTML = 'Iz|'

    document.body.appendChild(document.createTextNode('I'));
    document.body.appendChild(document.createTextNode(' '));
    document.body.appendChild(createDOM(document));
  },
]

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>