OLD | NEW |
(Empty) | |
| 1 <!DOCTYPE html> |
| 2 <meta charset=utf-8> |
| 3 <title>EventTarget.dispatchEvent</title> |
| 4 <link rel="author" title="Olli Pettay" href="mailto:Olli.Pettay@gmail.com"> |
| 5 <link rel="author" title="Ms2ger" href="mailto:Ms2ger@gmail.com"> |
| 6 <link rel="help" href="https://dom.spec.whatwg.org/#dom-eventtarget-dispatcheven
t"> |
| 7 <script src="../../../../resources/testharness.js"></script> |
| 8 <script src="../../../../resources/testharnessreport.js"></script> |
| 9 <script src="/dom/nodes/Document-createEvent.js"></script> |
| 10 <div id="log"></div> |
| 11 <script> |
| 12 setup({ |
| 13 "allow_uncaught_exception": true, |
| 14 }) |
| 15 |
| 16 test(function() { |
| 17 assert_throws(new TypeError(), function() { document.dispatchEvent(null) }) |
| 18 }, "Calling dispatchEvent(null).") |
| 19 |
| 20 aliases.forEach(function(alias) { |
| 21 test(function() { |
| 22 var e = document.createEvent(alias[0]) |
| 23 assert_equals(e.type, "", "Event type should be empty string before initiali
zation") |
| 24 assert_throws("InvalidStateError", function() { document.dispatchEvent(e) }) |
| 25 }, "If the event's initialized flag is not set, an InvalidStateError must be t
hrown (" + alias [0] + ").") |
| 26 }) |
| 27 |
| 28 var dispatch_dispatch = async_test("If the event's dispatch flag is set, an Inva
lidStateError must be thrown.") |
| 29 dispatch_dispatch.step(function() { |
| 30 var e = document.createEvent("Event") |
| 31 e.initEvent("type", false, false) |
| 32 |
| 33 var target = document.createElement("div") |
| 34 target.addEventListener("type", dispatch_dispatch.step_func(function() { |
| 35 assert_throws("InvalidStateError", function() { |
| 36 target.dispatchEvent(e) |
| 37 }) |
| 38 assert_throws("InvalidStateError", function() { |
| 39 document.dispatchEvent(e) |
| 40 }) |
| 41 }), false) |
| 42 |
| 43 assert_equals(target.dispatchEvent(e), true, "dispatchEvent must return true") |
| 44 |
| 45 dispatch_dispatch.done() |
| 46 }) |
| 47 |
| 48 test(function() { |
| 49 // https://www.w3.org/Bugs/Public/show_bug.cgi?id=17713 |
| 50 // https://www.w3.org/Bugs/Public/show_bug.cgi?id=17714 |
| 51 |
| 52 var e = document.createEvent("Event") |
| 53 e.initEvent("type", false, false) |
| 54 |
| 55 var called = [] |
| 56 |
| 57 var target = document.createElement("div") |
| 58 target.addEventListener("type", function() { |
| 59 called.push("First") |
| 60 throw new Error() |
| 61 }, false) |
| 62 |
| 63 target.addEventListener("type", function() { |
| 64 called.push("Second") |
| 65 }, false) |
| 66 |
| 67 assert_equals(target.dispatchEvent(e), true, "dispatchEvent must return true") |
| 68 assert_array_equals(called, ["First", "Second"], |
| 69 "Should have continued to call other event listeners") |
| 70 }, "Exceptions from event listeners must not be propagated.") |
| 71 |
| 72 async_test(function() { |
| 73 var results = [] |
| 74 var outerb = document.createElement("b") |
| 75 var middleb = outerb.appendChild(document.createElement("b")) |
| 76 var innerb = middleb.appendChild(document.createElement("b")) |
| 77 outerb.addEventListener("x", this.step_func(function() { |
| 78 middleb.addEventListener("x", this.step_func(function() { |
| 79 results.push("middle") |
| 80 }), true) |
| 81 results.push("outer") |
| 82 }), true) |
| 83 innerb.dispatchEvent(new Event("x")) |
| 84 assert_array_equals(results, ["outer", "middle"]) |
| 85 this.done() |
| 86 }, "Event listeners added during dispatch should be called"); |
| 87 |
| 88 async_test(function() { |
| 89 var results = [] |
| 90 var b = document.createElement("b") |
| 91 b.addEventListener("x", this.step_func(function() { |
| 92 results.push(1) |
| 93 }), true) |
| 94 b.addEventListener("x", this.step_func(function() { |
| 95 results.push(2) |
| 96 }), false) |
| 97 b.addEventListener("x", this.step_func(function() { |
| 98 results.push(3) |
| 99 }), true) |
| 100 b.dispatchEvent(new Event("x")) |
| 101 assert_array_equals(results, [1, 2, 3]) |
| 102 this.done() |
| 103 }, "Event listeners should be called in order of addition") |
| 104 </script> |
OLD | NEW |