diff options
Diffstat (limited to 'testing/web-platform/tests/dom/observable/tentative/observable-event-target.any.js')
-rw-r--r-- | testing/web-platform/tests/dom/observable/tentative/observable-event-target.any.js | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/testing/web-platform/tests/dom/observable/tentative/observable-event-target.any.js b/testing/web-platform/tests/dom/observable/tentative/observable-event-target.any.js new file mode 100644 index 0000000000..0f7ace2acc --- /dev/null +++ b/testing/web-platform/tests/dom/observable/tentative/observable-event-target.any.js @@ -0,0 +1,71 @@ +test(() => { + const target = new EventTarget(); + assert_implements(target.on, "The EventTarget interface has an `on` method"); + assert_equals(typeof target.on, "function", + "EventTarget should have the on method"); + + const testEvents = target.on("test"); + assert_true(testEvents instanceof Observable, + "EventTarget.on returns an Observable"); + + const results = []; + testEvents.subscribe({ + next: value => results.push(value), + error: () => results.push("error"), + complete: () => results.push("complete"), + }); + + assert_array_equals(results, [], + "Observable does not emit events until event is fired"); + + const event = new Event("test"); + target.dispatchEvent(event); + assert_array_equals(results, [event]); + + target.dispatchEvent(event); + assert_array_equals(results, [event, event]); +}, "EventTarget.on() returns an Observable"); + +test(() => { + const target = new EventTarget(); + const testEvents = target.on("test"); + const ac = new AbortController(); + const results = []; + testEvents.subscribe({ + next: (value) => results.push(value), + error: () => results.push('error'), + complete: () => results.complete('complete'), + }, { signal: ac.signal }); + + assert_array_equals(results, [], + "Observable does not emit events until event is fired"); + + const event1 = new Event("test"); + const event2 = new Event("test"); + const event3 = new Event("test"); + target.dispatchEvent(event1); + target.dispatchEvent(event2); + + assert_array_equals(results, [event1, event2]); + + ac.abort(); + target.dispatchEvent(event3); + + assert_array_equals(results, [event1, event2], + "Aborting the subscription removes the event listener and stops the " + + "emission of events"); +}, "Aborting the subscription should stop the emission of events"); + +test(() => { + const target = new EventTarget(); + const testEvents = target.on("test"); + const results = []; + testEvents.subscribe(e => results.push(e)); + testEvents.subscribe(e => results.push(e)); + + const event1 = new Event("test"); + const event2 = new Event("test"); + target.dispatchEvent(event1); + target.dispatchEvent(event2); + assert_array_equals(results, [event1, event1, event2, event2]); +}, "EventTarget Observables can multicast subscriptions for event handling"); |