Blame dom/base/test/test_bug409380.html

Packit f0b94e
Packit f0b94e
<html>
Packit f0b94e
Packit f0b94e
https://bugzilla.mozilla.org/show_bug.cgi?id=409380
Packit f0b94e
-->
Packit f0b94e
<head>
Packit f0b94e
  <title>Test for Bug 409380</title>
Packit f0b94e
  <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
Packit f0b94e
  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
Packit f0b94e
</head>
Packit f0b94e
<body>
Packit f0b94e
Mozilla Bug 409380
Packit f0b94e

Packit f0b94e
Packit f0b94e
  
Packit f0b94e
Packit f0b94e
Packit f0b94e
<script class="testbody" type="text/javascript">
Packit f0b94e
Packit f0b94e
/** Test for Bug 409380 **/
Packit f0b94e
Packit f0b94e
function runRangeTest()
Packit f0b94e
{
Packit f0b94e
  // Bug 336381
Packit f0b94e
  // This is a case which can't be supported (at least not at the moment)
Packit f0b94e
  // because DOM Range requires that when the start boundary point is text node,
Packit f0b94e
  // it must be splitted. But in this case boundary point doesn't have parent,
Packit f0b94e
  // so splitting doesn't work.
Packit f0b94e
  var zz = document.getElementById("connectedDiv").firstChild;
Packit f0b94e
  zz.remove();
Packit f0b94e
  var range = document.createRange();
Packit f0b94e
  var hadException = false;
Packit f0b94e
  try {
Packit f0b94e
    range.setStart(zz, 0);
Packit f0b94e
    range.setEnd(zz, 0);
Packit f0b94e
  } catch (ex) {
Packit f0b94e
    hadException = true;
Packit f0b94e
  }
Packit f0b94e
  ok(!hadException ,
Packit f0b94e
     "It should be possible to select text node even if the node is not in DOM.");
Packit f0b94e
  hadException = false;
Packit f0b94e
  try {
Packit f0b94e
    range.insertNode(document.createTextNode('5'));
Packit f0b94e
  } catch (ex) {
Packit f0b94e
    hadException = true;
Packit f0b94e
  }
Packit f0b94e
  ok(hadException,
Packit f0b94e
     "It shouldn't be possible to insert text node to a detached range.");
Packit f0b94e
Packit f0b94e
  // Bug 409380
Packit f0b94e
  var element = document.createElement('div');
Packit f0b94e
  var elementContent = "This is the element content";
Packit f0b94e
  element.innerHTML = elementContent;
Packit f0b94e
  range = element.ownerDocument.createRange();
Packit f0b94e
  hadException = false;
Packit f0b94e
  try {
Packit f0b94e
    range.selectNodeContents(element);
Packit f0b94e
  } catch (ex) {
Packit f0b94e
    hadException = true;
Packit f0b94e
  }
Packit f0b94e
  ok(!hadException,
Packit f0b94e
     "It should be possible to select node contents of a detached element.");
Packit f0b94e
  ok(range.toString() == elementContent, "Wrong range selection");
Packit f0b94e
Packit f0b94e
  // range.selectNode can't succeed because selectNode sets boundary points
Packit f0b94e
  // to be parentNode, which in this testcase is null.
Packit f0b94e
  element = document.createElement('div');
Packit f0b94e
  range = element.ownerDocument.createRange();
Packit f0b94e
  hadException = false;
Packit f0b94e
  try {
Packit f0b94e
    range.selectNode(element);
Packit f0b94e
  } catch (ex) {
Packit f0b94e
    hadException = true;
Packit f0b94e
  }
Packit f0b94e
  ok(hadException, "It shouldn't be possible to select a detached element.");
Packit f0b94e
Packit f0b94e
  // Testing contextual fragment.
Packit f0b94e
  range = element.ownerDocument.createRange();
Packit f0b94e
  var cf = null;
Packit f0b94e
  var testContent = "foobar";
Packit f0b94e
  try {
Packit f0b94e
    range.selectNodeContents(element);
Packit f0b94e
    cf = range.createContextualFragment(testContent);
Packit f0b94e
    element.appendChild(cf);
Packit f0b94e
  } catch (ex) {
Packit f0b94e
  }
Packit f0b94e
  ok(cf, "Creating contextual fragment didn't succeed!");
Packit f0b94e
  ok(element.innerHTML == testContent, "Wrong innerHTML!");
Packit f0b94e
Packit f0b94e
  element = document.createElement('div');
Packit f0b94e
  element.textContent = "foobar";
Packit f0b94e
  range = element.ownerDocument.createRange();
Packit f0b94e
  try {
Packit f0b94e
    range.selectNodeContents(element);
Packit f0b94e
    element.firstChild.insertData(3, " ");
Packit f0b94e
  } catch (ex) {
Packit f0b94e
  }
Packit f0b94e
  ok(range.toString() == "foo bar");
Packit f0b94e
Packit f0b94e
  // Testing contextual fragment, but inserting element to document
Packit f0b94e
  // after creating range.
Packit f0b94e
  element = document.createElement('div');
Packit f0b94e
  range = element.ownerDocument.createRange();
Packit f0b94e
  document.body.appendChild(element);
Packit f0b94e
  cf = null;
Packit f0b94e
  testContent = "foobar";
Packit f0b94e
  try {
Packit f0b94e
    range.selectNodeContents(element);
Packit f0b94e
    cf = range.createContextualFragment(testContent);
Packit f0b94e
    element.appendChild(cf);
Packit f0b94e
  } catch (ex) {
Packit f0b94e
  }
Packit f0b94e
  ok(cf, "Creating contextual fragment didn't succeed!");
Packit f0b94e
  ok(element.innerHTML == testContent, "Wrong innerHTML!");
Packit f0b94e
Packit f0b94e
  // Testing contextual fragment, but inserting element to document
Packit f0b94e
  // before creating range.
Packit f0b94e
  element = document.createElement('div');
Packit f0b94e
  document.body.appendChild(element);
Packit f0b94e
  range = element.ownerDocument.createRange();
Packit f0b94e
  cf = null;
Packit f0b94e
  testContent = "foobar";
Packit f0b94e
  try {
Packit f0b94e
    range.selectNodeContents(element);
Packit f0b94e
    cf = range.createContextualFragment(testContent);
Packit f0b94e
    element.appendChild(cf);
Packit f0b94e
  } catch (ex) {
Packit f0b94e
  }
Packit f0b94e
  ok(cf, "Creating contextual fragment didn't succeed!");
Packit f0b94e
  ok(element.innerHTML == testContent, "Wrong innerHTML!");
Packit f0b94e
Packit f0b94e
  element = document.createElement('div');
Packit f0b94e
  var range2 = element.ownerDocument.createRange();
Packit f0b94e
  hadException = false;
Packit f0b94e
  try {
Packit f0b94e
    range2.selectNodeContents(element);
Packit f0b94e
  } catch (ex) {
Packit f0b94e
    hadException = true;
Packit f0b94e
  }
Packit f0b94e
  ok(!hadException,
Packit f0b94e
     "It should be possible to select node contents of a detached element.");
Packit f0b94e
Packit f0b94e
  // Now the boundary points of range are in DOM, but boundary points of
Packit f0b94e
  // range2 aren't.
Packit f0b94e
  hadException = false;
Packit f0b94e
  try {
Packit f0b94e
    range.compareBoundaryPoints(range.START_TO_START, range2);
Packit f0b94e
  } catch (ex) {
Packit f0b94e
    hadException = true;
Packit f0b94e
  }
Packit f0b94e
  ok(hadException, "Should have got an exception!");
Packit f0b94e
Packit f0b94e
  hadException = false;
Packit f0b94e
  try {
Packit f0b94e
    range.compareBoundaryPoints(range.START_TO_END, range2);
Packit f0b94e
  } catch (ex) {
Packit f0b94e
    hadException = true;
Packit f0b94e
  }
Packit f0b94e
  ok(hadException, "Should have got an exception!");
Packit f0b94e
Packit f0b94e
  hadException = false;
Packit f0b94e
  try {
Packit f0b94e
    range.compareBoundaryPoints(range.END_TO_START, range2);
Packit f0b94e
  } catch (ex) {
Packit f0b94e
    hadException = true;
Packit f0b94e
  }
Packit f0b94e
  ok(hadException, "Should have got an exception!");
Packit f0b94e
Packit f0b94e
  hadException = false;
Packit f0b94e
  try {
Packit f0b94e
    range.compareBoundaryPoints(range.END_TO_END, range2);
Packit f0b94e
  } catch (ex) {
Packit f0b94e
    hadException = true;
Packit f0b94e
  }
Packit f0b94e
  ok(hadException, "Should have got an exception!");
Packit f0b94e
Packit f0b94e
  hadException = false;
Packit f0b94e
  try {
Packit f0b94e
    range2.compareBoundaryPoints(range.START_TO_START, range);
Packit f0b94e
  } catch (ex) {
Packit f0b94e
    hadException = true;
Packit f0b94e
  }
Packit f0b94e
  ok(hadException, "Should have got an exception!");
Packit f0b94e
Packit f0b94e
  hadException = false;
Packit f0b94e
  try {
Packit f0b94e
    range2.compareBoundaryPoints(range.START_TO_END, range);
Packit f0b94e
  } catch (ex) {
Packit f0b94e
    hadException = true;
Packit f0b94e
  }
Packit f0b94e
  ok(hadException, "Should have got an exception!");
Packit f0b94e
Packit f0b94e
  hadException = false;
Packit f0b94e
  try {
Packit f0b94e
    range2.compareBoundaryPoints(range.END_TO_START, range);
Packit f0b94e
  } catch (ex) {
Packit f0b94e
    hadException = true;
Packit f0b94e
  }
Packit f0b94e
  ok(hadException, "Should have got an exception!");
Packit f0b94e
Packit f0b94e
  hadException = false;
Packit f0b94e
  try {
Packit f0b94e
    range2.compareBoundaryPoints(range.END_TO_END, range);
Packit f0b94e
  } catch (ex) {
Packit f0b94e
    hadException = true;
Packit f0b94e
  }
Packit f0b94e
  ok(hadException, "Should have got an exception!");
Packit f0b94e
Packit f0b94e
  // range3 will be in document
Packit f0b94e
  element = document.createElement('div');
Packit f0b94e
  document.body.appendChild(element);
Packit f0b94e
  range3 = element.ownerDocument.createRange();
Packit f0b94e
  hadException = false;
Packit f0b94e
  try {
Packit f0b94e
    range3.selectNodeContents(element);
Packit f0b94e
  } catch (ex) {
Packit f0b94e
    hadException = true;
Packit f0b94e
  }
Packit f0b94e
  ok(!hadException,
Packit f0b94e
     "It should be possible to select node contents of a detached element.");
Packit f0b94e
Packit f0b94e
  hadException = false;
Packit f0b94e
  try {
Packit f0b94e
    range3.compareBoundaryPoints(range.START_TO_START, range);
Packit f0b94e
  } catch (ex) {
Packit f0b94e
    hadException = true;
Packit f0b94e
  }
Packit f0b94e
  ok(!hadException, "Shouldn't have got an exception!");
Packit f0b94e
Packit f0b94e
  hadException = false;
Packit f0b94e
  try {
Packit f0b94e
    range3.compareBoundaryPoints(range.START_TO_END, range);
Packit f0b94e
  } catch (ex) {
Packit f0b94e
    hadException = true;
Packit f0b94e
  }
Packit f0b94e
  ok(!hadException, "Shouldn't have got an exception!");
Packit f0b94e
Packit f0b94e
  hadException = false;
Packit f0b94e
  try {
Packit f0b94e
    range3.compareBoundaryPoints(range.END_TO_START, range);
Packit f0b94e
  } catch (ex) {
Packit f0b94e
    hadException = true;
Packit f0b94e
  }
Packit f0b94e
  ok(!hadException, "Shouldn't have got an exception!");
Packit f0b94e
Packit f0b94e
  hadException = false;
Packit f0b94e
  try {
Packit f0b94e
    range3.compareBoundaryPoints(range.END_TO_END, range);
Packit f0b94e
  } catch (ex) {
Packit f0b94e
    hadException = true;
Packit f0b94e
  }
Packit f0b94e
  ok(!hadException, "Shouldn't have got an exception!");
Packit f0b94e
Packit f0b94e
  // range4 won't be in document
Packit f0b94e
  element = document.createElement('div');
Packit f0b94e
  var range4 = element.ownerDocument.createRange();
Packit f0b94e
  hadException = false;
Packit f0b94e
  try {
Packit f0b94e
    range4.selectNodeContents(element);
Packit f0b94e
  } catch (ex) {
Packit f0b94e
    hadException = true;
Packit f0b94e
  }
Packit f0b94e
  ok(!hadException,
Packit f0b94e
     "It should be possible to select node contents of a detached element.");
Packit f0b94e
Packit f0b94e
  hadException = false;
Packit f0b94e
  try {
Packit f0b94e
    range4.compareBoundaryPoints(range.START_TO_START, range);
Packit f0b94e
  } catch (ex) {
Packit f0b94e
    hadException = true;
Packit f0b94e
  }
Packit f0b94e
  ok(hadException, "Should have got an exception!");
Packit f0b94e
Packit f0b94e
  hadException = false;
Packit f0b94e
  try {
Packit f0b94e
    range2.compareBoundaryPoints(range.START_TO_END, range);
Packit f0b94e
  } catch (ex) {
Packit f0b94e
    hadException = true;
Packit f0b94e
  }
Packit f0b94e
  ok(hadException, "Should have got an exception!");
Packit f0b94e
Packit f0b94e
  hadException = false;
Packit f0b94e
  try {
Packit f0b94e
    range4.compareBoundaryPoints(range.END_TO_START, range);
Packit f0b94e
  } catch (ex) {
Packit f0b94e
    hadException = true;
Packit f0b94e
  }
Packit f0b94e
  ok(hadException, "Should have got an exception!");
Packit f0b94e
Packit f0b94e
  hadException = false;
Packit f0b94e
  try {
Packit f0b94e
    range4.compareBoundaryPoints(range.END_TO_END, range);
Packit f0b94e
  } catch (ex) {
Packit f0b94e
    hadException = true;
Packit f0b94e
  }
Packit f0b94e
  ok(hadException, "Should have got an exception!");
Packit f0b94e
Packit f0b94e
  // Compare range to itself.
Packit f0b94e
  hadException = false;
Packit f0b94e
  try {
Packit f0b94e
    range.compareBoundaryPoints(range.START_TO_START, range);
Packit f0b94e
  } catch (ex) {
Packit f0b94e
    hadException = true;
Packit f0b94e
  }
Packit f0b94e
  ok(!hadException, "Shouldn't have got an exception!");
Packit f0b94e
Packit f0b94e
  hadException = false;
Packit f0b94e
  try {
Packit f0b94e
    range.compareBoundaryPoints(range.START_TO_END, range);
Packit f0b94e
  } catch (ex) {
Packit f0b94e
    hadException = true;
Packit f0b94e
  }
Packit f0b94e
  ok(!hadException, "Shouldn't have got an exception!");
Packit f0b94e
Packit f0b94e
  hadException = false;
Packit f0b94e
  try {
Packit f0b94e
    range.compareBoundaryPoints(range.END_TO_START, range);
Packit f0b94e
  } catch (ex) {
Packit f0b94e
    hadException = true;
Packit f0b94e
  }
Packit f0b94e
  ok(!hadException, "Shouldn't have got an exception!");
Packit f0b94e
Packit f0b94e
  hadException = false;
Packit f0b94e
  try {
Packit f0b94e
    range.compareBoundaryPoints(range.END_TO_END, range);
Packit f0b94e
  } catch (ex) {
Packit f0b94e
    hadException = true;
Packit f0b94e
  }
Packit f0b94e
  ok(!hadException, "Shouldn't have got an exception!");
Packit f0b94e
Packit f0b94e
  // Attach startContainer of range2 to document.
Packit f0b94e
  ok(range2.startContainer == range2.endContainer, "Wrong container?");
Packit f0b94e
  document.body.appendChild(range2.startContainer);
Packit f0b94e
Packit f0b94e
  hadException = false;
Packit f0b94e
  try {
Packit f0b94e
    range2.compareBoundaryPoints(range.START_TO_START, range);
Packit f0b94e
  } catch (ex) {
Packit f0b94e
    hadException = true;
Packit f0b94e
  }
Packit f0b94e
  ok(!hadException, "Shouldn't have got an exception!");
Packit f0b94e
Packit f0b94e
  hadException = false;
Packit f0b94e
  try {
Packit f0b94e
    range2.compareBoundaryPoints(range.START_TO_END, range);
Packit f0b94e
  } catch (ex) {
Packit f0b94e
    hadException = true;
Packit f0b94e
  }
Packit f0b94e
  ok(!hadException, "Shouldn't have got an exception!");
Packit f0b94e
Packit f0b94e
  hadException = false;
Packit f0b94e
  try {
Packit f0b94e
    range2.compareBoundaryPoints(range.END_TO_START, range);
Packit f0b94e
  } catch (ex) {
Packit f0b94e
    hadException = true;
Packit f0b94e
  }
Packit f0b94e
  ok(!hadException, "Shouldn't have got an exception!");
Packit f0b94e
Packit f0b94e
  hadException = false;
Packit f0b94e
  try {
Packit f0b94e
    range2.compareBoundaryPoints(range.END_TO_END, range);
Packit f0b94e
  } catch (ex) {
Packit f0b94e
    hadException = true;
Packit f0b94e
  }
Packit f0b94e
  ok(!hadException, "Shouldn't have got an exception!");
Packit f0b94e
  
Packit f0b94e
  SimpleTest.finish();
Packit f0b94e
}
Packit f0b94e
Packit f0b94e
SimpleTest.waitForExplicitFinish();
Packit f0b94e
addLoadEvent(runRangeTest);
Packit f0b94e
Packit f0b94e
</script>
Packit f0b94e
Packit f0b94e
zz
Packit f0b94e
</body>
Packit f0b94e
</html>
Packit f0b94e