Skip to content

Commit

Permalink
Add tests for constructible/subclassable EventTarget
Browse files Browse the repository at this point in the history
  • Loading branch information
domenic committed Jun 21, 2017
1 parent 516de1c commit 8b68607
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 1 deletion.
71 changes: 71 additions & 0 deletions dom/events/EventTarget-constructible.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>EventTarget is constructible and subclassable</title>
<meta name="author" title="Domenic Denicola" href="mailto:d@domenic.me">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>

<script>
"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 });
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");

</script>
1 change: 1 addition & 0 deletions dom/interfaces.html
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ <h1>DOM IDL tests</h1>
function doTest(idl) {
idlArray.add_idls(idl);
idlArray.add_objects({
EventTarget: ['new EventTarget()'],
Event: ['document.createEvent("Event")', 'new Event("foo")'],
CustomEvent: ['new CustomEvent("foo")'],
Document: ['new Document()'],
Expand Down
2 changes: 1 addition & 1 deletion interfaces/dom.idl
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ dictionary CustomEventInit : EventInit {
};


//[Exposed=(Window,Worker)]
[Constructor/*, Exposed=(Window,Worker)*/]
interface EventTarget {
void addEventListener(DOMString type, EventListener? callback, optional (EventListenerOptions or boolean) options);
void removeEventListener(DOMString type, EventListener? callback, optional (EventListenerOptions or boolean) options);
Expand Down

0 comments on commit 8b68607

Please sign in to comment.