diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
commit | 36d22d82aa202bb199967e9512281e9a53db42c9 (patch) | |
tree | 105e8c98ddea1c1e4784a60a5a6410fa416be2de /dom/base/test/test_textnode_split_in_selection.html | |
parent | Initial commit. (diff) | |
download | firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip |
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'dom/base/test/test_textnode_split_in_selection.html')
-rw-r--r-- | dom/base/test/test_textnode_split_in_selection.html | 221 |
1 files changed, 221 insertions, 0 deletions
diff --git a/dom/base/test/test_textnode_split_in_selection.html b/dom/base/test/test_textnode_split_in_selection.html new file mode 100644 index 0000000000..2bd5c49201 --- /dev/null +++ b/dom/base/test/test_textnode_split_in_selection.html @@ -0,0 +1,221 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=803924 +--> +<head> + <meta charset="utf-8"> + <title>Test for Bug 803924</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=803924">Mozilla Bug 803924</a> +<p id="display"></p> +<div id="content" style="display: none"> + +</div> +<pre id="test"> +<script type="application/javascript"> + +/** Test for Bug 803924 **/ + +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,split,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) start.splitText(split); + check(r,s,run+" selEnd "+child+","+index+","+split); +} + +function selStart(div,child,index,split,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) start.splitText(split); + check(r,s,run+" selStart "+child+","+index+","+split); +} + +function selMiddleStart(div,child,index,split,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) start.splitText(split); + check(r,s,run+" selMiddleStart "+child+","+index+","+split); +} + +function selMiddleEnd(div,child,index,split,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) start.splitText(split); + check(r,s,run+" selMiddleEnd "+child+","+index+","+split); +} + +function splitBefore(div,child,index,split,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.childNodes[0].splitText(split); + check(r,s,run+" splitBefore "+child+","+index+","+split); +} + +function runTests(s) +{ + run = s+":"; + selEnd(newDiv('111'), 0,0,0,'111'); + selEnd(newDiv('111'), 0,0,1,'111'); + selEnd(newDiv('111'), 0,0,3,'111'); + selEnd(newDiv(''), 0,0,0,''); + selEnd(newDiv('111'), 0,1,0,'11'); + selEnd(newDiv('111'), 0,2,1,'1'); + selEnd(newDiv('111'), 0,1,3,'11'); + selEnd(newDiv('111','222'), 0,1,0,'11222'); + selEnd(newDiv('111','222'), 0,2,1,'1222'); + selEnd(newDiv('111','222'), 0,1,3,'11222'); + selEnd(newDiv('111','222'), 1,1,0,'22'); + selEnd(newDiv('111','222'), 1,2,1,'2'); + selEnd(newDiv('','222'), 1,1,1,'22'); + selEnd(newDiv('','222'), 0,0,0,'222'); + selEnd(newDiv('111',''), 0,1,0,'11'); + selEnd(newDiv('111','222'), 1,1,3,'22'); + selEnd(newDiv('111','222','333'), 1,1,0,'22333'); + selEnd(newDiv('111','222','333'), 1,2,1,'2333'); + selEnd(newDiv('111','222','333'), 1,1,3,'22333'); + selEnd(newDiv('111','222',''), 1,1,3,'22'); + selEnd(newDiv('111','','333'), 0,1,3,'11333'); + + selStart(newDiv('111'), 0,0,0,''); + selStart(newDiv('111'), 0,0,1,''); + selStart(newDiv('111'), 0,0,3,''); + selStart(newDiv('111'), 0,1,0,'1'); + selStart(newDiv('111'), 0,2,1,'11'); + selStart(newDiv('111'), 0,1,3,'1'); + selStart(newDiv(''), 0,0,0,''); + selStart(newDiv('111','222'), 0,1,0,'1'); + selStart(newDiv('111','222'), 0,2,1,'11'); + selStart(newDiv('111','222'), 0,1,3,'1'); + selStart(newDiv('111','222'), 1,1,0,'1112'); + selStart(newDiv('111','222'), 1,2,1,'11122'); + selStart(newDiv('111','222'), 1,1,3,'1112'); + selStart(newDiv('','222'), 1,1,2,'2'); + selStart(newDiv('','222'), 0,0,0,''); + selStart(newDiv('111',''), 1,0,0,'111'); + selStart(newDiv('111','222','333'), 1,1,0,'1112'); + selStart(newDiv('111','222','333'), 1,2,1,'11122'); + selStart(newDiv('111','222','333'), 1,1,3,'1112'); + selStart(newDiv('111','','333'), 1,0,0,'111'); + selStart(newDiv('111','222',''), 1,1,3,'1112'); + + selMiddleStart(newDiv('111','222','333'), 1,1,0,'2'); + selMiddleStart(newDiv('111','222','333'), 1,2,1,'22'); + selMiddleStart(newDiv('111','222','333'), 1,1,3,'2'); + selMiddleStart(newDiv('111','222','333'), 2,1,0,'2223'); + selMiddleStart(newDiv('111','222','333'), 2,2,1,'22233'); + selMiddleStart(newDiv('111','222','333'), 2,1,3,'2223'); + selMiddleStart(newDiv('111','','333'), 2,1,2,'3'); + selMiddleStart(newDiv('111','','333'), 1,0,0,''); + + selMiddleEnd(newDiv('111','222','333'), 0,1,0,'11222'); + selMiddleEnd(newDiv('111','222','333'), 0,2,1,'1222'); + selMiddleEnd(newDiv('111','222','333'), 0,1,3,'11222'); + selMiddleEnd(newDiv('111','222','333'), 1,1,0,'22'); + selMiddleEnd(newDiv('111','222','333'), 1,2,1,'2'); + selMiddleEnd(newDiv('111','222','333'), 1,1,3,'22'); + selMiddleEnd(newDiv('111','','333'), 0,1,2,'11'); + selMiddleEnd(newDiv('111','','333'), 0,1,3,'11'); + selMiddleEnd(newDiv('111','','333'), 1,0,0,''); + + splitBefore(newDiv('111','222','333'), 1,1,0,'2'); + splitBefore(newDiv('111','222','333'), 1,2,1,'22'); + splitBefore(newDiv('111','222','333'), 1,1,3,'2'); + splitBefore(newDiv('111','222','333'), 2,1,0,'2223'); + splitBefore(newDiv('111','222','333'), 2,2,1,'22233'); + splitBefore(newDiv('111','222','333'), 2,1,3,'2223'); + splitBefore(newDiv('','222','333'), 1,1,0,'2'); + splitBefore(newDiv('','','333'), 1,0,0,''); + splitBefore(newDiv('','222',''), 2,0,0,'222'); + splitBefore(newDiv('111','','333'), 2,1,2,'3'); +} + +function boom() +{ + runTests("dry run"); // this is to verify the result strings without splitText() + dry = false; + flush = false; + runTests("no flush"); + flush = true; + runTests("flush"); +} + +boom(); + + +</script> +</pre> +</body> +</html> |