1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/content/base/test/test_textnode_normalize_in_selection.html Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,201 @@ 1.4 +<!DOCTYPE HTML> 1.5 +<html> 1.6 +<!-- 1.7 +https://bugzilla.mozilla.org/show_bug.cgi?id=804784 1.8 +--> 1.9 +<head> 1.10 + <meta charset="utf-8"> 1.11 + <title>Test for Bug 804784</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=804784">Mozilla Bug 804784</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 804784 **/ 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,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) div.normalize(); 1.79 + check(r,s,run+" selEnd "+child+","+index); 1.80 +} 1.81 + 1.82 +function selStart(div,child,index,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) div.normalize(); 1.91 + check(r,s,run+" selStart "+child+","+index); 1.92 +} 1.93 + 1.94 +function selMiddleStart(div,child,index,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 + div.normalize(); 1.103 + check(r,s,run+" selMiddleStart "+child+","+index); 1.104 +} 1.105 + 1.106 +function selMiddleEnd(div,child,index,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) div.normalize(); 1.115 + check(r,s,run+" selMiddleEnd "+child+","+index); 1.116 +} 1.117 + 1.118 +function mergeBefore(div,child,index,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.normalize(); 1.127 + check(r,s,run+" mergeBefore "+child+","+index); 1.128 +} 1.129 + 1.130 +function runTests(s) 1.131 +{ 1.132 + run = s+":"; 1.133 + selEnd(newDiv('111'), 0,0,'111'); 1.134 + selEnd(newDiv('111'), 0,1,'11'); 1.135 + selEnd(newDiv('111'), 0,2,'1'); 1.136 + selEnd(newDiv(''), 0,0,''); 1.137 + selEnd(newDiv('',''), 1,0,''); 1.138 + selEnd(newDiv('','',''), 1,0,''); 1.139 + selEnd(newDiv('111','222'), 0,1,'11222'); 1.140 + selEnd(newDiv('111','222'), 0,2,'1222'); 1.141 + selEnd(newDiv('111','222'), 1,1,'22'); 1.142 + selEnd(newDiv('','222'), 1,2,'2'); 1.143 + selEnd(newDiv('111',''), 0,1,'11'); 1.144 + selEnd(newDiv('111','222'), 1,2,'2'); 1.145 + selEnd(newDiv('111','222','333'), 1,1,'22333'); 1.146 + selEnd(newDiv('111','222','333'), 1,2,'2333'); 1.147 + selEnd(newDiv('111','','333'), 0,2,'1333'); 1.148 + selEnd(newDiv('111','','333'), 1,0,'333'); 1.149 + selEnd(newDiv('111','','333'), 2,0,'333'); 1.150 + 1.151 + selStart(newDiv('111'), 0,0,''); 1.152 + selStart(newDiv('111'), 0,1,'1'); 1.153 + selStart(newDiv('111'), 0,2,'11'); 1.154 + selStart(newDiv(''), 0,0,''); 1.155 + selStart(newDiv('111','222'), 0,1,'1'); 1.156 + selStart(newDiv('111','222'), 0,2,'11'); 1.157 + selStart(newDiv('111','222'), 1,1,'1112'); 1.158 + selStart(newDiv('111','222'), 1,2,'11122'); 1.159 + selStart(newDiv('111',''), 1,0,'111'); 1.160 + selStart(newDiv('111',''), 0,2,'11'); 1.161 + selStart(newDiv('111','222','333'), 1,1,'1112'); 1.162 + selStart(newDiv('111','222','333'), 1,2,'11122'); 1.163 + selStart(newDiv('111','222','333'), 1,2,'11122'); 1.164 + selStart(newDiv('111','','333'), 1,0,'111'); 1.165 + 1.166 + selMiddleStart(newDiv('111','222','333'), 1,1,'2'); 1.167 + selMiddleStart(newDiv('111','222','333'), 1,2,'22'); 1.168 + selMiddleStart(newDiv('111','222','333'), 2,1,'2223'); 1.169 + selMiddleStart(newDiv('111','222','333'), 2,2,'22233'); 1.170 + selMiddleStart(newDiv('111','','333'), 2,2,'33'); 1.171 + selMiddleStart(newDiv('111','222',''), 2,0,'222'); 1.172 + 1.173 + selMiddleEnd(newDiv('111','222','333'), 0,1,'11222'); 1.174 + selMiddleEnd(newDiv('111','222','333'), 0,2,'1222'); 1.175 + selMiddleEnd(newDiv('111','222','333'), 1,1,'22'); 1.176 + selMiddleEnd(newDiv('111','222','333'), 1,2,'2'); 1.177 + selMiddleEnd(newDiv('111','','333'), 1,0,''); 1.178 + selMiddleEnd(newDiv('','222','333'), 0,0,'222'); 1.179 + 1.180 + mergeBefore(newDiv('111','222'), 1,1,'2'); 1.181 + mergeBefore(newDiv('111','222','333'), 1,2,'22'); 1.182 + mergeBefore(newDiv('111','222','333'), 2,1,'2223'); 1.183 + mergeBefore(newDiv('111','222','333'), 2,2,'22233'); 1.184 + mergeBefore(newDiv('111','','333'), 2,0,''); 1.185 + mergeBefore(newDiv('111','','333'), 2,2,'33'); 1.186 +} 1.187 + 1.188 +function boom() 1.189 +{ 1.190 + runTests("dry run"); // this is to verify the result strings without normalize() 1.191 + dry = false; 1.192 + flush = false; 1.193 + runTests("no flush"); 1.194 + flush = true; 1.195 + runTests("flush"); 1.196 +} 1.197 + 1.198 +boom(); 1.199 + 1.200 + 1.201 +</script> 1.202 +</pre> 1.203 +</body> 1.204 +</html>