test_checked.html (11022B)
1 <!DOCTYPE HTML> 2 <html> 3 <!-- 4 https://bugzilla.mozilla.org/show_bug.cgi?id=418756 5 --> 6 <head> 7 <title>Test for Bug 418756</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 Mozilla bug 13 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=418756">418756</a> 14 <p id="display"></p> 15 <div id="content"> 16 <form id="f1"> 17 </form> 18 <form id="f2"> 19 </form> 20 </div> 21 <pre id="test"> 22 <script class="testbody" type="text/javascript"> 23 24 /** Test for Bug 418756 */ 25 var group1; 26 var group2; 27 var group3; 28 29 function bounce(node) { 30 let n = node.nextSibling; 31 let p = node.parentNode; 32 p.removeChild(node); 33 p.insertBefore(node, n); 34 } 35 36 var createdNodes = []; 37 38 function cleanup() { 39 for (let node of createdNodes) { 40 if (node.parentNode) { 41 node.remove(); 42 } 43 } 44 45 createdNodes = []; 46 } 47 48 var typeMapper = { 49 'c': 'checkbox', 50 'r': 'radio' 51 }; 52 53 var id = 0; 54 55 // type can be 'c' for 'checkbox' and 'r' for 'radio' 56 function createNode(type, name, checked) { 57 let node = document.createElement("input"); 58 node.setAttribute("type", typeMapper[type]); 59 if (checked) { 60 node.setAttribute("checked", "checked"); 61 } 62 node.setAttribute("id", type + (++id)); 63 node.setAttribute("name", name); 64 createdNodes.push(node); 65 return node; 66 } 67 68 var types = ['c', 'r']; 69 70 // First make sure that setting .checked makes .defaultChecked changes no 71 // longer affect .checked. 72 for (let type of types) { 73 let n = createNode(type, '', false); 74 is(n.defaultChecked, false, "Bogus defaultChecked on " + typeMapper[type]); 75 is(n.checked, false, "Bogus checked on " + typeMapper[type]); 76 n.defaultChecked = true; 77 is(n.defaultChecked, true, "Bogus defaultChecked on " + typeMapper[type] + 78 "after mutation"); 79 is(n.checked, true, "Bogus checked on " + typeMapper[type] + 80 "after mutation"); 81 n.checked = false; 82 is(n.defaultChecked, true, "Bogus defaultChecked on " + typeMapper[type] + 83 "after second mutation"); 84 is(n.checked, false, "Bogus checked on " + typeMapper[type] + 85 "after second mutation"); 86 n.defaultChecked = false; 87 is(n.defaultChecked, false, "Bogus defaultChecked on " + typeMapper[type] + 88 "after third mutation"); 89 is(n.checked, false, "Bogus checked on " + typeMapper[type] + 90 "after third mutation"); 91 n.defaultChecked = true; 92 is(n.defaultChecked, true, "Bogus defaultChecked on " + typeMapper[type] + 93 "after fourth mutation"); 94 is(n.checked, false, "Bogus checked on " + typeMapper[type] + 95 "after fourth mutation"); 96 } 97 98 cleanup(); 99 100 // Now check that bouncing a control that's the only one of its kind has no 101 // effect 102 for (let type of types) { 103 let n = createNode(type, 'test1', true); 104 $("f1").appendChild(n); 105 n.checked = false; 106 n.defaultChecked = false; 107 bounce(n); 108 n.defaultChecked = true; 109 is(n.checked, false, "We set .checked on this " + typeMapper[type]); 110 } 111 112 cleanup(); 113 114 // Now check that playing with a single radio in a group affects all 115 // other radios in the group (but not radios not in that group) 116 group1 = [ createNode('r', 'g1', false), 117 createNode('r', 'g1', false), 118 createNode('r', 'g1', false) ]; 119 group2 = [ createNode('r', 'g2', false), 120 createNode('r', 'g2', false), 121 createNode('r', 'g2', false) ]; 122 group3 = [ createNode('r', 'g1', false), 123 createNode('r', 'g1', false), 124 createNode('r', 'g1', false) ]; 125 for (let g of group1) { 126 $("f1").appendChild(g); 127 } 128 for (let g of group2) { 129 $("f1").appendChild(g); 130 } 131 for (let g of group3) { 132 $("f2").appendChild(g); 133 } 134 135 for (let n of [1, 2, 3]) { 136 for (let g of window["group"+n]) { 137 is(g.defaultChecked, false, 138 "group" + n + "[" + window["group"+n].indexOf(g) + 139 "] defaultChecked wrong pass 1"); 140 is(g.checked, false, 141 "group" + n + "[" + window["group"+n].indexOf(g) + 142 "] checkedhecked wrong pass 1"); 143 } 144 } 145 146 group1[1].defaultChecked = true; 147 for (let n of [1, 2, 3]) { 148 for (let g of window["group"+n]) { 149 is(g.defaultChecked, n == 1 && group1.indexOf(g) == 1, 150 "group" + n + "[" + window["group"+n].indexOf(g) + 151 "] defaultChecked wrong pass 2"); 152 is(g.checked, n == 1 && group1.indexOf(g) == 1, 153 "group" + n + "[" + window["group"+n].indexOf(g) + 154 "] checked wrong pass 2"); 155 } 156 } 157 158 group1[0].defaultChecked = true; 159 for (let n of [1, 2, 3]) { 160 for (let g of window["group"+n]) { 161 is(g.defaultChecked, n == 1 && (group1.indexOf(g) == 1 || 162 group1.indexOf(g) == 0), 163 "group" + n + "[" + window["group"+n].indexOf(g) + 164 "] defaultChecked wrong pass 3"); 165 is(g.checked, n == 1 && group1.indexOf(g) == 0, 166 "group" + n + "[" + window["group"+n].indexOf(g) + 167 "] checked wrong pass 3"); 168 } 169 } 170 171 group1[2].defaultChecked = true; 172 for (let n of [1, 2, 3]) { 173 for (let g of window["group"+n]) { 174 is(g.defaultChecked, n == 1, 175 "group" + n + "[" + window["group"+n].indexOf(g) + 176 "] defaultChecked wrong pass 4"); 177 is(g.checked, n == 1 && group1.indexOf(g) == 2, 178 "group" + n + "[" + window["group"+n].indexOf(g) + 179 "] checked wrong pass 4"); 180 } 181 } 182 183 var next = group1[1].nextSibling; 184 var p = group1[1].parentNode; 185 p.removeChild(group1[1]); 186 group1[1].defaultChecked = false; 187 group1[1].defaultChecked = true; 188 p.insertBefore(group1[1], next); 189 for (let n of [1, 2, 3]) { 190 for (let g of window["group"+n]) { 191 is(g.defaultChecked, n == 1, 192 "group" + n + "[" + window["group"+n].indexOf(g) + 193 "] defaultChecked wrong pass 5"); 194 is(g.checked, n == 1 && group1.indexOf(g) == 1, 195 "group" + n + "[" + window["group"+n].indexOf(g) + 196 "] checked wrong pass 5"); 197 } 198 } 199 200 for (let g of group1) { 201 g.defaultChecked = false; 202 } 203 for (let n of [1, 2, 3]) { 204 for (let g of window["group"+n]) { 205 is(g.defaultChecked, false, 206 "group" + n + "[" + window["group"+n].indexOf(g) + 207 "] defaultChecked wrong pass 6"); 208 is(g.checked, false, 209 "group" + n + "[" + window["group"+n].indexOf(g) + 210 "] checkedhecked wrong pass 6"); 211 } 212 } 213 214 group1[1].checked = true; 215 for (let n of [1, 2, 3]) { 216 for (let g of window["group"+n]) { 217 is(g.defaultChecked, false, 218 "group" + n + "[" + window["group"+n].indexOf(g) + 219 "] defaultChecked wrong pass 7"); 220 is(g.checked, n == 1 && group1.indexOf(g) == 1, 221 "group" + n + "[" + window["group"+n].indexOf(g) + 222 "] checked wrong pass 7"); 223 } 224 } 225 226 group1[0].defaultChecked = true; 227 for (let n of [1, 2, 3]) { 228 for (let g of window["group"+n]) { 229 is(g.defaultChecked, n == 1 && group1.indexOf(g) == 0, 230 "group" + n + "[" + window["group"+n].indexOf(g) + 231 "] defaultChecked wrong pass 8"); 232 is(g.checked, n == 1 && group1.indexOf(g) == 1, 233 "group" + n + "[" + window["group"+n].indexOf(g) + 234 "] checked wrong pass 8"); 235 } 236 } 237 238 group1[2].defaultChecked = true; 239 for (let n of [1, 2, 3]) { 240 for (let g of window["group"+n]) { 241 is(g.defaultChecked, n == 1 && (group1.indexOf(g) == 0 || 242 group1.indexOf(g) == 2), 243 "group" + n + "[" + window["group"+n].indexOf(g) + 244 "] defaultChecked wrong pass 9"); 245 is(g.checked, n == 1 && group1.indexOf(g) == 1, 246 "group" + n + "[" + window["group"+n].indexOf(g) + 247 "] checked wrong pass 9"); 248 } 249 } 250 group1[1].remove(); 251 for (let n of [1, 2, 3]) { 252 for (let g of window["group"+n]) { 253 is(g.defaultChecked, n == 1 && (group1.indexOf(g) == 0 || 254 group1.indexOf(g) == 2), 255 "group" + n + "[" + window["group"+n].indexOf(g) + 256 "] defaultChecked wrong pass 10"); 257 is(g.checked, n == 1 && group1.indexOf(g) == 1, 258 "group" + n + "[" + window["group"+n].indexOf(g) + 259 "] checked wrong pass 10"); 260 } 261 } 262 263 group1[2].checked = true; 264 for (let n of [1, 2, 3]) { 265 for (let g of window["group"+n]) { 266 is(g.defaultChecked, n == 1 && (group1.indexOf(g) == 0 || 267 group1.indexOf(g) == 2), 268 "group" + n + "[" + window["group"+n].indexOf(g) + 269 "] defaultChecked wrong pass 11"); 270 is(g.checked, n == 1 && (group1.indexOf(g) == 1 || 271 group1.indexOf(g) == 2), 272 "group" + n + "[" + window["group"+n].indexOf(g) + 273 "] checked wrong pass 11"); 274 } 275 } 276 277 group1[0].checked = true; 278 for (let n of [1, 2, 3]) { 279 for (let g of window["group"+n]) { 280 is(g.defaultChecked, n == 1 && (group1.indexOf(g) == 0 || 281 group1.indexOf(g) == 2), 282 "group" + n + "[" + window["group"+n].indexOf(g) + 283 "] defaultChecked wrong pass 12"); 284 is(g.checked, n == 1 && (group1.indexOf(g) == 1 || 285 group1.indexOf(g) == 0), 286 "group" + n + "[" + window["group"+n].indexOf(g) + 287 "] checked wrong pass 12"); 288 } 289 } 290 291 next = group2[1].nextSibling; 292 p = group2[1].parentNode; 293 p.removeChild(group2[1]); 294 p.insertBefore(group2[1], next); 295 group2[0].checked = true; 296 for (let n of [1, 2, 3]) { 297 for (let g of window["group"+n]) { 298 is(g.defaultChecked, n == 1 && (group1.indexOf(g) == 0 || 299 group1.indexOf(g) == 2), 300 "group" + n + "[" + window["group"+n].indexOf(g) + 301 "] defaultChecked wrong pass 13"); 302 is(g.checked, (n == 1 && (group1.indexOf(g) == 1 || 303 group1.indexOf(g) == 0)) || 304 (n == 2 && group2.indexOf(g) == 0), 305 "group" + n + "[" + window["group"+n].indexOf(g) + 306 "] checked wrong pass 13"); 307 } 308 } 309 310 p.insertBefore(group2[1], next); 311 for (let n of [1, 2, 3]) { 312 for (let g of window["group"+n]) { 313 is(g.defaultChecked, n == 1 && (group1.indexOf(g) == 0 || 314 group1.indexOf(g) == 2), 315 "group" + n + "[" + window["group"+n].indexOf(g) + 316 "] defaultChecked wrong pass 14"); 317 is(g.checked, (n == 1 && (group1.indexOf(g) == 1 || 318 group1.indexOf(g) == 0)) || 319 (n == 2 && group2.indexOf(g) == 0), 320 "group" + n + "[" + window["group"+n].indexOf(g) + 321 "] checked wrong pass 14"); 322 } 323 } 324 325 group2[1].defaultChecked = true; 326 for (let n of [1, 2, 3]) { 327 for (let g of window["group"+n]) { 328 is(g.defaultChecked, (n == 1 && (group1.indexOf(g) == 0 || 329 group1.indexOf(g) == 2)) || 330 (n == 2 && group2.indexOf(g) == 1), 331 "group" + n + "[" + window["group"+n].indexOf(g) + 332 "] defaultChecked wrong pass 15"); 333 is(g.checked, (n == 1 && (group1.indexOf(g) == 1 || 334 group1.indexOf(g) == 0)) || 335 (n == 2 && group2.indexOf(g) == 0), 336 "group" + n + "[" + window["group"+n].indexOf(g) + 337 "] checked wrong pass 15"); 338 } 339 } 340 341 cleanup(); 342 343 </script> 344 </pre> 345 </body> 346 </html>