| "use strict"; |
| |
| test(() => { |
| const target = new EventTarget(); |
| const event = new Event("foo", { bubbles: true, cancelable: false }); |
| let callCount = 0; |
| |
| function listener(e) { |
| assert_equals(e, event); |
| ++callCount; |
| } |
| |
| target.addEventListener("foo", listener); |
| |
| target.dispatchEvent(event); |
| assert_equals(callCount, 1); |
| |
| target.dispatchEvent(event); |
| assert_equals(callCount, 2); |
| |
| target.removeEventListener("foo", listener); |
| target.dispatchEvent(event); |
| assert_equals(callCount, 2); |
| }, "A constructed EventTarget can be used as expected"); |
| |
| test(() => { |
| class NicerEventTarget extends EventTarget { |
| on(...args) { |
| this.addEventListener(...args); |
| } |
| |
| off(...args) { |
| this.removeEventListener(...args); |
| } |
| |
| dispatch(type, detail) { |
| this.dispatchEvent(new CustomEvent(type, { detail })); |
| } |
| } |
| |
| const target = new NicerEventTarget(); |
| const event = new Event("foo", { bubbles: true, cancelable: false }); |
| const detail = "some data"; |
| let callCount = 0; |
| |
| function listener(e) { |
| assert_equals(e.detail, detail); |
| ++callCount; |
| } |
| |
| target.on("foo", listener); |
| |
| target.dispatch("foo", detail); |
| assert_equals(callCount, 1); |
| |
| target.dispatch("foo", detail); |
| assert_equals(callCount, 2); |
| |
| target.off("foo", listener); |
| target.dispatch("foo", detail); |
| assert_equals(callCount, 2); |
| }, "EventTarget can be subclassed"); |
| |