test_bug415860.html (8120B)
1 <!DOCTYPE HTML> 2 <html> 3 <!-- 4 https://bugzilla.mozilla.org/show_bug.cgi?id=415860 5 --> 6 <head> 7 <title>Test for Bug 415860</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=415860">Mozilla Bug 415860</a> 13 <p id="display"></p> 14 <div id="content" style="display: none"> 15 16 </div> 17 <div id="testdata"> </div> 18 <pre id="test"> 19 <script class="testbody" type="text/javascript"> 20 21 /** Test for Bug 415860 */ 22 23 function tests() { 24 // #text node 25 n = document.getElementById('testdata').firstChild; 26 s = getSelection(); 27 28 // Initial text.. 29 n.textContent = "Hello!"; 30 31 // select the second last character 32 r = document.createRange(); 33 r.setStart(n, 4); 34 r.setEnd(n, 5); 35 s.addRange(r); 36 37 ok(s == "o", "Should have selected 'o'"); 38 ok(r.toString() == "o", "Range should be 'o'"); 39 ok(r.collapsed == false, "Range shouldn't be collapsed"); 40 ok(n.nodeValue == "Hello!", "Node value should be 'Hello!'"); 41 42 // Update the text 43 n.textContent = "Hello!"; 44 45 ok(s == "", "Should have selected ''"); 46 ok(r.toString() == "", "Range should be ''"); 47 ok(r.collapsed == true, "Range should be collapsed"); 48 ok(n.nodeValue == "Hello!", "Node value should be 'Hello!'"); 49 50 // select the last character 51 r = document.createRange(); 52 r.setStart(n, 5); 53 r.setEnd(n, 6); 54 s.addRange(r); 55 56 ok(s == "!", "Should have selected '!'"); 57 ok(r.toString() == "!", "Range should be '!'"); 58 ok(r.collapsed == false, "Range shouldn't be collapsed"); 59 ok(n.nodeValue == "Hello!", "Node value should be 'Hello!'"); 60 61 // Update the text 62 n.textContent = "Hello!"; 63 ok(s == "", "Should have selected ''"); 64 ok(r.toString() == "", "Range should be ''"); 65 ok(r.collapsed == true, "Range should be collapsed"); 66 ok(n.nodeValue == "Hello!", "Node value should be 'Hello!'"); 67 68 r = document.createRange(); 69 r.setStart(n, 5); 70 r.setEnd(n, 6); 71 ok(n.nodeValue == "Hello!", "Node value should be 'Hello!'"); 72 ok(r.toString() == "!", "Range should be '!'"); 73 ok(r.collapsed == false, "Range shouldn't be collapsed"); 74 75 r.setStart(n, 0); 76 r.setEnd(n, 6); 77 ok(n.nodeValue == "Hello!", "Node value should be 'Hello!'"); 78 ok(r.toString() == "Hello!", "Range should be 'Hello!'"); 79 ok(r.collapsed == false, "Range shouldn't be collapsed"); 80 81 n.deleteData(0, 1); 82 ok(n.nodeValue == "ello!", "Node value should be 'ello!'"); 83 ok(r.toString() == "ello!", "Range should be 'ello!'"); 84 ok(r.collapsed == false, "Range shouldn't be collapsed"); 85 86 n.deleteData(0, 4); 87 ok(n.nodeValue == "!", "Node value should be '!'"); 88 ok(r.toString() == "!", "Range should be '!'"); 89 ok(r.collapsed == false, "Range shouldn't be collapsed"); 90 91 n.textContent = "Hello!"; 92 r.setStart(n, 0); 93 r.setEnd(n, 6); 94 ok(n.nodeValue == "Hello!", "Node value should be 'Hello!'"); 95 ok(r.toString() == "Hello!", "Range should be 'Hello!'"); 96 ok(r.collapsed == false, "Range shouldn't be collapsed"); 97 98 n.replaceData(0, 6, "hELLO?"); 99 ok(n.nodeValue == "hELLO?", "Node value should be 'hELLO?'"); 100 ok(r.toString() == "", "Range should be ''"); 101 ok(r.collapsed == true, "Range should be collapsed"); 102 103 n.textContent = "Hello!"; 104 r.setStart(n, 1); 105 r.setEnd(n, 3); 106 ok(n.nodeValue == "Hello!", "Node value should be 'Hello!'"); 107 ok(r.toString() == "el", "Range should be 'el'"); 108 ok(r.collapsed == false, "Range shouldn't be collapsed"); 109 110 n.replaceData(2, 6, "END"); 111 ok(n.nodeValue == "HeEND", "Node value should be 'HeEND!'"); 112 ok(r.toString() == "e", "Range should be 'e'"); 113 ok(r.collapsed == false, "Range shouldn't be collapsed"); 114 115 n.textContent = "Hello!"; 116 r.setStart(n, 1); 117 r.setEnd(n, 5); 118 ok(n.nodeValue == "Hello!", "Node value should be 'Hello!'"); 119 ok(r.toString() == "ello", "Range should be 'ello'"); 120 ok(r.collapsed == false, "Range shouldn't be collapsed"); 121 122 n.replaceData(2, 1, "MID"); 123 ok(n.nodeValue == "HeMIDlo!", "Node value should be 'HeMIDlo!'"); 124 ok(r.toString() == "eMIDlo", "Range should be 'eMIDlo'"); 125 ok(r.collapsed == false, "Range shouldn't be collapsed"); 126 127 n.textContent = "Hello!"; 128 r.setStart(n, 0); 129 r.setEnd(n, 6); 130 ok(n.nodeValue == "Hello!", "Node value should be 'Hello!'"); 131 ok(r.toString() == "Hello!", "Range should be 'Hello!'"); 132 ok(r.collapsed == false, "Range shouldn't be collapsed"); 133 134 n.textContent = "hELLO?..."; 135 ok(n.nodeValue == "hELLO?...", "Node value should be 'hELLO?...'"); 136 ok(r.toString() == "", "Range should be ''"); 137 ok(r.collapsed == true, "Range should be collapsed"); 138 139 n.textContent = "Hello!"; 140 r.setStart(n, 1); 141 r.setEnd(n, 6); 142 ok(n.nodeValue == "Hello!", "Node value should be 'Hello!'"); 143 ok(r.toString() == "ello!", "Range should be 'ello!'"); 144 ok(r.collapsed == false, "Range shouldn't be collapsed"); 145 146 n.textContent = "Hello!"; 147 r.setStart(n, 0); 148 r.setEnd(n, 5); 149 ok(n.nodeValue == "Hello!", "Node value should be 'Hello!'"); 150 ok(r.toString() == "Hello", "Range should be 'Hello'"); 151 ok(r.collapsed == false, "Range shouldn't be collapsed"); 152 153 n.textContent = "hELLO?..."; 154 ok(n.nodeValue == "hELLO?...", "Node value should be 'hELLO?...'"); 155 ok(r.toString() == "", "Range should be ''"); 156 ok(r.collapsed == true, "Range should be collapsed"); 157 158 n.textContent = "Hello!"; 159 r.setStart(n, 0); 160 r.setEnd(n, 5); 161 ok(n.nodeValue == "Hello!", "Node value should be 'Hello!'"); 162 ok(r.toString() == "Hello", "Range should be 'Hello'"); 163 ok(r.collapsed == false, "Range shouldn't be collapsed"); 164 165 n.textContent = "..."; 166 ok(n.nodeValue == "...", "Node value should be '...'"); 167 ok(r.toString() == "", "Range should be ''"); 168 ok(r.collapsed == true, "Range should be collapsed"); 169 170 n.textContent = "Hello!"; 171 r.setStart(n, 1); 172 r.setEnd(n, 5); 173 ok(n.nodeValue == "Hello!", "Node value should be 'Hello!'"); 174 ok(r.toString() == "ello", "Range should be 'ello'"); 175 ok(r.collapsed == false, "Range shouldn't be collapsed"); 176 177 n.textContent = "..."; 178 ok(n.nodeValue == "...", "Node value should be '...'"); 179 ok(r.toString() == "", "Range should be ''"); 180 ok(r.collapsed == true, "Range should be collapsed"); 181 182 n.textContent = "$"; 183 r.setStart(n, 0); 184 r.setEnd(n, 1); 185 ok(n.nodeValue == "$", "Node value should be $'"); 186 ok(r.toString() == "$", "Range should be '$'"); 187 ok(r.collapsed == false, "Range shouldn't be collapsed"); 188 189 n.textContent = "?"; 190 ok(n.nodeValue == "?", "Node value should be '?'"); 191 ok(r.toString() == "", "Range should be ''"); 192 ok(r.collapsed == true, "Range should be collapsed"); 193 194 n.textContent = "Hello!"; 195 r.setStart(n, 3); 196 r.setEnd(n, 6); 197 ok(n.nodeValue == "Hello!", "Node value should be 'Hello!'"); 198 ok(r.toString() == "lo!", "Range should be 'lo!'"); 199 ok(r.collapsed == false, "Range shouldn't be collapsed"); 200 201 n.replaceData(1, 4, "MID"); 202 ok(n.nodeValue == "HMID!", "Node value should be 'HMID!'"); 203 ok(r.toString() == "MID!", "Range should be 'MID!'"); 204 ok(r.collapsed == false, "Range shouldn't be collapsed"); 205 206 n.textContent = "Hello!"; 207 r.setStart(n, 3); 208 r.setEnd(n, 6); 209 ok(n.nodeValue == "Hello!", "Node value should be 'Hello!'"); 210 ok(r.toString() == "lo!", "Range should be 'lo!'"); 211 ok(r.collapsed == false, "Range shouldn't be collapsed"); 212 213 n.replaceData(1, 2, "MID"); 214 ok(n.nodeValue == "HMIDlo!", "Node value should be 'HMIDlo!'"); 215 ok(r.toString() == "MIDlo!", "Range should be 'MIDlo!'"); 216 ok(r.collapsed == false, "Range shouldn't be collapsed"); 217 218 n.textContent = "Hello!"; 219 r = document.createRange(); 220 r.setStart(n, 6); 221 r.setEnd(n, 6); 222 ok(n.nodeValue == "Hello!", " Node value should be 'Hello!'"); 223 ok(r.toString() == "", " Range should be ''"); 224 ok(r.startOffset == 6, "Start offset should be 6"); 225 ok(r.endOffset == 6, "End offset should be 6"); 226 227 n.textContent = "Hello!"; 228 ok(n.nodeValue == "Hello!", " Node value should be 'Hello!'"); 229 ok(r.toString() == "", " Range should be ''"); 230 ok(r.startOffset == 0, "Start offset should be 0"); 231 ok(r.endOffset == 0, "End offset should be 0"); 232 } 233 234 tests(); 235 236 </script> 237 </pre> 238 </body> 239 </html>