test_bug469020.html (4186B)
1 <!DOCTYPE HTML> 2 <html> 3 <!-- 4 https://bugzilla.mozilla.org/show_bug.cgi?id=469020 5 --> 6 <head> 7 <title>Test for Bug 469020</title> 8 <script src="/tests/SimpleTest/SimpleTest.js"></script> 9 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> 10 </head> 11 <body> 12 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=469020">Mozilla Bug 469020</a> 13 <p id="display"></p> 14 <div id="content" style="display: none"> 15 16 </div> 17 <pre id="test"> 18 <script type="application/javascript"> 19 20 /** Test for Bug 469020 */ 21 22 var range = null; 23 var anchor = null; 24 25 function doRangeAnchor(elem, start, end) { 26 range = document.createRange(); 27 range.setStart(elem.firstChild, start); 28 end = end < elem.lastChild.length ? end : elem.lastChild.length 29 range.setEnd(elem.lastChild, end); 30 anchor = document.createElement('a'); 31 anchor.href = "javascript: void(0);"; 32 range.surroundContents(anchor); 33 } 34 35 function undoRangeAnchor() { 36 var pnode = anchor.parentNode; 37 var range2 = document.createRange(); 38 range2.selectNodeContents(anchor); 39 var contents = range2.extractContents(); 40 pnode.replaceChild(contents,anchor); 41 } 42 43 function serializeNode(node) { 44 var s; 45 var isElem = false; 46 if (node.nodeName == "#text") { 47 if (node.nodeValue) { 48 s = node.nodeValue 49 } else { 50 s = "<#empty>" 51 } 52 } else { 53 isElem = true; 54 s = "<" + node.nodeName + ">"; 55 } 56 for (var j = 0; j < node.childNodes.length; ++j) { 57 s += serializeNode(node.childNodes[j]); 58 } 59 if (isElem) { 60 s += "</" + node.nodeName + ">"; 61 } 62 return s; 63 } 64 65 function runTest(elementID, start, end, expected1, expected2, expected3) { 66 var e = document.getElementById(elementID); 67 doRangeAnchor(e, start, end); 68 is(serializeNode(e), expected1, "Wrong range behavior!"); 69 document.getElementById('log').textContent += serializeNode(e) + "\n"; 70 undoRangeAnchor(); 71 is(serializeNode(e), expected2, "Wrong range behavior!"); 72 document.getElementById('log').textContent += serializeNode(e) + "\n"; 73 doRangeAnchor(e, start, end); 74 is(serializeNode(e), expected3, "Wrong range behavior!"); 75 document.getElementById('log').textContent += serializeNode(e) + "\n"; 76 } 77 78 function runTests() { 79 runTest("test1", 0, 3, 80 "<P><#empty><A>http://www.<SPAN>mozilla.</SPAN>org</A><#empty></P>", 81 "<P><#empty>http://www.<SPAN>mozilla.</SPAN>org<#empty></P>", 82 "<P><#empty><A><#empty>http://www.<SPAN>mozilla.</SPAN>org<#empty></A><#empty></P>"); 83 84 runTest("test2", 1, 3, 85 "<P>h<A>ttp://www.<SPAN>mozilla.</SPAN>org</A><#empty></P>", 86 "<P>http://www.<SPAN>mozilla.</SPAN>org<#empty></P>", 87 "<P>h<A><#empty>ttp://www.<SPAN>mozilla.</SPAN>org<#empty></A><#empty></P>"); 88 89 runTest("test3", 0, 2, 90 "<P><#empty><A>http://www.<SPAN>mozilla.</SPAN>or</A>g</P>", 91 "<P><#empty>http://www.<SPAN>mozilla.</SPAN>org</P>", 92 "<P><#empty><A><#empty>http://www.<SPAN>mozilla.</SPAN>org</A><#empty></P>"); 93 94 runTest("test4", 1, 2, 95 "<P>h<A>ttp://www.<SPAN>mozilla.</SPAN>or</A>g</P>", 96 "<P>http://www.<SPAN>mozilla.</SPAN>org</P>", 97 "<P>h<A><#empty>ttp://www.<SPAN>mozilla.</SPAN>org</A><#empty></P>"); 98 99 runTest("test5", 11, 0, 100 "<P>http://www.<A><#empty><SPAN>mozilla.</SPAN><#empty></A>org</P>", 101 "<P>http://www.<#empty><SPAN>mozilla.</SPAN><#empty>org</P>", 102 "<P>http://www.<A><#empty><#empty><SPAN>mozilla.</SPAN><#empty><#empty></A>org</P>"); 103 104 runTest("test6", 10, 1, 105 "<P>http://www<A>.<SPAN>mozilla.</SPAN>o</A>rg</P>", 106 "<P>http://www.<SPAN>mozilla.</SPAN>org</P>", 107 "<P>http://www<A><#empty>.<SPAN>mozilla.</SPAN>or</A>g</P>"); 108 109 SimpleTest.finish(); 110 } 111 112 SimpleTest.waitForExplicitFinish(); 113 addLoadEvent(runTests); 114 115 116 117 </script> 118 </pre> 119 <p id="test1">http://www.<span>mozilla.</span>org</p> 120 <p id="test2">http://www.<span>mozilla.</span>org</p> 121 <p id="test3">http://www.<span>mozilla.</span>org</p> 122 <p id="test4">http://www.<span>mozilla.</span>org</p> 123 <p id="test5">http://www.<span>mozilla.</span>org</p> 124 <p id="test6">http://www.<span>mozilla.</span>org</p> 125 <pre id="log"> 126 </pre> 127 </body> 128 </html>