diff options
Diffstat (limited to '')
-rw-r--r-- | dom/base/test/test_textnode_normalize_in_selection.html | 201 |
1 files changed, 201 insertions, 0 deletions
diff --git a/dom/base/test/test_textnode_normalize_in_selection.html b/dom/base/test/test_textnode_normalize_in_selection.html new file mode 100644 index 0000000000..75d5ed0032 --- /dev/null +++ b/dom/base/test/test_textnode_normalize_in_selection.html @@ -0,0 +1,201 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=804784 +--> +<head> + <meta charset="utf-8"> + <title>Test for Bug 804784</title> + <script src="/tests/SimpleTest/SimpleTest.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=804784">Mozilla Bug 804784</a> +<p id="display"></p> +<div id="content" style="display: none"> + +</div> +<pre id="test"> +<script type="application/javascript"> + +/** Test for Bug 804784 **/ + +var sel = document.getSelection(); +var flush = true; +var dry = true; +var run = ""; +var empty_range; +var empty_first_text_range; +var empty_last_text_range; +var full_range; + +function check(range, expected, test) +{ + is(""+range, expected, test); + is(""+empty_range, "", "empty range test after: "+test); + is(""+empty_first_text_range, "", "empty first text range test after: "+test); + if (empty_last_text_range) is(""+empty_last_text_range, "", "empty last text range test after: "+test); + is(""+full_range, full_range.startContainer.textContent, "full range test after: "+test); +} + +function newDiv() +{ + var div = document.createElement('div'); + for (var i = 0; i < arguments.length; ++i) { + div.appendChild(document.createTextNode(arguments[i])); + } + document.body.appendChild(div) + empty_range = document.createRange(); + empty_range.setStart(div,0); + empty_range.setEnd(div,0); + var firstTextNode = div.childNodes[0]; + var lastTextNode = div.childNodes[div.childNodes.length - 1]; + empty_first_text_range = document.createRange(); + empty_first_text_range.setStart(firstTextNode,0); + empty_first_text_range.setEnd(firstTextNode,0); + empty_last_text_range = null; + if (firstTextNode != lastTextNode) { + empty_last_text_range = document.createRange(); + empty_last_text_range.setStart(lastTextNode,0); + empty_last_text_range.setEnd(lastTextNode,0); + } + full_range = document.createRange(); + full_range.setStart(div,0); + full_range.setEnd(div,div.childNodes.length); + return div; +} + +function selEnd(div,child,index,s) +{ + var start = div.childNodes[child]; + var r = document.createRange(); + sel.addRange(r); + r.setStart(start, index); + r.setEnd(div, div.childNodes.length); + if (!dry) div.normalize(); + check(r,s,run+" selEnd "+child+","+index); +} + +function selStart(div,child,index,s) +{ + if (flush) document.body.getClientRects(); + var start = div.childNodes[child]; + var r = document.createRange(); + sel.addRange(r); + r.setStart(div, 0); + r.setEnd(start, index); + if (!dry) div.normalize(); + check(r,s,run+" selStart "+child+","+index); +} + +function selMiddleStart(div,child,index,s) +{ + if (flush) document.body.getClientRects(); + var start = div.childNodes[child]; + var r = document.createRange(); + sel.addRange(r); + r.setStart(div, 1); + r.setEnd(start, index); + div.normalize(); + check(r,s,run+" selMiddleStart "+child+","+index); +} + +function selMiddleEnd(div,child,index,s) +{ + if (flush) document.body.getClientRects(); + var start = div.childNodes[child]; + var r = document.createRange(); + sel.addRange(r); + r.setStart(start, index); + r.setEnd(div, 2); + if (!dry) div.normalize(); + check(r,s,run+" selMiddleEnd "+child+","+index); +} + +function mergeBefore(div,child,index,s) +{ + if (flush) document.body.getClientRects(); + var start = div.childNodes[child]; + var r = document.createRange(); + sel.addRange(r); + r.setStart(div, 1); + r.setEnd(start, index); + if (!dry) div.normalize(); + check(r,s,run+" mergeBefore "+child+","+index); +} + +function runTests(s) +{ + run = s+":"; + selEnd(newDiv('111'), 0,0,'111'); + selEnd(newDiv('111'), 0,1,'11'); + selEnd(newDiv('111'), 0,2,'1'); + selEnd(newDiv(''), 0,0,''); + selEnd(newDiv('',''), 1,0,''); + selEnd(newDiv('','',''), 1,0,''); + selEnd(newDiv('111','222'), 0,1,'11222'); + selEnd(newDiv('111','222'), 0,2,'1222'); + selEnd(newDiv('111','222'), 1,1,'22'); + selEnd(newDiv('','222'), 1,2,'2'); + selEnd(newDiv('111',''), 0,1,'11'); + selEnd(newDiv('111','222'), 1,2,'2'); + selEnd(newDiv('111','222','333'), 1,1,'22333'); + selEnd(newDiv('111','222','333'), 1,2,'2333'); + selEnd(newDiv('111','','333'), 0,2,'1333'); + selEnd(newDiv('111','','333'), 1,0,'333'); + selEnd(newDiv('111','','333'), 2,0,'333'); + + selStart(newDiv('111'), 0,0,''); + selStart(newDiv('111'), 0,1,'1'); + selStart(newDiv('111'), 0,2,'11'); + selStart(newDiv(''), 0,0,''); + selStart(newDiv('111','222'), 0,1,'1'); + selStart(newDiv('111','222'), 0,2,'11'); + selStart(newDiv('111','222'), 1,1,'1112'); + selStart(newDiv('111','222'), 1,2,'11122'); + selStart(newDiv('111',''), 1,0,'111'); + selStart(newDiv('111',''), 0,2,'11'); + selStart(newDiv('111','222','333'), 1,1,'1112'); + selStart(newDiv('111','222','333'), 1,2,'11122'); + selStart(newDiv('111','222','333'), 1,2,'11122'); + selStart(newDiv('111','','333'), 1,0,'111'); + + selMiddleStart(newDiv('111','222','333'), 1,1,'2'); + selMiddleStart(newDiv('111','222','333'), 1,2,'22'); + selMiddleStart(newDiv('111','222','333'), 2,1,'2223'); + selMiddleStart(newDiv('111','222','333'), 2,2,'22233'); + selMiddleStart(newDiv('111','','333'), 2,2,'33'); + selMiddleStart(newDiv('111','222',''), 2,0,'222'); + + selMiddleEnd(newDiv('111','222','333'), 0,1,'11222'); + selMiddleEnd(newDiv('111','222','333'), 0,2,'1222'); + selMiddleEnd(newDiv('111','222','333'), 1,1,'22'); + selMiddleEnd(newDiv('111','222','333'), 1,2,'2'); + selMiddleEnd(newDiv('111','','333'), 1,0,''); + selMiddleEnd(newDiv('','222','333'), 0,0,'222'); + + mergeBefore(newDiv('111','222'), 1,1,'2'); + mergeBefore(newDiv('111','222','333'), 1,2,'22'); + mergeBefore(newDiv('111','222','333'), 2,1,'2223'); + mergeBefore(newDiv('111','222','333'), 2,2,'22233'); + mergeBefore(newDiv('111','','333'), 2,0,''); + mergeBefore(newDiv('111','','333'), 2,2,'33'); +} + +function boom() +{ + runTests("dry run"); // this is to verify the result strings without normalize() + dry = false; + flush = false; + runTests("no flush"); + flush = true; + runTests("flush"); +} + +boom(); + + +</script> +</pre> +</body> +</html> |