content/base/test/test_bug469020.html

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/content/base/test/test_bug469020.html	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,128 @@
     1.4 +<!DOCTYPE HTML>
     1.5 +<html>
     1.6 +<!--
     1.7 +https://bugzilla.mozilla.org/show_bug.cgi?id=469020
     1.8 +-->
     1.9 +<head>
    1.10 +  <title>Test for Bug 469020</title>
    1.11 +  <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
    1.12 +  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
    1.13 +</head>
    1.14 +<body>
    1.15 +<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=469020">Mozilla Bug 469020</a>
    1.16 +<p id="display"></p>
    1.17 +<div id="content" style="display: none">
    1.18 +  
    1.19 +</div>
    1.20 +<pre id="test">
    1.21 +<script type="application/javascript">
    1.22 +
    1.23 +/** Test for Bug 469020 **/
    1.24 +
    1.25 +  var range = null;
    1.26 +  var anchor = null;
    1.27 +
    1.28 +  function doRangeAnchor(elem, start, end) {
    1.29 +    range = document.createRange();
    1.30 +    range.setStart(elem.firstChild, start);
    1.31 +    end = end < elem.lastChild.length ? end : elem.lastChild.length
    1.32 +    range.setEnd(elem.lastChild, end);
    1.33 +    anchor = document.createElement('a');
    1.34 +    anchor.href = "javascript: void(0);";
    1.35 +    range.surroundContents(anchor);
    1.36 +  }
    1.37 +
    1.38 +  function undoRangeAnchor() {
    1.39 +    var pnode = anchor.parentNode;
    1.40 +    var range2 = document.createRange();
    1.41 +    range2.selectNodeContents(anchor);
    1.42 +    var contents = range2.extractContents();
    1.43 +    pnode.replaceChild(contents,anchor);
    1.44 +  }
    1.45 +
    1.46 +function serializeNode(node) {
    1.47 +  var s;
    1.48 +  var isElem = false;
    1.49 +  if (node.nodeName == "#text") {
    1.50 +    if (node.nodeValue) {
    1.51 +      s = node.nodeValue
    1.52 +    } else {
    1.53 +      s = "<#empty>"
    1.54 +    }
    1.55 +  } else {
    1.56 +    isElem = true;
    1.57 +    s = "<" + node.nodeName + ">";
    1.58 +  }
    1.59 +  for (var j = 0; j < node.childNodes.length; ++j) {
    1.60 +    s += serializeNode(node.childNodes[j]);
    1.61 +  }
    1.62 +  if (isElem) {
    1.63 +    s += "</" + node.nodeName + ">";
    1.64 +  }
    1.65 +  return s;
    1.66 +}
    1.67 +
    1.68 +function runTest(elementID, start, end, expected1, expected2, expected3) {
    1.69 +  var e = document.getElementById(elementID);
    1.70 +  doRangeAnchor(e, start, end);
    1.71 +  is(serializeNode(e), expected1, "Wrong range behavior!");
    1.72 +  document.getElementById('log').textContent += serializeNode(e) + "\n";
    1.73 +  undoRangeAnchor();
    1.74 +  is(serializeNode(e), expected2, "Wrong range behavior!");
    1.75 +  document.getElementById('log').textContent += serializeNode(e) + "\n";
    1.76 +  doRangeAnchor(e, start, end);
    1.77 +  is(serializeNode(e), expected3, "Wrong range behavior!");
    1.78 +  document.getElementById('log').textContent += serializeNode(e) + "\n";
    1.79 +}
    1.80 +
    1.81 +function runTests() {
    1.82 +  runTest("test1", 0, 3,
    1.83 +          "<P><#empty><A>http://www.<SPAN>mozilla.</SPAN>org</A><#empty></P>",
    1.84 +          "<P><#empty>http://www.<SPAN>mozilla.</SPAN>org<#empty></P>",
    1.85 +          "<P><#empty><A><#empty>http://www.<SPAN>mozilla.</SPAN>org<#empty></A><#empty></P>");
    1.86 +
    1.87 +  runTest("test2", 1, 3,
    1.88 +          "<P>h<A>ttp://www.<SPAN>mozilla.</SPAN>org</A><#empty></P>",
    1.89 +          "<P>http://www.<SPAN>mozilla.</SPAN>org<#empty></P>",
    1.90 +          "<P>h<A><#empty>ttp://www.<SPAN>mozilla.</SPAN>org<#empty></A><#empty></P>");
    1.91 +
    1.92 +  runTest("test3", 0, 2,
    1.93 +          "<P><#empty><A>http://www.<SPAN>mozilla.</SPAN>or</A>g</P>",
    1.94 +          "<P><#empty>http://www.<SPAN>mozilla.</SPAN>org</P>",
    1.95 +          "<P><#empty><A><#empty>http://www.<SPAN>mozilla.</SPAN>org</A><#empty></P>");
    1.96 +
    1.97 +  runTest("test4", 1, 2,
    1.98 +          "<P>h<A>ttp://www.<SPAN>mozilla.</SPAN>or</A>g</P>",
    1.99 +          "<P>http://www.<SPAN>mozilla.</SPAN>org</P>",
   1.100 +          "<P>h<A><#empty>ttp://www.<SPAN>mozilla.</SPAN>org</A><#empty></P>");
   1.101 +
   1.102 +  runTest("test5", 11, 0,
   1.103 +          "<P>http://www.<A><#empty><SPAN>mozilla.</SPAN><#empty></A>org</P>",
   1.104 +          "<P>http://www.<#empty><SPAN>mozilla.</SPAN><#empty>org</P>",
   1.105 +          "<P>http://www.<A><#empty><#empty><SPAN>mozilla.</SPAN><#empty><#empty></A>org</P>");
   1.106 +
   1.107 +  runTest("test6", 10, 1,
   1.108 +          "<P>http://www<A>.<SPAN>mozilla.</SPAN>o</A>rg</P>",
   1.109 +          "<P>http://www.<SPAN>mozilla.</SPAN>org</P>",
   1.110 +          "<P>http://www<A><#empty>.<SPAN>mozilla.</SPAN>or</A>g</P>");
   1.111 +
   1.112 +  SimpleTest.finish();
   1.113 +}
   1.114 +
   1.115 +SimpleTest.waitForExplicitFinish();
   1.116 +addLoadEvent(runTests);
   1.117 +
   1.118 +
   1.119 +
   1.120 +</script>
   1.121 +</pre>
   1.122 +<p id="test1">http://www.<span>mozilla.</span>org</p>
   1.123 +<p id="test2">http://www.<span>mozilla.</span>org</p>
   1.124 +<p id="test3">http://www.<span>mozilla.</span>org</p>
   1.125 +<p id="test4">http://www.<span>mozilla.</span>org</p>
   1.126 +<p id="test5">http://www.<span>mozilla.</span>org</p>
   1.127 +<p id="test6">http://www.<span>mozilla.</span>org</p>
   1.128 +<pre id="log">
   1.129 +</pre>
   1.130 +</body>
   1.131 +</html>

mercurial