test_eventctors.html (28911B)
1 <!DOCTYPE HTML> 2 <html> 3 <!-- 4 https://bugzilla.mozilla.org/show_bug.cgi?id=675884 5 --> 6 <head> 7 <title>Test for Bug 675884</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=675884">Mozilla Bug 675884</a> 13 <p id="display"></p> 14 <div id="content" style="display: none"> 15 16 </div> 17 <pre id="test"> 18 <script type="application/javascript"> 19 20 /** Test for Bug 675884 */ 21 22 var receivedEvent; 23 document.addEventListener("hello", function(e) { receivedEvent = e; }, true); 24 25 function isMethodResultInitializer(aPropName) 26 { 27 return aPropName.startsWith("modifier"); 28 } 29 30 function getPropValue(aEvent, aPropName) 31 { 32 if (aPropName.startsWith("modifier")) { 33 return aEvent.getModifierState(aPropName.substr("modifier".length)); 34 } 35 return aEvent[aPropName]; 36 } 37 38 // Event 39 var e; 40 var ex = false; 41 try { 42 e = new Event(); 43 } catch(exp) { 44 ex = true; 45 } 46 ok(ex, "First parameter is required!"); 47 ex = false; 48 49 try { 50 e = new Event("foo", 123); 51 } catch(exp) { 52 ex = true; 53 } 54 ok(ex, "2nd parameter should be an object!"); 55 ex = false; 56 57 try { 58 e = new Event("foo", "asdf"); 59 } catch(exp) { 60 ex = true; 61 } 62 ok(ex, "2nd parameter should be an object!"); 63 ex = false; 64 65 66 try { 67 e = new Event("foo", false); 68 } catch(exp) { 69 ex = true; 70 } 71 ok(ex, "2nd parameter should be an object!"); 72 ex = false; 73 74 75 e = new Event("hello"); 76 is(e.type, "hello", "Wrong event type!"); 77 ok(!e.isTrusted, "Event shouldn't be trusted!"); 78 e.isTrusted = true; 79 ok(!e.isTrusted, "Event shouldn't be trusted!"); 80 81 try { 82 e.__defineGetter__("isTrusted", function() { return true }); 83 } catch (exp) { 84 ex = true; 85 } 86 ok(ex, "Shouldn't be able to re-define the getter for isTrusted."); 87 ex = false; 88 ok(!e.isTrusted, "Event shouldn't be trusted!"); 89 90 ok(!("isTrusted" in Object.getPrototypeOf(e))) 91 92 ok(!e.bubbles, "Event shouldn't bubble!"); 93 ok(!e.cancelable, "Event shouldn't be cancelable!"); 94 is(e.eventPhase, Event.NONE, "Wrong event phase"); 95 document.dispatchEvent(e); 96 is(e.eventPhase, Event.NONE, "Wrong event phase"); 97 is(receivedEvent, e, "Wrong event!"); 98 99 e = new Event("hello", null); 100 is(e.type, "hello", "Wrong event type!"); 101 ok(!e.isTrusted, "Event shouldn't be trusted!"); 102 ok(!e.bubbles, "Event shouldn't bubble!"); 103 ok(!e.cancelable, "Event shouldn't be cancelable!"); 104 is(e.eventPhase, Event.NONE, "Wrong event phase"); 105 document.dispatchEvent(e); 106 is(e.eventPhase, Event.NONE, "Wrong event phase"); 107 is(receivedEvent, e, "Wrong event!"); 108 109 e = new Event("hello", undefined); 110 is(e.type, "hello", "Wrong event type!"); 111 ok(!e.isTrusted, "Event shouldn't be trusted!"); 112 ok(!e.bubbles, "Event shouldn't bubble!"); 113 ok(!e.cancelable, "Event shouldn't be cancelable!"); 114 is(e.eventPhase, Event.NONE, "Wrong event phase"); 115 document.dispatchEvent(e); 116 is(e.eventPhase, Event.NONE, "Wrong event phase"); 117 is(receivedEvent, e, "Wrong event!"); 118 119 e = new Event("hello", {}); 120 is(e.type, "hello", "Wrong event type!"); 121 ok(!e.isTrusted, "Event shouldn't be trusted!"); 122 ok(!e.bubbles, "Event shouldn't bubble!"); 123 ok(!e.cancelable, "Event shouldn't be cancelable!"); 124 is(e.eventPhase, Event.NONE, "Wrong event phase"); 125 document.dispatchEvent(e); 126 is(e.eventPhase, Event.NONE, "Wrong event phase"); 127 is(receivedEvent, e, "Wrong event!"); 128 129 e = new Event("hello", { bubbles: true, cancelable: true }); 130 is(e.type, "hello", "Wrong event type!"); 131 ok(!e.isTrusted, "Event shouldn't be trusted!"); 132 ok(e.bubbles, "Event should bubble!"); 133 ok(e.cancelable, "Event should be cancelable!"); 134 document.dispatchEvent(e); 135 is(receivedEvent, e, "Wrong event!"); 136 137 // CustomEvent 138 139 try { 140 e = new CustomEvent(); 141 } catch(exp) { 142 ex = true; 143 } 144 ok(ex, "First parameter is required!"); 145 ex = false; 146 147 e = new CustomEvent("hello"); 148 is(e.type, "hello", "Wrong event type!"); 149 ok(!e.isTrusted, "Event shouldn't be trusted!"); 150 ok(!e.bubbles, "Event shouldn't bubble!"); 151 ok(!e.cancelable, "Event shouldn't be cancelable!"); 152 document.dispatchEvent(e); 153 is(receivedEvent, e, "Wrong event!"); 154 155 e = new CustomEvent("hello", { bubbles: true, cancelable: true, detail: window }); 156 is(e.type, "hello", "Wrong event type!"); 157 ok(!e.isTrusted, "Event shouldn't be trusted!"); 158 ok(e.bubbles, "Event should bubble!"); 159 ok(e.cancelable, "Event should be cancelable!"); 160 is(e.detail, window , "Wrong event.detail!"); 161 document.dispatchEvent(e); 162 is(receivedEvent, e, "Wrong event!"); 163 164 e = new CustomEvent("hello", { cancelable: true, detail: window }); 165 is(e.type, "hello", "Wrong event type!"); 166 ok(!e.isTrusted, "Event shouldn't be trusted!"); 167 ok(!e.bubbles, "Event shouldn't bubble!"); 168 ok(e.cancelable, "Event should be cancelable!"); 169 is(e.detail, window , "Wrong event.detail!"); 170 171 e = new CustomEvent("hello", { detail: 123 }); 172 is(e.detail, 123, "Wrong event.detail!"); 173 ok(!e.bubbles, "Event shouldn't bubble!"); 174 ok(!e.cancelable, "Event shouldn't be cancelable!"); 175 176 var dict = { get detail() { return document.body } }; 177 e = new CustomEvent("hello", dict); 178 is(e.detail, dict.detail, "Wrong event.detail!"); 179 ok(!e.bubbles, "Event shouldn't bubble!"); 180 ok(!e.cancelable, "Event shouldn't be cancelable!"); 181 182 var dict = { get detail() { throw "foo"; } }; 183 184 try { 185 e = new CustomEvent("hello", dict); 186 } catch (exp) { 187 ex = true; 188 } 189 ok(ex, "Should have thrown an exception!"); 190 ex = false; 191 192 // BlobEvent 193 194 try { 195 e = new BlobEvent(); 196 } catch(exp) { 197 ex = true; 198 } 199 ok(ex, "First parameter is required!"); 200 ex = false; 201 202 try { 203 e = new BlobEvent("hello"); 204 } catch(exp) { 205 ex = true; 206 } 207 ok(ex, "data attribute is required in init dict"); 208 ex = false; 209 210 var blob = new Blob(); 211 e = new BlobEvent("hello", {data: blob}); 212 is(e.type, "hello", "Wrong event type!"); 213 ok(!e.isTrusted, "Event shouldn't be trusted!"); 214 try { 215 e.__defineGetter__("isTrusted", function() { return true }); 216 } catch (exp) { 217 ex = true; 218 } 219 ok(ex, "Shouldn't be able to re-define the getter for isTrusted."); 220 ex = false; 221 ok(!e.isTrusted, "BlobEvent shouldn't be trusted!"); 222 223 ok(!e.bubbles, "Event shouldn't bubble!"); 224 ok(!e.cancelable, "Event shouldn't be cancelable!"); 225 document.dispatchEvent(e); 226 is(receivedEvent, e, "Wrong event!"); 227 228 e = new BlobEvent("hello", { bubbles: true, cancelable: true, data: blob }); 229 is(e.type, "hello", "Wrong event type!"); 230 ok(!e.isTrusted, "Event shouldn't be trusted!"); 231 ok(e.bubbles, "Event should bubble!"); 232 ok(e.cancelable, "Event should be cancelable!"); 233 is(e.data, blob , "Wrong event.data!"); 234 document.dispatchEvent(e); 235 is(receivedEvent, e, "Wrong event!"); 236 237 e = new BlobEvent("hello", {data: blob}); 238 is(e.type, "hello", "Wrong event type!"); 239 ok(!e.isTrusted, "Event shouldn't be trusted!"); 240 ok(!e.bubbles, "Event shouldn't bubble!"); 241 ok(!e.cancelable, "Event should be cancelable1!"); 242 is(e.data, blob , "Wrong event.data!"); 243 244 try { 245 e = new BlobEvent("hello", { data: null }); 246 } catch(exp) { 247 ex = true; 248 } 249 ok(ex, "data attribute cannot be null"); 250 ex = false; 251 blob = null; 252 253 // CloseEvent 254 255 try { 256 e = new CloseEvent(); 257 } catch(exp) { 258 ex = true; 259 } 260 ok(ex, "First parameter is required!"); 261 ex = false; 262 263 e = new CloseEvent("hello"); 264 is(e.type, "hello", "Wrong event type!"); 265 ok(!e.isTrusted, "Event shouldn't be trusted!"); 266 ok(!e.bubbles, "Event shouldn't bubble!"); 267 ok(!e.cancelable, "Event shouldn't be cancelable!"); 268 is(e.wasClean, false, "wasClean should be false!"); 269 is(e.code, 0, "code should be 0!"); 270 is(e.reason, "", "reason should be ''!"); 271 document.dispatchEvent(e); 272 is(receivedEvent, e, "Wrong event!"); 273 274 e = new CloseEvent("hello", 275 { bubbles: true, cancelable: true, wasClean: true, code: 1, reason: "foo" }); 276 is(e.type, "hello", "Wrong event type!"); 277 ok(!e.isTrusted, "Event shouldn't be trusted!"); 278 ok(e.bubbles, "Event should bubble!"); 279 ok(e.cancelable, "Event should be cancelable!"); 280 is(e.wasClean, true, "wasClean should be true!"); 281 is(e.code, 1, "code should be 1!"); 282 is(e.reason, "foo", "reason should be 'foo'!"); 283 document.dispatchEvent(e); 284 is(receivedEvent, e, "Wrong event!"); 285 286 e = new CloseEvent("hello", 287 { bubbles: true, cancelable: true, wasClean: true, code: 1 }); 288 is(e.type, "hello", "Wrong event type!"); 289 ok(!e.isTrusted, "Event shouldn't be trusted!"); 290 ok(e.bubbles, "Event should bubble!"); 291 ok(e.cancelable, "Event should be cancelable!"); 292 is(e.wasClean, true, "wasClean should be true!"); 293 is(e.code, 1, "code should be 1!"); 294 is(e.reason, "", "reason should be ''!"); 295 document.dispatchEvent(e); 296 is(receivedEvent, e, "Wrong event!"); 297 298 299 // HashChangeEvent 300 301 try { 302 e = new HashChangeEvent(); 303 } catch(exp) { 304 ex = true; 305 } 306 ok(ex, "First parameter is required!"); 307 ex = false; 308 309 e = new HashChangeEvent("hello"); 310 is(e.type, "hello", "Wrong event type!"); 311 ok(!e.isTrusted, "Event shouldn't be trusted!"); 312 ok(!e.bubbles, "Event shouldn't bubble!"); 313 ok(!e.cancelable, "Event shouldn't be cancelable!"); 314 is(e.oldURL, "", "oldURL should be ''"); 315 is(e.newURL, "", "newURL should be ''"); 316 document.dispatchEvent(e); 317 is(receivedEvent, e, "Wrong event!"); 318 319 e = new HashChangeEvent("hello", 320 { bubbles: true, cancelable: true, oldURL: "old", newURL: "new" }); 321 is(e.type, "hello", "Wrong event type!"); 322 ok(!e.isTrusted, "Event shouldn't be trusted!"); 323 ok(e.bubbles, "Event should bubble!"); 324 ok(e.cancelable, "Event should be cancelable!"); 325 is(e.oldURL, "old", "oldURL should be 'old'"); 326 is(e.newURL, "new", "newURL should be 'new'"); 327 document.dispatchEvent(e); 328 is(receivedEvent, e, "Wrong event!"); 329 330 e = new HashChangeEvent("hello", 331 { bubbles: true, cancelable: true, newURL: "new" }); 332 is(e.type, "hello", "Wrong event type!"); 333 ok(!e.isTrusted, "Event shouldn't be trusted!"); 334 ok(e.bubbles, "Event should bubble!"); 335 ok(e.cancelable, "Event should be cancelable!"); 336 is(e.oldURL, "", "oldURL should be ''"); 337 is(e.newURL, "new", "newURL should be 'new'"); 338 document.dispatchEvent(e); 339 is(receivedEvent, e, "Wrong event!"); 340 341 // InputEvent 342 343 e = new InputEvent("hello"); 344 is(e.type, "hello", "Wrong event type!"); 345 ok(!e.isTrusted, "Event shouldn't be trusted!"); 346 ok(!e.bubbles, "Event shouldn't bubble!"); 347 ok(!e.cancelable, "Event shouldn't be cancelable!"); 348 is(e.detail, 0, "detail should be 0"); 349 ok(!e.isComposing, "isComposing should be false"); 350 351 e = new InputEvent("hi!", { bubbles: true, detail: 5, isComposing: false }); 352 is(e.type, "hi!", "Wrong event type!"); 353 ok(!e.isTrusted, "Event shouldn't be trusted!"); 354 ok(e.bubbles, "Event should bubble!"); 355 ok(!e.cancelable, "Event shouldn't be cancelable!"); 356 is(e.detail, 5, "detail should be 5"); 357 ok(!e.isComposing, "isComposing should be false"); 358 359 e = new InputEvent("hi!", { cancelable: true, detail: 0, isComposing: true }); 360 is(e.type, "hi!", "Wrong event type!"); 361 ok(!e.isTrusted, "Event shouldn't be trusted!"); 362 ok(!e.bubbles, "Event shouldn't bubble!"); 363 ok(e.cancelable, "Event should be cancelable!"); 364 is(e.detail, 0, "detail should be 0"); 365 ok(e.isComposing, "isComposing should be true"); 366 367 // KeyboardEvent 368 369 try { 370 e = new KeyboardEvent(); 371 } catch(exp) { 372 ex = true; 373 } 374 ok(ex, "KeyboardEvent: First parameter is required!"); 375 ex = false; 376 377 e = new KeyboardEvent("hello"); 378 is(e.type, "hello", "KeyboardEvent: Wrong event type!"); 379 ok(!e.isTrusted, "KeyboardEvent: Event shouldn't be trusted!"); 380 ok(!e.bubbles, "KeyboardEvent: Event shouldn't bubble!"); 381 ok(!e.cancelable, "KeyboardEvent: Event shouldn't be cancelable!"); 382 document.dispatchEvent(e); 383 is(receivedEvent, e, "KeyboardEvent: Wrong event!"); 384 385 var keyboardEventProps = 386 [ 387 { bubbles: false }, 388 { cancelable: false }, 389 { view: null }, 390 { detail: 0 }, 391 { key: "" }, 392 { code: "" }, 393 { location: 0 }, 394 { ctrlKey: false }, 395 { shiftKey: false }, 396 { altKey: false }, 397 { metaKey: false }, 398 { modifierAltGraph: false }, 399 { modifierCapsLock: false }, 400 { modifierFn: false }, 401 { modifierFnLock: false }, 402 { modifierNumLock: false }, 403 { modifierScrollLock: false }, 404 { modifierSymbol: false }, 405 { modifierSymbolLock: false }, 406 { repeat: false }, 407 { isComposing: false }, 408 { charCode: 0 }, 409 { keyCode: 0 }, 410 { which: 0 }, 411 ]; 412 413 var testKeyboardProps = 414 [ 415 { bubbles: true }, 416 { cancelable: true }, 417 { view: window }, 418 { detail: 1 }, 419 { key: "CustomKey" }, 420 { code: "CustomCode" }, 421 { location: 1 }, 422 { ctrlKey: true }, 423 { shiftKey: true }, 424 { altKey: true }, 425 { metaKey: true }, 426 { modifierAltGraph: true }, 427 { modifierCapsLock: true }, 428 { modifierFn: true }, 429 { modifierFnLock: true }, 430 { modifierNumLock: true }, 431 { modifierScrollLock: true }, 432 { modifierSymbol: true }, 433 { modifierSymbolLock: true }, 434 { repeat: true }, 435 { isComposing: true }, 436 { charCode: 2 }, 437 { keyCode: 3 }, 438 { which: 4 }, 439 { charCode: 5, which: 6 }, 440 { keyCode: 7, which: 8 }, 441 { keyCode: 9, charCode: 10 }, 442 { keyCode: 11, charCode: 12, which: 13 }, 443 ]; 444 445 var defaultKeyboardEventValues = {}; 446 for (var i = 0; i < keyboardEventProps.length; ++i) { 447 for (prop in keyboardEventProps[i]) { 448 if (!isMethodResultInitializer(prop)) { 449 ok(prop in e, "keyboardEvent: KeyboardEvent doesn't have property " + prop + "!"); 450 } 451 defaultKeyboardEventValues[prop] = keyboardEventProps[i][prop]; 452 } 453 } 454 455 while (testKeyboardProps.length) { 456 var p = testKeyboardProps.shift(); 457 e = new KeyboardEvent("foo", p); 458 for (var def in defaultKeyboardEventValues) { 459 if (!(def in p)) { 460 is(getPropValue(e, def), defaultKeyboardEventValues[def], 461 "KeyboardEvent: Wrong default value for " + def + "!"); 462 } else { 463 is(getPropValue(e, def), p[def], 464 "KeyboardEvent: Wrong event init value for " + def + "!"); 465 } 466 } 467 } 468 469 // PageTransitionEvent 470 471 try { 472 e = new PageTransitionEvent(); 473 } catch(exp) { 474 ex = true; 475 } 476 ok(ex, "First parameter is required!"); 477 ex = false; 478 479 e = new PageTransitionEvent("hello"); 480 is(e.type, "hello", "Wrong event type!"); 481 ok(!e.isTrusted, "Event shouldn't be trusted!"); 482 ok(!e.bubbles, "Event shouldn't bubble!"); 483 ok(!e.cancelable, "Event shouldn't be cancelable!"); 484 is(e.persisted, false, "persisted should be false"); 485 document.dispatchEvent(e); 486 is(receivedEvent, e, "Wrong event!"); 487 488 e = new PageTransitionEvent("hello", 489 { bubbles: true, cancelable: true, persisted: true}); 490 is(e.type, "hello", "Wrong event type!"); 491 ok(!e.isTrusted, "Event shouldn't be trusted!"); 492 ok(e.bubbles, "Event should bubble!"); 493 ok(e.cancelable, "Event should be cancelable!"); 494 is(e.persisted, true, "persisted should be true"); 495 document.dispatchEvent(e); 496 is(receivedEvent, e, "Wrong event!"); 497 498 e = new PageTransitionEvent("hello", { persisted: true}); 499 is(e.type, "hello", "Wrong event type!"); 500 ok(!e.isTrusted, "Event shouldn't be trusted!"); 501 ok(!e.bubbles, "Event shouldn't bubble!"); 502 ok(!e.cancelable, "Event shouldn't be cancelable!"); 503 is(e.persisted, true, "persisted should be true"); 504 document.dispatchEvent(e); 505 is(receivedEvent, e, "Wrong event!"); 506 507 // PopStateEvent 508 509 try { 510 e = new PopStateEvent(); 511 } catch(exp) { 512 ex = true; 513 } 514 ok(ex, "First parameter is required!"); 515 ex = false; 516 517 e = new PopStateEvent("hello"); 518 is(e.type, "hello", "Wrong event type!"); 519 ok(!e.isTrusted, "Event shouldn't be trusted!"); 520 ok(!e.bubbles, "Event shouldn't bubble!"); 521 ok(!e.cancelable, "Event shouldn't be cancelable!"); 522 is(e.state, null, "persisted should be null"); 523 document.dispatchEvent(e); 524 is(receivedEvent, e, "Wrong event!"); 525 526 e = new PopStateEvent("hello", 527 { bubbles: true, cancelable: true, state: window}); 528 is(e.type, "hello", "Wrong event type!"); 529 ok(!e.isTrusted, "Event shouldn't be trusted!"); 530 ok(e.bubbles, "Event should bubble!"); 531 ok(e.cancelable, "Event should be cancelable!"); 532 is(e.state, window, "persisted should be window"); 533 document.dispatchEvent(e); 534 is(receivedEvent, e, "Wrong event!"); 535 536 537 e = new PopStateEvent("hello", { state: window}); 538 is(e.type, "hello", "Wrong event type!"); 539 ok(!e.isTrusted, "Event shouldn't be trusted!"); 540 ok(!e.bubbles, "Event shouldn't bubble!"); 541 ok(!e.cancelable, "Event shouldn't be cancelable!"); 542 is(e.state, window, "persisted should be window"); 543 document.dispatchEvent(e); 544 is(receivedEvent, e, "Wrong event!"); 545 546 // UIEvent 547 548 try { 549 e = new UIEvent(); 550 } catch(exp) { 551 ex = true; 552 } 553 ok(ex, "First parameter is required!"); 554 ex = false; 555 556 try { 557 e = new UIEvent("foo", { view: {} }); 558 e.view.onunload; 559 } catch(exp) { 560 ex = true; 561 } 562 ok(ex, "{} isn't a valid value."); 563 ex = false; 564 565 try { 566 e = new UIEvent("foo", { view: null }); 567 } catch(exp) { 568 ex = true; 569 } 570 ok(!ex, "null is a valid value."); 571 is(e.view, null); 572 ex = false; 573 574 e = new UIEvent("hello"); 575 is(e.type, "hello", "Wrong event type!"); 576 ok(!e.isTrusted, "Event shouldn't be trusted!"); 577 ok(!e.bubbles, "Event shouldn't bubble!"); 578 ok(!e.cancelable, "Event shouldn't be cancelable!"); 579 is(e.detail, 0, "detail should be 0"); 580 is(e.view, null, "view should be null"); 581 document.dispatchEvent(e); 582 is(receivedEvent, e, "Wrong event!"); 583 584 e = new UIEvent("hello", 585 { bubbles: true, cancelable: true, view: window, detail: 1}); 586 is(e.type, "hello", "Wrong event type!"); 587 ok(!e.isTrusted, "Event shouldn't be trusted!"); 588 ok(e.bubbles, "Event should bubble!"); 589 ok(e.cancelable, "Event should be cancelable!"); 590 is(e.detail, 1, "detail should be 1"); 591 is(e.view, window, "view should be window"); 592 document.dispatchEvent(e); 593 is(receivedEvent, e, "Wrong event!"); 594 595 // StorageEvent 596 597 e = document.createEvent("StorageEvent"); 598 ok(e, "Should have created an event!"); 599 600 try { 601 e = new StorageEvent(); 602 } catch(exp) { 603 ex = true; 604 } 605 ok(ex, "First parameter is required!"); 606 ex = false; 607 608 e = new StorageEvent("hello"); 609 is(e.type, "hello", "Wrong event type!"); 610 ok(!e.isTrusted, "Event shouldn't be trusted!"); 611 ok(!e.bubbles, "Event shouldn't bubble!"); 612 ok(!e.cancelable, "Event shouldn't be cancelable!"); 613 is(e.key, null, "key should be null"); 614 is(e.oldValue, null, "oldValue should be null"); 615 is(e.newValue, null, "newValue should be null"); 616 is(e.url, "", "url should be ''"); 617 document.dispatchEvent(e); 618 is(receivedEvent, e, "Wrong event!"); 619 620 e = new StorageEvent("hello", 621 { bubbles: true, cancelable: true, key: "key", 622 oldValue: "oldValue", newValue: "newValue", url: "url", 623 storageArea: localStorage }); 624 is(e.type, "hello", "Wrong event type!"); 625 ok(!e.isTrusted, "Event shouldn't be trusted!"); 626 ok(e.bubbles, "Event should bubble!"); 627 ok(e.cancelable, "Event should be cancelable!"); 628 is(e.key, "key", "Wrong value"); 629 is(e.oldValue, "oldValue", "Wrong value"); 630 is(e.newValue, "newValue", "Wrong value"); 631 is(e.url, "url", "Wrong value"); 632 is(e.storageArea, localStorage, "Wrong value"); 633 document.dispatchEvent(e); 634 is(receivedEvent, e, "Wrong event!"); 635 636 // MouseEvent 637 638 try { 639 e = new MouseEvent(); 640 } catch(exp) { 641 ex = true; 642 } 643 ok(ex, "MouseEvent: First parameter is required!"); 644 ex = false; 645 646 e = new MouseEvent("hello", { buttons: 1, movementX: 2, movementY: 3}); 647 is(e.type, "hello", "MouseEvent: Wrong event type!"); 648 ok(!e.isTrusted, "MouseEvent: Event shouldn't be trusted!"); 649 ok(!e.bubbles, "MouseEvent: Event shouldn't bubble!"); 650 ok(!e.cancelable, "MouseEvent: Event shouldn't be cancelable!"); 651 is(e.buttons, 1); 652 is(e.movementX, 2); 653 is(e.movementY, 3); 654 document.dispatchEvent(e); 655 is(receivedEvent, e, "MouseEvent: Wrong event!"); 656 657 var mouseEventProps = 658 [ { screenX: 0 }, 659 { screenY: 0 }, 660 { clientX: 0 }, 661 { clientY: 0 }, 662 { ctrlKey: false }, 663 { shiftKey: false }, 664 { altKey: false }, 665 { metaKey: false }, 666 { modifierAltGraph: false }, 667 { modifierCapsLock: false }, 668 { modifierFn: false }, 669 { modifierFnLock: false }, 670 { modifierNumLock: false }, 671 { modifierScrollLock: false }, 672 { modifierSymbol: false }, 673 { modifierSymbolLock: false }, 674 { button: 0 }, 675 { buttons: 0 }, 676 { relatedTarget: null }, 677 ]; 678 679 var testProps = 680 [ 681 { screenX: 1 }, 682 { screenY: 2 }, 683 { clientX: 3 }, 684 { clientY: 4 }, 685 { ctrlKey: true }, 686 { shiftKey: true }, 687 { altKey: true }, 688 { metaKey: true }, 689 { modifierAltGraph: true }, 690 { modifierCapsLock: true }, 691 { modifierFn: true }, 692 { modifierFnLock: true }, 693 { modifierNumLock: true }, 694 { modifierScrollLock: true }, 695 { modifierSymbol: true }, 696 { modifierSymbolLock: true }, 697 { button: 5 }, 698 { buttons: 6 }, 699 { relatedTarget: window } 700 ]; 701 702 var defaultMouseEventValues = {}; 703 for (var i = 0; i < mouseEventProps.length; ++i) { 704 for (prop in mouseEventProps[i]) { 705 if (!isMethodResultInitializer(prop)) { 706 ok(prop in e, "MouseEvent: MouseEvent doesn't have property " + prop + "!"); 707 } 708 defaultMouseEventValues[prop] = mouseEventProps[i][prop]; 709 } 710 } 711 712 while (testProps.length) { 713 var p = testProps.shift(); 714 e = new MouseEvent("foo", p); 715 for (var def in defaultMouseEventValues) { 716 if (!(def in p)) { 717 is(getPropValue(e, def), defaultMouseEventValues[def], 718 "MouseEvent: Wrong default value for " + def + "!"); 719 } else { 720 is(getPropValue(e, def), p[def], "MouseEvent: Wrong event init value for " + def + "!"); 721 } 722 } 723 } 724 725 // PopupBlockedEvent 726 727 try { 728 e = new PopupBlockedEvent(); 729 } catch(exp) { 730 ex = true; 731 } 732 ok(ex, "PopupBlockedEvent: First parameter is required!"); 733 ex = false; 734 735 e = new PopupBlockedEvent("hello"); 736 is(e.type, "hello", "PopupBlockedEvent: Wrong event type!"); 737 ok(!e.isTrusted, "PopupBlockedEvent: Event shouldn't be trusted!"); 738 ok(!e.bubbles, "PopupBlockedEvent: Event shouldn't bubble!"); 739 ok(!e.cancelable, "PopupBlockedEvent: Event shouldn't be cancelable!"); 740 document.dispatchEvent(e); 741 is(receivedEvent, e, "PopupBlockedEvent: Wrong event!"); 742 743 e = new PopupBlockedEvent("hello", 744 { requestingWindow: window, 745 popupWindowFeatures: "features", 746 popupWindowName: "name" 747 }); 748 is(e.requestingWindow, window); 749 is(e.popupWindowFeatures, "features"); 750 is(e.popupWindowName, "name"); 751 752 // WheelEvent 753 754 try { 755 e = new WheelEvent(); 756 } catch(exp) { 757 ex = true; 758 } 759 ok(ex, "WheelEvent: First parameter is required!"); 760 ex = false; 761 762 e = new WheelEvent("hello", { buttons: 1, movementX: 2, movementY: 3}); 763 is(e.type, "hello", "WheelEvent: Wrong event type!"); 764 is(e.buttons, 1); 765 is(e.movementX, 2); 766 is(e.movementY, 3); 767 ok(!e.isTrusted, "WheelEvent: Event shouldn't be trusted!"); 768 ok(!e.bubbles, "WheelEvent: Event shouldn't bubble!"); 769 ok(!e.cancelable, "WheelEvent: Event shouldn't be cancelable!"); 770 document.dispatchEvent(e); 771 is(receivedEvent, e, "WheelEvent: Wrong event!"); 772 773 var wheelEventProps = 774 [ { screenX: 0 }, 775 { screenY: 0 }, 776 { clientX: 0 }, 777 { clientY: 0 }, 778 { ctrlKey: false }, 779 { shiftKey: false }, 780 { altKey: false }, 781 { metaKey: false }, 782 { modifierAltGraph: false }, 783 { modifierCapsLock: false }, 784 { modifierFn: false }, 785 { modifierFnLock: false }, 786 { modifierNumLock: false }, 787 { modifierScrollLock: false }, 788 { modifierSymbol: false }, 789 { modifierSymbolLock: false }, 790 { button: 0 }, 791 { buttons: 0 }, 792 { relatedTarget: null }, 793 { deltaX: 0.0 }, 794 { deltaY: 0.0 }, 795 { deltaZ: 0.0 }, 796 { deltaMode: 0 } 797 ]; 798 799 var testWheelProps = 800 [ 801 { screenX: 1 }, 802 { screenY: 2 }, 803 { clientX: 3 }, 804 { clientY: 4 }, 805 { ctrlKey: true }, 806 { shiftKey: true }, 807 { altKey: true }, 808 { metaKey: true }, 809 { modifierAltGraph: true }, 810 { modifierCapsLock: true }, 811 { modifierFn: true }, 812 { modifierFnLock: true }, 813 { modifierNumLock: true }, 814 { modifierScrollLock: true }, 815 { modifierSymbol: true }, 816 { modifierSymbolLock: true }, 817 { button: 5 }, 818 { buttons: 6 }, 819 { relatedTarget: window }, 820 { deltaX: 7.8 }, 821 { deltaY: 9.1 }, 822 { deltaZ: 2.3 }, 823 { deltaMode: 4 } 824 ]; 825 826 var defaultWheelEventValues = {}; 827 for (var i = 0; i < wheelEventProps.length; ++i) { 828 for (prop in wheelEventProps[i]) { 829 if (!isMethodResultInitializer(prop)) { 830 ok(prop in e, "WheelEvent: WheelEvent doesn't have property " + prop + "!"); 831 } 832 defaultWheelEventValues[prop] = wheelEventProps[i][prop]; 833 } 834 } 835 836 while (testWheelProps.length) { 837 var p = testWheelProps.shift(); 838 e = new WheelEvent("foo", p); 839 for (var def in defaultWheelEventValues) { 840 if (!(def in p)) { 841 is(getPropValue(e, def), defaultWheelEventValues[def], 842 "WheelEvent: Wrong default value for " + def + "!"); 843 } else { 844 is(getPropValue(e, def), p[def], "WheelEvent: Wrong event init value for " + def + "!"); 845 } 846 } 847 } 848 849 // DragEvent 850 851 try { 852 e = new DragEvent(); 853 } catch(exp) { 854 ex = true; 855 } 856 ok(ex, "DragEvent: First parameter is required!"); 857 ex = false; 858 859 e = new DragEvent("hello", { buttons: 1, movementX: 2, movementY: 3}); 860 is(e.type, "hello", "DragEvent: Wrong event type!"); 861 is(e.buttons, 1); 862 is(e.movementX, 2); 863 is(e.movementY, 3); 864 document.dispatchEvent(e); 865 is(receivedEvent, e, "DragEvent: Wrong event!"); 866 867 // TransitionEvent 868 e = new TransitionEvent("hello", { propertyName: "color", elapsedTime: 3.5, pseudoElement: "", foobar: "baz" }) 869 is("propertyName" in e, true, "Transition events have propertyName property"); 870 is("foobar" in e, false, "Transition events do not copy random properties from event init"); 871 is(e.propertyName, "color", "Transition event copies propertyName from TransitionEventInit"); 872 is(e.elapsedTime, 3.5, "Transition event copies elapsedTime from TransitionEventInit"); 873 is(e.pseudoElement, "", "Transition event copies pseudoElement from TransitionEventInit"); 874 is(e.bubbles, false, "Lack of bubbles property in TransitionEventInit"); 875 is(e.cancelable, false, "Lack of cancelable property in TransitionEventInit"); 876 is(e.type, "hello", "Wrong event type!"); 877 is(e.isTrusted, false, "Event shouldn't be trusted!"); 878 is(e.eventPhase, Event.NONE, "Wrong event phase"); 879 880 // AnimationEvent 881 e = new AnimationEvent("hello", { animationName: "bounce3", elapsedTime: 3.5, pseudoElement: "", foobar: "baz" }) 882 is("animationName" in e, true, "Animation events have animationName property"); 883 is("foobar" in e, false, "Animation events do not copy random properties from event init"); 884 is(e.animationName, "bounce3", "Animation event copies animationName from AnimationEventInit"); 885 is(e.elapsedTime, 3.5, "Animation event copies elapsedTime from AnimationEventInit"); 886 is(e.pseudoElement, "", "Animation event copies pseudoElement from AnimationEventInit"); 887 is(e.bubbles, false, "Lack of bubbles property in AnimationEventInit"); 888 is(e.cancelable, false, "Lack of cancelable property in AnimationEventInit"); 889 is(e.type, "hello", "Wrong event type!"); 890 is(e.isTrusted, false, "Event shouldn't be trusted!"); 891 is(e.eventPhase, Event.NONE, "Wrong event phase"); 892 893 // InputEvent 894 let dataTransfer = new DataTransfer(); 895 dataTransfer.setData("text/plain", "foo"); 896 e = new InputEvent("hello", {data: "something data", dataTransfer, inputType: "invalid input type", isComposing: true}); 897 is(e.type, "hello", "InputEvent should set type attribute"); 898 is(e.data, "something data", "InputEvent should have data attribute"); 899 is(e.dataTransfer, dataTransfer, "InputEvent should have the dataTransfer"); 900 is(e.dataTransfer.getData("text/plain"), "foo", "InputEvent.dataTransfer should keep handling its data"); 901 try { 902 e.dataTransfer.setData("text/plain", "bar"); 903 } catch (exp) { 904 ok(false, `InputEvent.dataTransfer.setData("text/plain", "bar") shouldn't fail (${exp})`); 905 } 906 is(e.dataTransfer.getData("text/plain"), "bar", "InputEvent.dataTransfer should be modified by a call of its setData()"); 907 is(e.inputType, "invalid input type", "InputEvent should have inputType attribute"); 908 is(e.isComposing, true, "InputEvent should have isComposing attribute"); 909 910 dataTransfer = new DataTransfer(); 911 e = new InputEvent("hello", {data: "", dataTransfer, inputType: "insertText"}); 912 is(e.data, "", "InputEvent.data should be empty string when empty string is specified explicitly"); 913 is(e.dataTransfer, dataTransfer, "InputEvent.dataTransfer should have the empty dataTransfer"); 914 is(e.inputType, "insertText", "InputEvent.inputType should return valid inputType from EditorInputType enum"); 915 e = new InputEvent("hello", {data: "foo", inputType: "deleteWordBackward"}); 916 is(e.data, "foo", "InputEvent.data should be the specified string"); 917 is(e.inputType, "deleteWordBackward", "InputEvent.inputType should return valid inputType from EditorInputType enum"); 918 e = new InputEvent("hello", {inputType: "formatFontName"}); 919 is(e.inputType, "formatFontName", "InputEvent.inputType should return valid inputType from EditorInputType enum"); 920 921 e = new InputEvent("input", {}); 922 is(e.data, null, "InputEvent.data should be null in default"); 923 is(e.dataTransfer, null, "InputEvent.dataTransfer should be null in default"); 924 is(e.inputType, "", "InputEvent.inputType should be empty string in default"); 925 is(e.isComposing, false, "InputEvent.isComposing should be false in default"); 926 927 // TextEvent 928 if (SpecialPowers.getBoolPref("dom.events.textevent.enabled")) { 929 try { 930 e = new TextEvent(); 931 ok(false, "TextEvent should not have constructor"); 932 } catch (exp) { 933 ok(true, "TextEvent does not have a constructor"); 934 } 935 try { 936 e = new TextEvent("foo"); 937 ok(false, "TextEvent should not have constructor"); 938 } catch (exp) { 939 ok(true, "TextEvent does not have a constructor taking a event type"); 940 } 941 try { 942 e = new TextEvent("foo", {}); 943 ok(false, "TextEvent should not have constructor"); 944 } catch (exp) { 945 ok(true, "TextEvent does not have a constructor taking event type and a dictionary"); 946 } 947 } 948 949 </script> 950 </pre> 951 </body> 952 </html>