Index: third_party/WebKit/LayoutTests/imported/web-platform-tests/dom/events/EventTarget-dispatchEvent.html |
diff --git a/third_party/WebKit/LayoutTests/imported/web-platform-tests/dom/events/EventTarget-dispatchEvent.html b/third_party/WebKit/LayoutTests/imported/web-platform-tests/dom/events/EventTarget-dispatchEvent.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d677c0b8575038b97b673baa5b7eb6d7a9706bfd |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/imported/web-platform-tests/dom/events/EventTarget-dispatchEvent.html |
@@ -0,0 +1,104 @@ |
+<!DOCTYPE html> |
+<meta charset=utf-8> |
+<title>EventTarget.dispatchEvent</title> |
+<link rel="author" title="Olli Pettay" href="mailto:Olli.Pettay@gmail.com"> |
+<link rel="author" title="Ms2ger" href="mailto:Ms2ger@gmail.com"> |
+<link rel="help" href="https://dom.spec.whatwg.org/#dom-eventtarget-dispatchevent"> |
+<script src="../../../../resources/testharness.js"></script> |
+<script src="../../../../resources/testharnessreport.js"></script> |
+<script src="/dom/nodes/Document-createEvent.js"></script> |
+<div id="log"></div> |
+<script> |
+setup({ |
+ "allow_uncaught_exception": true, |
+}) |
+ |
+test(function() { |
+ assert_throws(new TypeError(), function() { document.dispatchEvent(null) }) |
+}, "Calling dispatchEvent(null).") |
+ |
+aliases.forEach(function(alias) { |
+ test(function() { |
+ var e = document.createEvent(alias[0]) |
+ assert_equals(e.type, "", "Event type should be empty string before initialization") |
+ assert_throws("InvalidStateError", function() { document.dispatchEvent(e) }) |
+ }, "If the event's initialized flag is not set, an InvalidStateError must be thrown (" + alias [0] + ").") |
+}) |
+ |
+var dispatch_dispatch = async_test("If the event's dispatch flag is set, an InvalidStateError must be thrown.") |
+dispatch_dispatch.step(function() { |
+ var e = document.createEvent("Event") |
+ e.initEvent("type", false, false) |
+ |
+ var target = document.createElement("div") |
+ target.addEventListener("type", dispatch_dispatch.step_func(function() { |
+ assert_throws("InvalidStateError", function() { |
+ target.dispatchEvent(e) |
+ }) |
+ assert_throws("InvalidStateError", function() { |
+ document.dispatchEvent(e) |
+ }) |
+ }), false) |
+ |
+ assert_equals(target.dispatchEvent(e), true, "dispatchEvent must return true") |
+ |
+ dispatch_dispatch.done() |
+}) |
+ |
+test(function() { |
+ // https://www.w3.org/Bugs/Public/show_bug.cgi?id=17713 |
+ // https://www.w3.org/Bugs/Public/show_bug.cgi?id=17714 |
+ |
+ var e = document.createEvent("Event") |
+ e.initEvent("type", false, false) |
+ |
+ var called = [] |
+ |
+ var target = document.createElement("div") |
+ target.addEventListener("type", function() { |
+ called.push("First") |
+ throw new Error() |
+ }, false) |
+ |
+ target.addEventListener("type", function() { |
+ called.push("Second") |
+ }, false) |
+ |
+ assert_equals(target.dispatchEvent(e), true, "dispatchEvent must return true") |
+ assert_array_equals(called, ["First", "Second"], |
+ "Should have continued to call other event listeners") |
+}, "Exceptions from event listeners must not be propagated.") |
+ |
+async_test(function() { |
+ var results = [] |
+ var outerb = document.createElement("b") |
+ var middleb = outerb.appendChild(document.createElement("b")) |
+ var innerb = middleb.appendChild(document.createElement("b")) |
+ outerb.addEventListener("x", this.step_func(function() { |
+ middleb.addEventListener("x", this.step_func(function() { |
+ results.push("middle") |
+ }), true) |
+ results.push("outer") |
+ }), true) |
+ innerb.dispatchEvent(new Event("x")) |
+ assert_array_equals(results, ["outer", "middle"]) |
+ this.done() |
+}, "Event listeners added during dispatch should be called"); |
+ |
+async_test(function() { |
+ var results = [] |
+ var b = document.createElement("b") |
+ b.addEventListener("x", this.step_func(function() { |
+ results.push(1) |
+ }), true) |
+ b.addEventListener("x", this.step_func(function() { |
+ results.push(2) |
+ }), false) |
+ b.addEventListener("x", this.step_func(function() { |
+ results.push(3) |
+ }), true) |
+ b.dispatchEvent(new Event("x")) |
+ assert_array_equals(results, [1, 2, 3]) |
+ this.done() |
+}, "Event listeners should be called in order of addition") |
+</script> |