test_bug557087-2.html (10381B)
1 <!DOCTYPE HTML> 2 <html> 3 <!-- 4 https://bugzilla.mozilla.org/show_bug.cgi?id=557087 5 --> 6 <head> 7 <title>Test for Bug 557087</title> 8 <script src="/tests/SimpleTest/SimpleTest.js"></script> 9 <script src="/tests/SimpleTest/EventUtils.js"></script> 10 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> 11 </head> 12 <body> 13 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=557087">Mozilla Bug 557087</a> 14 <p id="display"></p> 15 <div id="content" style="display:none;"> 16 </div> 17 <pre id="test"> 18 <script> 19 20 /** Test for Bug 557087 */ 21 22 SimpleTest.waitForExplicitFinish(); 23 24 var elementsPreventingClick = [ "input", "button", "select", "textarea" ]; 25 var elementsWithClick = [ "option", "optgroup", "output", "label", "object", "fieldset" ]; 26 var gHandled = 0; 27 28 function clickShouldNotHappenHandler(aEvent) 29 { 30 aEvent.target.removeEventListener("click", clickShouldNotHappenHandler); 31 ok(false, "click event should be prevented! (test1)"); 32 if (++gHandled >= elementsWithClick.length) { 33 test2(); 34 } 35 } 36 37 function clickShouldNotHappenHandler2(aEvent) 38 { 39 aEvent.target.removeEventListener("click", clickShouldNotHappenHandler3); 40 ok(false, "click event should be prevented! (test2)"); 41 if (++gHandled >= elementsWithClick.length) { 42 test3(); 43 } 44 } 45 46 function clickShouldNotHappenHandler5(aEvent) 47 { 48 aEvent.target.removeEventListener("click", clickShouldNotHappenHandler5); 49 ok(false, "click event should be prevented! (test5)"); 50 if (++gHandled >= elementsWithClick.length) { 51 test6(); 52 } 53 } 54 55 function clickShouldNotHappenHandler7(aEvent) 56 { 57 aEvent.target.removeEventListener("click", clickShouldNotHappenHandler7); 58 ok(false, "click event should be prevented! (test7)"); 59 if (++gHandled >= elementsWithClick.length) { 60 test8(); 61 } 62 } 63 64 function clickShouldHappenHandler(aEvent) 65 { 66 aEvent.target.removeEventListener("click", clickShouldHappenHandler); 67 ok(true, "click event has been correctly received (test1)"); 68 if (++gHandled >= elementsWithClick.length) { 69 test2(); 70 } 71 } 72 73 function clickShouldHappenHandler2(aEvent) 74 { 75 aEvent.target.removeEventListener("click", clickShouldHappenHandler2); 76 ok(true, "click event has been correctly received (test2)"); 77 if (++gHandled >= elementsWithClick.length) { 78 test3(); 79 } 80 } 81 82 function clickShouldHappenHandler3(aEvent) 83 { 84 aEvent.target.removeEventListener("click", clickShouldHappenHandler3); 85 ok(true, "click event has been correctly received (test3)"); 86 if (++gHandled >= (elementsWithClick.length + 87 elementsPreventingClick.length)) { 88 test4(); 89 } 90 } 91 92 function clickShouldHappenHandler4(aEvent) 93 { 94 aEvent.target.removeEventListener("click", clickShouldHappenHandler4); 95 ok(true, "click event has been correctly received (test4)"); 96 if (++gHandled >= (elementsWithClick.length + 97 elementsPreventingClick.length)) { 98 test5(); 99 } 100 } 101 102 function clickShouldHappenHandler5(aEvent) 103 { 104 aEvent.target.removeEventListener("click", clickShouldHappenHandler5); 105 ok(true, "click event has been correctly received (test5)"); 106 if (++gHandled >= elementsWithClick.length) { 107 test6(); 108 } 109 } 110 111 function clickShouldHappenHandler6(aEvent) 112 { 113 aEvent.target.removeEventListener("click", clickShouldHappenHandler6); 114 ok(true, "click event has been correctly received (test6)"); 115 if (++gHandled >= (elementsWithClick.length + 116 elementsPreventingClick.length)) { 117 test7(); 118 } 119 } 120 121 function clickShouldHappenHandler7(aEvent) 122 { 123 aEvent.target.removeEventListener("click", clickShouldHappenHandler7); 124 ok(true, "click event has been correctly received (test5)"); 125 if (++gHandled >= elementsWithClick.length) { 126 test8(); 127 } 128 } 129 130 function clickShouldHappenHandler8(aEvent) 131 { 132 aEvent.target.removeEventListener("click", clickShouldHappenHandler8); 133 ok(true, "click event has been correctly received (test8)"); 134 if (++gHandled >= (elementsWithClick.length + 135 elementsPreventingClick.length)) { 136 SimpleTest.finish(); 137 } 138 } 139 140 var fieldset1 = document.createElement("fieldset"); 141 var fieldset2 = document.createElement("fieldset"); 142 var legendA = document.createElement("legend"); 143 var legendB = document.createElement("legend"); 144 var content = document.getElementById('content'); 145 fieldset1.disabled = true; 146 content.appendChild(fieldset1); 147 fieldset1.appendChild(fieldset2); 148 149 function clean() 150 { 151 var count = fieldset2.children.length; 152 for (var i=0; i<count; ++i) { 153 if (fieldset2.children[i] != legendA && 154 fieldset2.children[i] != legendB) { 155 fieldset2.removeChild(fieldset2.children[i]); 156 } 157 } 158 } 159 160 function test1() 161 { 162 gHandled = 0; 163 164 // Initialize children without click expected. 165 for (var name of elementsPreventingClick) { 166 var element = document.createElement(name); 167 fieldset2.appendChild(element); 168 element.addEventListener("click", clickShouldNotHappenHandler); 169 sendMouseEvent({type:'click'}, element); 170 } 171 172 // Initialize children with click expected. 173 for (var name of elementsWithClick) { 174 var element = document.createElement(name); 175 fieldset2.appendChild(element); 176 element.addEventListener("click", clickShouldHappenHandler); 177 sendMouseEvent({type:'click'}, element); 178 } 179 } 180 181 function test2() 182 { 183 gHandled = 0; 184 fieldset1.disabled = false; 185 fieldset2.disabled = true; 186 187 // Initialize children without click expected. 188 for (var name of elementsPreventingClick) { 189 var element = document.createElement(name); 190 fieldset2.appendChild(element); 191 element.addEventListener("click", clickShouldNotHappenHandler2); 192 sendMouseEvent({type:'click'}, element); 193 } 194 195 // Initialize children with click expected. 196 for (var name of elementsWithClick) { 197 var element = document.createElement(name); 198 fieldset2.appendChild(element); 199 element.addEventListener("click", clickShouldHappenHandler2); 200 sendMouseEvent({type:'click'}, element); 201 } 202 } 203 204 function test3() 205 { 206 gHandled = 0; 207 fieldset1.disabled = false; 208 fieldset2.disabled = false; 209 210 // All elements should accept the click. 211 for (var name of elementsPreventingClick) { 212 var element = document.createElement(name); 213 fieldset2.appendChild(element); 214 element.addEventListener("click", clickShouldHappenHandler3); 215 sendMouseEvent({type:'click'}, element); 216 } 217 218 // Initialize children with click expected. 219 for (var name of elementsWithClick) { 220 var element = document.createElement(name); 221 fieldset2.appendChild(element); 222 element.addEventListener("click", clickShouldHappenHandler3); 223 sendMouseEvent({type:'click'}, element); 224 } 225 } 226 227 function test4() 228 { 229 gHandled = 0; 230 fieldset1.disabled = false; 231 fieldset2.disabled = true; 232 233 fieldset2.appendChild(legendA); 234 235 // All elements should accept the click. 236 for (var name of elementsPreventingClick) { 237 var element = document.createElement(name); 238 legendA.appendChild(element); 239 element.addEventListener("click", clickShouldHappenHandler4); 240 sendMouseEvent({type:'click'}, element); 241 } 242 243 // Initialize children with click expected. 244 for (var name of elementsWithClick) { 245 var element = document.createElement(name); 246 legendA.appendChild(element); 247 element.addEventListener("click", clickShouldHappenHandler4); 248 sendMouseEvent({type:'click'}, element); 249 } 250 } 251 252 function test5() 253 { 254 gHandled = 0; 255 fieldset2.insertBefore(legendB, legendA); 256 257 // Initialize children without click expected. 258 for (var name of elementsPreventingClick) { 259 var element = document.createElement(name); 260 legendA.appendChild(element); 261 element.addEventListener("click", clickShouldNotHappenHandler5); 262 sendMouseEvent({type:'click'}, element); 263 } 264 265 // Initialize children with click expected. 266 for (var name of elementsWithClick) { 267 var element = document.createElement(name); 268 legendA.appendChild(element); 269 element.addEventListener("click", clickShouldHappenHandler5); 270 sendMouseEvent({type:'click'}, element); 271 } 272 } 273 274 function test6() 275 { 276 gHandled = 0; 277 fieldset2.removeChild(legendB); 278 fieldset1.disabled = true; 279 fieldset2.disabled = false; 280 281 fieldset1.appendChild(legendA); 282 legendA.appendChild(fieldset2); 283 284 // All elements should accept the click. 285 for (var name of elementsPreventingClick) { 286 var element = document.createElement(name); 287 fieldset2.appendChild(element); 288 element.addEventListener("click", clickShouldHappenHandler6); 289 sendMouseEvent({type:'click'}, element); 290 } 291 292 // Initialize children with click expected. 293 for (var name of elementsWithClick) { 294 var element = document.createElement(name); 295 fieldset2.appendChild(element); 296 element.addEventListener("click", clickShouldHappenHandler6); 297 sendMouseEvent({type:'click'}, element); 298 } 299 } 300 301 function test7() 302 { 303 gHandled = 0; 304 fieldset1.disabled = true; 305 fieldset2.disabled = false; 306 307 fieldset1.appendChild(fieldset2); 308 fieldset2.appendChild(legendA); 309 310 // All elements should accept the click. 311 for (var name of elementsPreventingClick) { 312 var element = document.createElement(name); 313 legendA.appendChild(element); 314 element.addEventListener("click", clickShouldNotHappenHandler7); 315 sendMouseEvent({type:'click'}, element); 316 } 317 318 // Initialize children with click expected. 319 for (var name of elementsWithClick) { 320 var element = document.createElement(name); 321 legendA.appendChild(element); 322 element.addEventListener("click", clickShouldHappenHandler7); 323 sendMouseEvent({type:'click'}, element); 324 } 325 } 326 327 function test8() 328 { 329 gHandled = 0; 330 fieldset1.disabled = true; 331 fieldset2.disabled = true; 332 333 fieldset1.appendChild(legendA); 334 legendA.appendChild(fieldset2); 335 fieldset2.appendChild(legendB); 336 337 // All elements should accept the click. 338 for (var name of elementsPreventingClick) { 339 var element = document.createElement(name); 340 legendB.appendChild(element); 341 element.addEventListener("click", clickShouldHappenHandler8); 342 sendMouseEvent({type:'click'}, element); 343 } 344 345 // Initialize children with click expected. 346 for (var name of elementsWithClick) { 347 var element = document.createElement(name); 348 legendB.appendChild(element); 349 element.addEventListener("click", clickShouldHappenHandler8); 350 sendMouseEvent({type:'click'}, element); 351 } 352 } 353 354 SpecialPowers.pushPrefEnv({ 355 set: [["dom.forms.fieldset_disable_only_descendants.enabled", true]] 356 }).then(() => { 357 test1(); 358 }) 359 360 </script> 361 </pre> 362 </body> 363 </html>