%PDF- <> %âãÏÓ endobj 2 0 obj <> endobj 3 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 28 0 R 29 0 R] /MediaBox[ 0 0 595.5 842.25] /Contents 4 0 R/Group<>/Tabs/S>> endobj ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<> endobj 2 0 obj<>endobj 2 0 obj<>es 3 0 R>> endobj 2 0 obj<> ox[ 0.000000 0.000000 609.600000 935.600000]/Fi endobj 3 0 obj<> endobj 7 1 obj<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Subtype/Form>> stream
"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");