test_selection_splitText-normalize.html (6997B)
1 <!DOCTYPE HTML> 2 <html> 3 <!-- 4 https://bugzilla.mozilla.org/show_bug.cgi?id=191864 5 --> 6 <head> 7 <title>Test for Bug 191864</title> 8 <script src="/tests/SimpleTest/SimpleTest.js"></script> 9 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> 10 </head> 11 <body> 12 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=191864">Mozilla Bug 191864</a> 13 <p id="display"> 14 <span id="col1" style="float:left; height:800px; width:180px;"></span> 15 <span id="col2" style="float:left; height:800px; width:180px;"></span> 16 </p> 17 <div id="content" style="display: none"> 18 19 </div> 20 <pre id="test"> 21 <script type="application/javascript"> 22 var tests = [ 23 [ {}, [0,4], "012345678" ], 24 [ {}, [0,0], "012345678" ], 25 [ {}, [0,9], "012345678" ], 26 [ {startOffset:4}, [0,4], "012345678" ], 27 [ {startOffset:5}, [0,4], "012345678" ], 28 [ {startOffset:5,endOffset:6}, [0,4], "012345678" ], 29 [ {endOffset:5}, [0,4], "012345678" ], 30 [ {endOffset:4}, [0,4], "012345678" ], 31 [ {endOffset:3}, [0,4], "012345678" ], 32 [ {startOffset:1,endOffset:3}, [0,4], "012345678" ], 33 [ {startOffset:7,endOffset:7}, [0,4], "012345678" ], 34 [ {startOffset:4,endOffset:4}, [0,4], "012345678" ], 35 [ {endNode:1}, [0,4], "012345678", "" ], 36 [ {endNode:1}, [0,4], "01234567", "8" ], 37 [ {endNode:1}, [1,4], "0", "12345678" ], 38 [ {endNode:2}, [1,4], "0", "12345", "678" ], 39 ] 40 41 function runtest(r,p,t) { 42 // create content 43 document.original_nodes = []; 44 for (let i = 2; i < t.length; ++i) { 45 c = document.createTextNode(t[i]); 46 p.appendChild(c); 47 document.original_nodes.push(c); 48 } 49 50 // setup the range 51 let sel = t[0] 52 let startNode = p.firstChild; 53 let startOffset = sel.startOffset === undefined ? 0 : sel.startOffset; 54 let endNode = sel.endNode === undefined ? startNode : p.childNodes[sel.endNode]; 55 let endOffset = sel.endOffset === undefined ? endNode.length : sel.endOffset; 56 r.setStart(startNode, startOffset); 57 r.setEnd(endNode, endOffset); 58 59 // splitText 60 let split = t[1] 61 p.childNodes[split[0]].splitText(split[1]) 62 } 63 function test_split(r,p,t) { 64 runtest(r,p,t); 65 } 66 function test_split_merge(r,p,t) { 67 runtest(r,p,t); 68 p.normalize(); 69 } 70 </script> 71 72 <script type="application/javascript"> 73 74 /** Test for Bug 191864 */ 75 76 var results = [ 77 /* test_split */ 78 [ {}, [ [0, "0123"], "45678" ]], 79 [ {}, [ [0, ""], "012345678" ]], 80 [ {endNode:0, endOffset:9}, [ [0, "012345678"], "" ]], 81 [ {startOffset:4}, [ [0, "0123"], "45678" ]], 82 [ {startNode:1, startOffset:1}, [ [0, "0123"], "45678" ]], 83 [ {startNode:1, startOffset:1, endOffset:2}, [ [0, "0123"], "45678" ]], 84 [ {endOffset:1}, [ [0, "0123"], "45678" ]], 85 [ {endNode:0}, [ [0, "0123"], "45678" ]], 86 [ {endNode:0, endOffset:3}, [ [0, "0123"], "45678" ]], 87 [ {startOffset:1, endNode:0, endOffset:3}, [ [0, "0123"], "45678" ]], 88 [ {startNode:1, startOffset:3, endOffset:3}, [ [0, "0123"], "45678" ]], 89 [ {startOffset:4, endNode:0}, [ [0, "0123"], "45678" ]], 90 [ {endNode:2, endOffset:0}, [ [0, "0123"], "45678", [1, ""] ]], 91 [ {endNode:2}, [ [0, "0123"], "4567", [1, "8"] ]], 92 [ {endNode:2}, [ [0, "0"], [1, "1234"], "5678" ]], 93 [ {endNode:3}, [ [0, "0"], [1, "1234"], "5", [2, "678"] ]], 94 /* test_split_merge */ 95 [ {}, [ [0, "012345678" ] ]], 96 [ {startParent:true}, [ "012345678" ]], /* splitText() creates an empty first child which is removed by normalize() */ 97 [ {}, [ [0, "012345678" ] ]], 98 [ {startOffset:4}, [ [0, "012345678" ] ]], 99 [ {startOffset:5}, [ [0, "012345678" ] ]], 100 [ {startOffset:5,endOffset:6}, [ [0, "012345678" ] ]], 101 [ {endOffset:5}, [ [0, "012345678" ] ]], 102 [ {endOffset:4}, [ [0, "012345678" ] ]], 103 [ {endOffset:3}, [ [0, "012345678" ] ]], 104 [ {startOffset:1,endOffset:3}, [ [0, "012345678" ] ]], 105 [ {startOffset:7,endOffset:7}, [ [0, "012345678" ] ]], 106 [ {startOffset:4,endOffset:4}, [ [0, "012345678" ] ]], 107 [ {endParent:true}, [ [0, "012345678" ] ]], 108 [ {}, [ [0, "012345678" ] ]], 109 [ {}, [ [0, "012345678" ] ]], 110 [ {}, [ [0, "012345678" ] ]], 111 ] 112 113 function verifyResults(r,p,i) { 114 let nodes = results[i][1]; 115 is(p.childNodes.length, nodes.length, "same number of DOM nodes" + " (test " + i + ")"); 116 for (let j = 0; j < nodes.length; ++j) { 117 let a = nodes[j]; 118 let b = p.childNodes[j]; 119 if (a instanceof Array) { 120 is(b, document.original_nodes[a[0]], "same node" + " (test " + i + " child " + j + ")"); 121 is(b.textContent, a[1], "contents2" + " (test " + i + " child " + j + ")"); 122 } else { 123 is(b.nodeType, Node.TEXT_NODE, "text node" + " (test " + i + " child " + j + ")"); 124 is(b.textContent, a, "contents1" + " (test " + i + " child " + j + ")"); 125 } 126 } 127 let sel = results[i][0]; 128 if (sel.todo) { 129 alert(r.startContainer + '\n' + r.startOffset + '\n' + r.endContainer + '\n' + r.endOffset + '\n') 130 return; 131 } 132 let startNode = sel.startNode === undefined ? p.firstChild : p.childNodes[sel.startNode]; 133 let startOffset = sel.startOffset === undefined ? 0 : sel.startOffset; 134 if (sel.startParent) { startNode = p; startOffset = 0; } 135 let endNode = sel.endNode === undefined ? p.childNodes[p.childNodes.length>1 ? 1 : 0] : p.childNodes[sel.endNode]; 136 let endOffset = sel.endOffset === undefined ? endNode.length : sel.endOffset; 137 if (sel.endParent) { endNode = p; endOffset = 1; } 138 is(r.startContainer, startNode, "range start node" + " (test " + i + ")"); 139 is(r.startOffset, startOffset, "range start offset" + " (test " + i + ")"); 140 is(r.endContainer, endNode, "range end node" + " (test " + i + ")"); 141 is(r.endOffset, endOffset, "range end offset" + " (test " + i + ")"); 142 } 143 144 function runTest() { 145 let col1 = document.getElementById('col1'); 146 let col2 = document.getElementById('col2'); 147 for (let i=0; i < tests.length; ++i) { 148 let t = tests[i]; 149 let p = document.createElement('p') 150 col1.appendChild(p); 151 let r = document.createRange(); 152 test_split(r,p,t); 153 verifyResults(r,p,i); 154 } 155 for (let i=0; i < tests.length; ++i) { 156 let t = tests[i]; 157 let p = document.createElement('p') 158 col2.appendChild(p); 159 let r = document.createRange(); 160 test_split_merge(r,p,t); 161 verifyResults(r,p,i+tests.length); 162 } 163 SimpleTest.finish(); 164 } 165 166 window.onload = function() { setTimeout(runTest, 0); }; 167 SimpleTest.waitForExplicitFinish(); 168 169 </script> 170 </pre> 171 </body> 172 </html>