content/base/test/test_textnode_split_in_selection.html

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:23193588a92a
1 <!DOCTYPE HTML>
2 <html>
3 <!--
4 https://bugzilla.mozilla.org/show_bug.cgi?id=803924
5 -->
6 <head>
7 <meta charset="utf-8">
8 <title>Test for Bug 803924</title>
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=803924">Mozilla Bug 803924</a>
14 <p id="display"></p>
15 <div id="content" style="display: none">
16
17 </div>
18 <pre id="test">
19 <script type="application/javascript">
20
21 /** Test for Bug 803924 **/
22
23 var sel = document.getSelection();
24 var flush = true;
25 var dry = true;
26 var run = "";
27 var empty_range;
28 var empty_first_text_range;
29 var empty_last_text_range;
30 var full_range;
31
32 function check(range, expected, test)
33 {
34 is(""+range, expected, test);
35 is(""+empty_range, "", "empty range test after: "+test);
36 is(""+empty_first_text_range, "", "empty first text range test after: "+test);
37 if (empty_last_text_range) is(""+empty_last_text_range, "", "empty last text range test after: "+test);
38 is(""+full_range, full_range.startContainer.textContent, "full range test after: "+test);
39 }
40
41 function newDiv()
42 {
43 var div = document.createElement('div');
44 for (var i = 0; i < arguments.length; ++i) {
45 div.appendChild(document.createTextNode(arguments[i]));
46 }
47 document.body.appendChild(div)
48 empty_range = document.createRange();
49 empty_range.setStart(div,0);
50 empty_range.setEnd(div,0);
51 var firstTextNode = div.childNodes[0];
52 var lastTextNode = div.childNodes[div.childNodes.length - 1];
53 empty_first_text_range = document.createRange();
54 empty_first_text_range.setStart(firstTextNode,0);
55 empty_first_text_range.setEnd(firstTextNode,0);
56 empty_last_text_range = null;
57 if (firstTextNode != lastTextNode) {
58 empty_last_text_range = document.createRange();
59 empty_last_text_range.setStart(lastTextNode,0);
60 empty_last_text_range.setEnd(lastTextNode,0);
61 }
62 full_range = document.createRange();
63 full_range.setStart(div,0);
64 full_range.setEnd(div,div.childNodes.length);
65 return div;
66 }
67
68 function selEnd(div,child,index,split,s)
69 {
70 var start = div.childNodes[child];
71 var r = document.createRange();
72 sel.addRange(r);
73 r.setStart(start, index);
74 r.setEnd(div, div.childNodes.length);
75 if (!dry) start.splitText(split);
76 check(r,s,run+" selEnd "+child+","+index+","+split);
77 }
78
79 function selStart(div,child,index,split,s)
80 {
81 if (flush) document.body.getClientRects();
82 var start = div.childNodes[child];
83 var r = document.createRange();
84 sel.addRange(r);
85 r.setStart(div, 0);
86 r.setEnd(start, index);
87 if (!dry) start.splitText(split);
88 check(r,s,run+" selStart "+child+","+index+","+split);
89 }
90
91 function selMiddleStart(div,child,index,split,s)
92 {
93 if (flush) document.body.getClientRects();
94 var start = div.childNodes[child];
95 var r = document.createRange();
96 sel.addRange(r);
97 r.setStart(div, 1);
98 r.setEnd(start, index);
99 if (!dry) start.splitText(split);
100 check(r,s,run+" selMiddleStart "+child+","+index+","+split);
101 }
102
103 function selMiddleEnd(div,child,index,split,s)
104 {
105 if (flush) document.body.getClientRects();
106 var start = div.childNodes[child];
107 var r = document.createRange();
108 sel.addRange(r);
109 r.setStart(start, index);
110 r.setEnd(div, 2);
111 if (!dry) start.splitText(split);
112 check(r,s,run+" selMiddleEnd "+child+","+index+","+split);
113 }
114
115 function splitBefore(div,child,index,split,s)
116 {
117 if (flush) document.body.getClientRects();
118 var start = div.childNodes[child];
119 var r = document.createRange();
120 sel.addRange(r);
121 r.setStart(div, 1);
122 r.setEnd(start, index);
123 if (!dry) div.childNodes[0].splitText(split);
124 check(r,s,run+" splitBefore "+child+","+index+","+split);
125 }
126
127 function runTests(s)
128 {
129 run = s+":";
130 selEnd(newDiv('111'), 0,0,0,'111');
131 selEnd(newDiv('111'), 0,0,1,'111');
132 selEnd(newDiv('111'), 0,0,3,'111');
133 selEnd(newDiv(''), 0,0,0,'');
134 selEnd(newDiv('111'), 0,1,0,'11');
135 selEnd(newDiv('111'), 0,2,1,'1');
136 selEnd(newDiv('111'), 0,1,3,'11');
137 selEnd(newDiv('111','222'), 0,1,0,'11222');
138 selEnd(newDiv('111','222'), 0,2,1,'1222');
139 selEnd(newDiv('111','222'), 0,1,3,'11222');
140 selEnd(newDiv('111','222'), 1,1,0,'22');
141 selEnd(newDiv('111','222'), 1,2,1,'2');
142 selEnd(newDiv('','222'), 1,1,1,'22');
143 selEnd(newDiv('','222'), 0,0,0,'222');
144 selEnd(newDiv('111',''), 0,1,0,'11');
145 selEnd(newDiv('111','222'), 1,1,3,'22');
146 selEnd(newDiv('111','222','333'), 1,1,0,'22333');
147 selEnd(newDiv('111','222','333'), 1,2,1,'2333');
148 selEnd(newDiv('111','222','333'), 1,1,3,'22333');
149 selEnd(newDiv('111','222',''), 1,1,3,'22');
150 selEnd(newDiv('111','','333'), 0,1,3,'11333');
151
152 selStart(newDiv('111'), 0,0,0,'');
153 selStart(newDiv('111'), 0,0,1,'');
154 selStart(newDiv('111'), 0,0,3,'');
155 selStart(newDiv('111'), 0,1,0,'1');
156 selStart(newDiv('111'), 0,2,1,'11');
157 selStart(newDiv('111'), 0,1,3,'1');
158 selStart(newDiv(''), 0,0,0,'');
159 selStart(newDiv('111','222'), 0,1,0,'1');
160 selStart(newDiv('111','222'), 0,2,1,'11');
161 selStart(newDiv('111','222'), 0,1,3,'1');
162 selStart(newDiv('111','222'), 1,1,0,'1112');
163 selStart(newDiv('111','222'), 1,2,1,'11122');
164 selStart(newDiv('111','222'), 1,1,3,'1112');
165 selStart(newDiv('','222'), 1,1,2,'2');
166 selStart(newDiv('','222'), 0,0,0,'');
167 selStart(newDiv('111',''), 1,0,0,'111');
168 selStart(newDiv('111','222','333'), 1,1,0,'1112');
169 selStart(newDiv('111','222','333'), 1,2,1,'11122');
170 selStart(newDiv('111','222','333'), 1,1,3,'1112');
171 selStart(newDiv('111','','333'), 1,0,0,'111');
172 selStart(newDiv('111','222',''), 1,1,3,'1112');
173
174 selMiddleStart(newDiv('111','222','333'), 1,1,0,'2');
175 selMiddleStart(newDiv('111','222','333'), 1,2,1,'22');
176 selMiddleStart(newDiv('111','222','333'), 1,1,3,'2');
177 selMiddleStart(newDiv('111','222','333'), 2,1,0,'2223');
178 selMiddleStart(newDiv('111','222','333'), 2,2,1,'22233');
179 selMiddleStart(newDiv('111','222','333'), 2,1,3,'2223');
180 selMiddleStart(newDiv('111','','333'), 2,1,2,'3');
181 selMiddleStart(newDiv('111','','333'), 1,0,0,'');
182
183 selMiddleEnd(newDiv('111','222','333'), 0,1,0,'11222');
184 selMiddleEnd(newDiv('111','222','333'), 0,2,1,'1222');
185 selMiddleEnd(newDiv('111','222','333'), 0,1,3,'11222');
186 selMiddleEnd(newDiv('111','222','333'), 1,1,0,'22');
187 selMiddleEnd(newDiv('111','222','333'), 1,2,1,'2');
188 selMiddleEnd(newDiv('111','222','333'), 1,1,3,'22');
189 selMiddleEnd(newDiv('111','','333'), 0,1,2,'11');
190 selMiddleEnd(newDiv('111','','333'), 0,1,3,'11');
191 selMiddleEnd(newDiv('111','','333'), 1,0,0,'');
192
193 splitBefore(newDiv('111','222','333'), 1,1,0,'2');
194 splitBefore(newDiv('111','222','333'), 1,2,1,'22');
195 splitBefore(newDiv('111','222','333'), 1,1,3,'2');
196 splitBefore(newDiv('111','222','333'), 2,1,0,'2223');
197 splitBefore(newDiv('111','222','333'), 2,2,1,'22233');
198 splitBefore(newDiv('111','222','333'), 2,1,3,'2223');
199 splitBefore(newDiv('','222','333'), 1,1,0,'2');
200 splitBefore(newDiv('','','333'), 1,0,0,'');
201 splitBefore(newDiv('','222',''), 2,0,0,'222');
202 splitBefore(newDiv('111','','333'), 2,1,2,'3');
203 }
204
205 function boom()
206 {
207 runTests("dry run"); // this is to verify the result strings without splitText()
208 dry = false;
209 flush = false;
210 runTests("no flush");
211 flush = true;
212 runTests("flush");
213 }
214
215 boom();
216
217
218 </script>
219 </pre>
220 </body>
221 </html>

mercurial