|
1 <!DOCTYPE HTML> |
|
2 <html> |
|
3 <!-- |
|
4 https://bugzilla.mozilla.org/show_bug.cgi?id=191864 |
|
5 --> |
|
6 <head> |
|
7 <title>Test for Bug 191864</title> |
|
8 <script type="application/javascript" src="/MochiKit/packed.js"></script> |
|
9 <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> |
|
10 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> |
|
11 </head> |
|
12 <body> |
|
13 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=191864">Mozilla Bug 191864</a> |
|
14 <p id="display"> |
|
15 <span id="col1" style="float:left; height:800px; width:180px;"></span> |
|
16 <span id="col2" style="float:left; height:800px; width:180px;"></span> |
|
17 </p> |
|
18 <div id="content" style="display: none"> |
|
19 |
|
20 </div> |
|
21 <pre id="test"> |
|
22 <script type="application/javascript;version=1.7"> |
|
23 var tests = [ |
|
24 [ {}, [0,4], "012345678" ], |
|
25 [ {}, [0,0], "012345678" ], |
|
26 [ {}, [0,9], "012345678" ], |
|
27 [ {startOffset:4}, [0,4], "012345678" ], |
|
28 [ {startOffset:5}, [0,4], "012345678" ], |
|
29 [ {startOffset:5,endOffset:6}, [0,4], "012345678" ], |
|
30 [ {endOffset:5}, [0,4], "012345678" ], |
|
31 [ {endOffset:4}, [0,4], "012345678" ], |
|
32 [ {endOffset:3}, [0,4], "012345678" ], |
|
33 [ {startOffset:1,endOffset:3}, [0,4], "012345678" ], |
|
34 [ {startOffset:7,endOffset:7}, [0,4], "012345678" ], |
|
35 [ {startOffset:4,endOffset:4}, [0,4], "012345678" ], |
|
36 [ {endNode:1}, [0,4], "012345678", "" ], |
|
37 [ {endNode:1}, [0,4], "01234567", "8" ], |
|
38 [ {endNode:1}, [1,4], "0", "12345678" ], |
|
39 [ {endNode:2}, [1,4], "0", "12345", "678" ], |
|
40 ] |
|
41 |
|
42 function runtest(r,p,t) { |
|
43 // create content |
|
44 document.original_nodes = []; |
|
45 for (let i = 2; i < t.length; ++i) { |
|
46 c = document.createTextNode(t[i]); |
|
47 p.appendChild(c); |
|
48 document.original_nodes.push(c); |
|
49 } |
|
50 |
|
51 // setup the range |
|
52 let sel = t[0] |
|
53 let startNode = p.firstChild; |
|
54 let startOffset = sel.startOffset === undefined ? 0 : sel.startOffset; |
|
55 let endNode = sel.endNode === undefined ? startNode : p.childNodes[sel.endNode]; |
|
56 let endOffset = sel.endOffset === undefined ? endNode.length : sel.endOffset; |
|
57 r.setStart(startNode, startOffset); |
|
58 r.setEnd(endNode, endOffset); |
|
59 |
|
60 // splitText |
|
61 let split = t[1] |
|
62 p.childNodes[split[0]].splitText(split[1]) |
|
63 } |
|
64 function test_split(r,p,t) { |
|
65 runtest(r,p,t); |
|
66 } |
|
67 function test_split_merge(r,p,t) { |
|
68 runtest(r,p,t); |
|
69 p.normalize(); |
|
70 } |
|
71 </script> |
|
72 |
|
73 <script type="application/javascript;version=1.7"> |
|
74 |
|
75 /** Test for Bug 191864 **/ |
|
76 |
|
77 var results = [ |
|
78 /* test_split */ |
|
79 [ {}, [ [0, "0123"], "45678" ]], |
|
80 [ {}, [ [0, ""], "012345678" ]], |
|
81 [ {endNode:0, endOffset:9}, [ [0, "012345678"], "" ]], |
|
82 [ {startOffset:4}, [ [0, "0123"], "45678" ]], |
|
83 [ {startNode:1, startOffset:1}, [ [0, "0123"], "45678" ]], |
|
84 [ {startNode:1, startOffset:1, endOffset:2}, [ [0, "0123"], "45678" ]], |
|
85 [ {endOffset:1}, [ [0, "0123"], "45678" ]], |
|
86 [ {endNode:0}, [ [0, "0123"], "45678" ]], |
|
87 [ {endNode:0, endOffset:3}, [ [0, "0123"], "45678" ]], |
|
88 [ {startOffset:1, endNode:0, endOffset:3}, [ [0, "0123"], "45678" ]], |
|
89 [ {startNode:1, startOffset:3, endOffset:3}, [ [0, "0123"], "45678" ]], |
|
90 [ {startOffset:4, endNode:0}, [ [0, "0123"], "45678" ]], |
|
91 [ {endNode:2, endOffset:0}, [ [0, "0123"], "45678", [1, ""] ]], |
|
92 [ {endNode:2}, [ [0, "0123"], "4567", [1, "8"] ]], |
|
93 [ {endNode:2}, [ [0, "0"], [1, "1234"], "5678" ]], |
|
94 [ {endNode:3}, [ [0, "0"], [1, "1234"], "5", [2, "678"] ]], |
|
95 /* test_split_merge */ |
|
96 [ {}, [ [0, "012345678" ] ]], |
|
97 [ {startParent:true}, [ "012345678" ]], /* splitText() creates an empty first child which is removed by normalize() */ |
|
98 [ {}, [ [0, "012345678" ] ]], |
|
99 [ {startOffset:4}, [ [0, "012345678" ] ]], |
|
100 [ {startOffset:5}, [ [0, "012345678" ] ]], |
|
101 [ {startOffset:5,endOffset:6}, [ [0, "012345678" ] ]], |
|
102 [ {endOffset:5}, [ [0, "012345678" ] ]], |
|
103 [ {endOffset:4}, [ [0, "012345678" ] ]], |
|
104 [ {endOffset:3}, [ [0, "012345678" ] ]], |
|
105 [ {startOffset:1,endOffset:3}, [ [0, "012345678" ] ]], |
|
106 [ {startOffset:7,endOffset:7}, [ [0, "012345678" ] ]], |
|
107 [ {startOffset:4,endOffset:4}, [ [0, "012345678" ] ]], |
|
108 [ {endParent:true}, [ [0, "012345678" ] ]], |
|
109 [ {}, [ [0, "012345678" ] ]], |
|
110 [ {}, [ [0, "012345678" ] ]], |
|
111 [ {}, [ [0, "012345678" ] ]], |
|
112 ] |
|
113 |
|
114 function verifyResults(r,p,i) { |
|
115 let nodes = results[i][1]; |
|
116 is(p.childNodes.length, nodes.length, "same number of DOM nodes" + " (test " + i + ")"); |
|
117 for (let j = 0; j < nodes.length; ++j) { |
|
118 let a = nodes[j]; |
|
119 let b = p.childNodes[j]; |
|
120 if (a instanceof Array) { |
|
121 is(b, document.original_nodes[a[0]], "same node" + " (test " + i + " child " + j + ")"); |
|
122 is(b.textContent, a[1], "contents2" + " (test " + i + " child " + j + ")"); |
|
123 } else { |
|
124 is(b.nodeType, Node.TEXT_NODE, "text node" + " (test " + i + " child " + j + ")"); |
|
125 is(b.textContent, a, "contents1" + " (test " + i + " child " + j + ")"); |
|
126 } |
|
127 } |
|
128 let sel = results[i][0]; |
|
129 if (sel.todo) { |
|
130 alert(r.startContainer + '\n' + r.startOffset + '\n' + r.endContainer + '\n' + r.endOffset + '\n') |
|
131 return; |
|
132 } |
|
133 let startNode = sel.startNode === undefined ? p.firstChild : p.childNodes[sel.startNode]; |
|
134 let startOffset = sel.startOffset === undefined ? 0 : sel.startOffset; |
|
135 if (sel.startParent) { startNode = p; startOffset = 0; } |
|
136 let endNode = sel.endNode === undefined ? p.childNodes[p.childNodes.length>1 ? 1 : 0] : p.childNodes[sel.endNode]; |
|
137 let endOffset = sel.endOffset === undefined ? endNode.length : sel.endOffset; |
|
138 if (sel.endParent) { endNode = p; endOffset = 1; } |
|
139 is(r.startContainer, startNode, "range start node" + " (test " + i + ")"); |
|
140 is(r.startOffset, startOffset, "range start offset" + " (test " + i + ")"); |
|
141 is(r.endContainer, endNode, "range end node" + " (test " + i + ")"); |
|
142 is(r.endOffset, endOffset, "range end offset" + " (test " + i + ")"); |
|
143 } |
|
144 |
|
145 function runTest() { |
|
146 let col1 = document.getElementById('col1'); |
|
147 let col2 = document.getElementById('col2'); |
|
148 for (let i=0; i < tests.length; ++i) { |
|
149 let t = tests[i]; |
|
150 let p = document.createElement('p') |
|
151 col1.appendChild(p); |
|
152 let r = document.createRange(); |
|
153 test_split(r,p,t); |
|
154 verifyResults(r,p,i); |
|
155 } |
|
156 for (let i=0; i < tests.length; ++i) { |
|
157 let t = tests[i]; |
|
158 let p = document.createElement('p') |
|
159 col2.appendChild(p); |
|
160 let r = document.createRange(); |
|
161 test_split_merge(r,p,t); |
|
162 verifyResults(r,p,i+tests.length); |
|
163 } |
|
164 SimpleTest.finish(); |
|
165 } |
|
166 |
|
167 window.onload = function() { setTimeout(runTest, 0); }; |
|
168 SimpleTest.waitForExplicitFinish(); |
|
169 |
|
170 </script> |
|
171 </pre> |
|
172 </body> |
|
173 </html> |