1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/content/base/test/test_textnode_split_in_selection.html Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,221 @@ 1.4 +<!DOCTYPE HTML> 1.5 +<html> 1.6 +<!-- 1.7 +https://bugzilla.mozilla.org/show_bug.cgi?id=803924 1.8 +--> 1.9 +<head> 1.10 + <meta charset="utf-8"> 1.11 + <title>Test for Bug 803924</title> 1.12 + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> 1.13 + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> 1.14 +</head> 1.15 +<body> 1.16 +<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=803924">Mozilla Bug 803924</a> 1.17 +<p id="display"></p> 1.18 +<div id="content" style="display: none"> 1.19 + 1.20 +</div> 1.21 +<pre id="test"> 1.22 +<script type="application/javascript"> 1.23 + 1.24 +/** Test for Bug 803924 **/ 1.25 + 1.26 +var sel = document.getSelection(); 1.27 +var flush = true; 1.28 +var dry = true; 1.29 +var run = ""; 1.30 +var empty_range; 1.31 +var empty_first_text_range; 1.32 +var empty_last_text_range; 1.33 +var full_range; 1.34 + 1.35 +function check(range, expected, test) 1.36 +{ 1.37 + is(""+range, expected, test); 1.38 + is(""+empty_range, "", "empty range test after: "+test); 1.39 + is(""+empty_first_text_range, "", "empty first text range test after: "+test); 1.40 + if (empty_last_text_range) is(""+empty_last_text_range, "", "empty last text range test after: "+test); 1.41 + is(""+full_range, full_range.startContainer.textContent, "full range test after: "+test); 1.42 +} 1.43 + 1.44 +function newDiv() 1.45 +{ 1.46 + var div = document.createElement('div'); 1.47 + for (var i = 0; i < arguments.length; ++i) { 1.48 + div.appendChild(document.createTextNode(arguments[i])); 1.49 + } 1.50 + document.body.appendChild(div) 1.51 + empty_range = document.createRange(); 1.52 + empty_range.setStart(div,0); 1.53 + empty_range.setEnd(div,0); 1.54 + var firstTextNode = div.childNodes[0]; 1.55 + var lastTextNode = div.childNodes[div.childNodes.length - 1]; 1.56 + empty_first_text_range = document.createRange(); 1.57 + empty_first_text_range.setStart(firstTextNode,0); 1.58 + empty_first_text_range.setEnd(firstTextNode,0); 1.59 + empty_last_text_range = null; 1.60 + if (firstTextNode != lastTextNode) { 1.61 + empty_last_text_range = document.createRange(); 1.62 + empty_last_text_range.setStart(lastTextNode,0); 1.63 + empty_last_text_range.setEnd(lastTextNode,0); 1.64 + } 1.65 + full_range = document.createRange(); 1.66 + full_range.setStart(div,0); 1.67 + full_range.setEnd(div,div.childNodes.length); 1.68 + return div; 1.69 +} 1.70 + 1.71 +function selEnd(div,child,index,split,s) 1.72 +{ 1.73 + var start = div.childNodes[child]; 1.74 + var r = document.createRange(); 1.75 + sel.addRange(r); 1.76 + r.setStart(start, index); 1.77 + r.setEnd(div, div.childNodes.length); 1.78 + if (!dry) start.splitText(split); 1.79 + check(r,s,run+" selEnd "+child+","+index+","+split); 1.80 +} 1.81 + 1.82 +function selStart(div,child,index,split,s) 1.83 +{ 1.84 + if (flush) document.body.getClientRects(); 1.85 + var start = div.childNodes[child]; 1.86 + var r = document.createRange(); 1.87 + sel.addRange(r); 1.88 + r.setStart(div, 0); 1.89 + r.setEnd(start, index); 1.90 + if (!dry) start.splitText(split); 1.91 + check(r,s,run+" selStart "+child+","+index+","+split); 1.92 +} 1.93 + 1.94 +function selMiddleStart(div,child,index,split,s) 1.95 +{ 1.96 + if (flush) document.body.getClientRects(); 1.97 + var start = div.childNodes[child]; 1.98 + var r = document.createRange(); 1.99 + sel.addRange(r); 1.100 + r.setStart(div, 1); 1.101 + r.setEnd(start, index); 1.102 + if (!dry) start.splitText(split); 1.103 + check(r,s,run+" selMiddleStart "+child+","+index+","+split); 1.104 +} 1.105 + 1.106 +function selMiddleEnd(div,child,index,split,s) 1.107 +{ 1.108 + if (flush) document.body.getClientRects(); 1.109 + var start = div.childNodes[child]; 1.110 + var r = document.createRange(); 1.111 + sel.addRange(r); 1.112 + r.setStart(start, index); 1.113 + r.setEnd(div, 2); 1.114 + if (!dry) start.splitText(split); 1.115 + check(r,s,run+" selMiddleEnd "+child+","+index+","+split); 1.116 +} 1.117 + 1.118 +function splitBefore(div,child,index,split,s) 1.119 +{ 1.120 + if (flush) document.body.getClientRects(); 1.121 + var start = div.childNodes[child]; 1.122 + var r = document.createRange(); 1.123 + sel.addRange(r); 1.124 + r.setStart(div, 1); 1.125 + r.setEnd(start, index); 1.126 + if (!dry) div.childNodes[0].splitText(split); 1.127 + check(r,s,run+" splitBefore "+child+","+index+","+split); 1.128 +} 1.129 + 1.130 +function runTests(s) 1.131 +{ 1.132 + run = s+":"; 1.133 + selEnd(newDiv('111'), 0,0,0,'111'); 1.134 + selEnd(newDiv('111'), 0,0,1,'111'); 1.135 + selEnd(newDiv('111'), 0,0,3,'111'); 1.136 + selEnd(newDiv(''), 0,0,0,''); 1.137 + selEnd(newDiv('111'), 0,1,0,'11'); 1.138 + selEnd(newDiv('111'), 0,2,1,'1'); 1.139 + selEnd(newDiv('111'), 0,1,3,'11'); 1.140 + selEnd(newDiv('111','222'), 0,1,0,'11222'); 1.141 + selEnd(newDiv('111','222'), 0,2,1,'1222'); 1.142 + selEnd(newDiv('111','222'), 0,1,3,'11222'); 1.143 + selEnd(newDiv('111','222'), 1,1,0,'22'); 1.144 + selEnd(newDiv('111','222'), 1,2,1,'2'); 1.145 + selEnd(newDiv('','222'), 1,1,1,'22'); 1.146 + selEnd(newDiv('','222'), 0,0,0,'222'); 1.147 + selEnd(newDiv('111',''), 0,1,0,'11'); 1.148 + selEnd(newDiv('111','222'), 1,1,3,'22'); 1.149 + selEnd(newDiv('111','222','333'), 1,1,0,'22333'); 1.150 + selEnd(newDiv('111','222','333'), 1,2,1,'2333'); 1.151 + selEnd(newDiv('111','222','333'), 1,1,3,'22333'); 1.152 + selEnd(newDiv('111','222',''), 1,1,3,'22'); 1.153 + selEnd(newDiv('111','','333'), 0,1,3,'11333'); 1.154 + 1.155 + selStart(newDiv('111'), 0,0,0,''); 1.156 + selStart(newDiv('111'), 0,0,1,''); 1.157 + selStart(newDiv('111'), 0,0,3,''); 1.158 + selStart(newDiv('111'), 0,1,0,'1'); 1.159 + selStart(newDiv('111'), 0,2,1,'11'); 1.160 + selStart(newDiv('111'), 0,1,3,'1'); 1.161 + selStart(newDiv(''), 0,0,0,''); 1.162 + selStart(newDiv('111','222'), 0,1,0,'1'); 1.163 + selStart(newDiv('111','222'), 0,2,1,'11'); 1.164 + selStart(newDiv('111','222'), 0,1,3,'1'); 1.165 + selStart(newDiv('111','222'), 1,1,0,'1112'); 1.166 + selStart(newDiv('111','222'), 1,2,1,'11122'); 1.167 + selStart(newDiv('111','222'), 1,1,3,'1112'); 1.168 + selStart(newDiv('','222'), 1,1,2,'2'); 1.169 + selStart(newDiv('','222'), 0,0,0,''); 1.170 + selStart(newDiv('111',''), 1,0,0,'111'); 1.171 + selStart(newDiv('111','222','333'), 1,1,0,'1112'); 1.172 + selStart(newDiv('111','222','333'), 1,2,1,'11122'); 1.173 + selStart(newDiv('111','222','333'), 1,1,3,'1112'); 1.174 + selStart(newDiv('111','','333'), 1,0,0,'111'); 1.175 + selStart(newDiv('111','222',''), 1,1,3,'1112'); 1.176 + 1.177 + selMiddleStart(newDiv('111','222','333'), 1,1,0,'2'); 1.178 + selMiddleStart(newDiv('111','222','333'), 1,2,1,'22'); 1.179 + selMiddleStart(newDiv('111','222','333'), 1,1,3,'2'); 1.180 + selMiddleStart(newDiv('111','222','333'), 2,1,0,'2223'); 1.181 + selMiddleStart(newDiv('111','222','333'), 2,2,1,'22233'); 1.182 + selMiddleStart(newDiv('111','222','333'), 2,1,3,'2223'); 1.183 + selMiddleStart(newDiv('111','','333'), 2,1,2,'3'); 1.184 + selMiddleStart(newDiv('111','','333'), 1,0,0,''); 1.185 + 1.186 + selMiddleEnd(newDiv('111','222','333'), 0,1,0,'11222'); 1.187 + selMiddleEnd(newDiv('111','222','333'), 0,2,1,'1222'); 1.188 + selMiddleEnd(newDiv('111','222','333'), 0,1,3,'11222'); 1.189 + selMiddleEnd(newDiv('111','222','333'), 1,1,0,'22'); 1.190 + selMiddleEnd(newDiv('111','222','333'), 1,2,1,'2'); 1.191 + selMiddleEnd(newDiv('111','222','333'), 1,1,3,'22'); 1.192 + selMiddleEnd(newDiv('111','','333'), 0,1,2,'11'); 1.193 + selMiddleEnd(newDiv('111','','333'), 0,1,3,'11'); 1.194 + selMiddleEnd(newDiv('111','','333'), 1,0,0,''); 1.195 + 1.196 + splitBefore(newDiv('111','222','333'), 1,1,0,'2'); 1.197 + splitBefore(newDiv('111','222','333'), 1,2,1,'22'); 1.198 + splitBefore(newDiv('111','222','333'), 1,1,3,'2'); 1.199 + splitBefore(newDiv('111','222','333'), 2,1,0,'2223'); 1.200 + splitBefore(newDiv('111','222','333'), 2,2,1,'22233'); 1.201 + splitBefore(newDiv('111','222','333'), 2,1,3,'2223'); 1.202 + splitBefore(newDiv('','222','333'), 1,1,0,'2'); 1.203 + splitBefore(newDiv('','','333'), 1,0,0,''); 1.204 + splitBefore(newDiv('','222',''), 2,0,0,'222'); 1.205 + splitBefore(newDiv('111','','333'), 2,1,2,'3'); 1.206 +} 1.207 + 1.208 +function boom() 1.209 +{ 1.210 + runTests("dry run"); // this is to verify the result strings without splitText() 1.211 + dry = false; 1.212 + flush = false; 1.213 + runTests("no flush"); 1.214 + flush = true; 1.215 + runTests("flush"); 1.216 +} 1.217 + 1.218 +boom(); 1.219 + 1.220 + 1.221 +</script> 1.222 +</pre> 1.223 +</body> 1.224 +</html>