|
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 type="application/javascript" 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> |