|
1 <!DOCTYPE HTML> |
|
2 <html class="reftest-wait"> |
|
3 <!-- |
|
4 https://bugzilla.mozilla.org/show_bug.cgi?id=619273 |
|
5 --> |
|
6 <head> |
|
7 <title>Test for Bug 619273</title> |
|
8 <script type="application/javascript;version=1.7"> |
|
9 /** Test DOM mutations inside selection **/ |
|
10 function createDOM(doc) { |
|
11 let s = doc.createElement('span'); |
|
12 s.appendChild(doc.createTextNode('|')) |
|
13 let s2 = doc.createElement('span'); |
|
14 s2.appendChild(doc.createTextNode('z')) |
|
15 s.appendChild(s2) |
|
16 return s; |
|
17 } |
|
18 |
|
19 var tests_done = 0; |
|
20 var tests = [ |
|
21 function(win,doc,sel) { |
|
22 doc.body.innerHTML = '.I<br>B<br>C|z' |
|
23 let a = doc.body.firstChild; |
|
24 let r = doc.createRange(); |
|
25 r.setStart(a, 1); |
|
26 r.setEnd(a, 2); |
|
27 sel.addRange(r); |
|
28 }, |
|
29 function(win,doc,sel) { |
|
30 doc.body.innerHTML = '.I<br>B<br>C|z' |
|
31 let a = doc.body.firstChild; |
|
32 let r = doc.createRange(); |
|
33 r.setStart(doc.firstChild, 0); |
|
34 r.setEnd(a, 2); |
|
35 sel.addRange(r); |
|
36 }, |
|
37 function(win,doc,sel) { |
|
38 doc.body.innerHTML = 'I<br>.B<br>C|z' |
|
39 let a = doc.body.firstChild; |
|
40 let b = doc.body.childNodes[2]; |
|
41 let c = doc.body.childNodes[4]; |
|
42 let r = doc.createRange(); |
|
43 r.setStart(a, 0); |
|
44 r.setEnd(c, 1); |
|
45 sel.addRange(r); |
|
46 }, |
|
47 function(win,doc,sel) { |
|
48 doc.body.innerHTML = 'I<br>.B<br>C|z' |
|
49 let b = doc.body.childNodes[2]; |
|
50 let c = doc.body.childNodes[4]; |
|
51 let r = doc.createRange(); |
|
52 r.setStart(doc.body, 0); |
|
53 r.setEnd(c, 1); |
|
54 sel.addRange(r); |
|
55 }, |
|
56 function(win,doc,sel) { |
|
57 doc.body.innerHTML = 'I<br>.B<br>C|z' |
|
58 let b = doc.body.childNodes[2]; |
|
59 let c = doc.body.childNodes[4]; |
|
60 let r = doc.createRange(); |
|
61 r.setStart(doc, 0); |
|
62 r.setEnd(c, 1); |
|
63 sel.addRange(r); |
|
64 }, |
|
65 function(win,doc,sel) { |
|
66 doc.body.innerHTML = 'I<br>B<br>.C|z' |
|
67 let a = doc.body.firstChild; |
|
68 let c = doc.body.childNodes[4]; |
|
69 let r = doc.createRange(); |
|
70 r.setStart(a, 0); |
|
71 r.setEnd(c, 2); |
|
72 sel.addRange(r); |
|
73 }, |
|
74 |
|
75 function(win,doc,sel) { |
|
76 doc.body.innerHTML = '|z|zI<br>B<br>C' |
|
77 let a = doc.body.firstChild; |
|
78 let r = doc.createRange(); |
|
79 r.setStart(a, 4); |
|
80 r.setEnd(a, 5); |
|
81 sel.addRange(r); |
|
82 }, |
|
83 function(win,doc,sel) { |
|
84 doc.body.innerHTML = '|z|zI<br>B<br>C' |
|
85 let a = doc.body.firstChild; |
|
86 let r = doc.createRange(); |
|
87 r.setStart(doc.firstChild, 0); |
|
88 r.setEnd(a, 5); |
|
89 sel.addRange(r); |
|
90 }, |
|
91 function(win,doc,sel) { |
|
92 doc.body.innerHTML = 'I<br>|z|zB<br>C' |
|
93 let a = doc.body.firstChild; |
|
94 let b = doc.body.childNodes[2]; |
|
95 let c = doc.body.childNodes[4]; |
|
96 let r = doc.createRange(); |
|
97 r.setStart(a, 0); |
|
98 r.setEnd(c, 1); |
|
99 sel.addRange(r); |
|
100 }, |
|
101 function(win,doc,sel) { |
|
102 doc.body.innerHTML = 'I<br>|z|zB<br>C' |
|
103 let b = doc.body.childNodes[2]; |
|
104 let c = doc.body.childNodes[4]; |
|
105 let r = doc.createRange(); |
|
106 r.setStart(doc.body, 0); |
|
107 r.setEnd(c, 1); |
|
108 sel.addRange(r); |
|
109 }, |
|
110 function(win,doc,sel) { |
|
111 doc.body.innerHTML = 'I<br>|z|zB<br>C' |
|
112 let b = doc.body.childNodes[2]; |
|
113 let c = doc.body.childNodes[4]; |
|
114 let r = doc.createRange(); |
|
115 r.setStart(doc, 0); |
|
116 r.setEnd(c, 1); |
|
117 sel.addRange(r); |
|
118 }, |
|
119 function(win,doc,sel) { |
|
120 doc.body.innerHTML = 'I<br>B<br>|z|zC' |
|
121 let a = doc.body.firstChild; |
|
122 let c = doc.body.childNodes[4]; |
|
123 let r = doc.createRange(); |
|
124 r.setStart(a, 0); |
|
125 r.setEnd(c, 5); |
|
126 sel.addRange(r); |
|
127 }, |
|
128 |
|
129 function(win,doc,sel) { |
|
130 doc.body.innerHTML = '<br>B<br>CI' |
|
131 }, |
|
132 function(win,doc,sel) { |
|
133 doc.body.innerHTML = '<br>B<br>C' |
|
134 }, |
|
135 function(win,doc,sel) { |
|
136 doc.body.innerHTML = 'I<br>B<br>C' |
|
137 let a = doc.body.firstChild; |
|
138 let c = doc.body.childNodes[4]; |
|
139 let r = doc.createRange(); |
|
140 r.setStart(a, 0); |
|
141 r.setEnd(c, 1); |
|
142 sel.addRange(r); |
|
143 }, |
|
144 |
|
145 function(win,doc,sel) { |
|
146 doc.body.innerHTML = 'I|z' |
|
147 let a = doc.body.firstChild; |
|
148 let r = doc.createRange(); |
|
149 r.setStart(a, 1); |
|
150 r.setEnd(a, 2); |
|
151 sel.addRange(r); |
|
152 }, |
|
153 |
|
154 function(win,doc,sel) { |
|
155 doc.body.innerHTML = 'Iz|' |
|
156 let a = doc.body.firstChild; |
|
157 let r = doc.createRange(); |
|
158 r.setStart(a, 1); |
|
159 r.setEnd(a, 2); |
|
160 sel.addRange(r); |
|
161 |
|
162 document.body.appendChild(document.createTextNode('I')); |
|
163 document.body.appendChild(document.createTextNode(' ')); |
|
164 document.body.appendChild(createDOM(document)); |
|
165 }, |
|
166 ] |
|
167 |
|
168 function runTestInIframe(run,t) { |
|
169 let f = document.createElement('iframe'); |
|
170 f.setAttribute('frameborder','0'); |
|
171 f.setAttribute('height','100'); |
|
172 f.setAttribute('width','200'); |
|
173 f.src = 'data:text/html,<body style="margin:0;padding:0;font-family:monospace">'; |
|
174 f.onload = function () { |
|
175 try { |
|
176 run(f.contentWindow, f.contentDocument, f.contentWindow.getSelection()); |
|
177 } finally { ++tests_done; } |
|
178 } |
|
179 return f; |
|
180 } |
|
181 |
|
182 var id; |
|
183 function checkFinished() { |
|
184 if (window.frames.length == tests_done) { |
|
185 clearInterval(id); |
|
186 document.documentElement.className = ""; |
|
187 } |
|
188 } |
|
189 |
|
190 function runTest() { |
|
191 for (let i=0; i < tests.length; ++i) { |
|
192 let t = tests[i]; |
|
193 document.body.appendChild(runTestInIframe(t)); |
|
194 } |
|
195 id = setInterval(checkFinished,500); |
|
196 } |
|
197 </script> |
|
198 </head> |
|
199 <body onload="runTest()"></body> |
|
200 </html> |