observable-event-target.any.js (2306B)
1 test(() => { 2 const target = new EventTarget(); 3 assert_implements(target.when, "The EventTarget interface has an `when` method"); 4 assert_equals(typeof target.when, "function", 5 "EventTarget should have the when method"); 6 7 const testEvents = target.when("test"); 8 assert_true(testEvents instanceof Observable, 9 "EventTarget.when() returns an Observable"); 10 11 const results = []; 12 testEvents.subscribe({ 13 next: value => results.push(value), 14 error: () => results.push("error"), 15 complete: () => results.push("complete"), 16 }); 17 18 assert_array_equals(results, [], 19 "Observable does not emit events until event is fired"); 20 21 const event = new Event("test"); 22 target.dispatchEvent(event); 23 assert_array_equals(results, [event]); 24 25 target.dispatchEvent(event); 26 assert_array_equals(results, [event, event]); 27 }, "EventTarget.when() returns an Observable"); 28 29 test(() => { 30 const target = new EventTarget(); 31 const testEvents = target.when("test"); 32 const ac = new AbortController(); 33 const results = []; 34 testEvents.subscribe({ 35 next: (value) => results.push(value), 36 error: () => results.push('error'), 37 complete: () => results.complete('complete'), 38 }, { signal: ac.signal }); 39 40 assert_array_equals(results, [], 41 "Observable does not emit events until event is fired"); 42 43 const event1 = new Event("test"); 44 const event2 = new Event("test"); 45 const event3 = new Event("test"); 46 target.dispatchEvent(event1); 47 target.dispatchEvent(event2); 48 49 assert_array_equals(results, [event1, event2]); 50 51 ac.abort(); 52 target.dispatchEvent(event3); 53 54 assert_array_equals(results, [event1, event2], 55 "Aborting the subscription removes the event listener and stops the " + 56 "emission of events"); 57 }, "Aborting the subscription should stop the emission of events"); 58 59 test(() => { 60 const target = new EventTarget(); 61 const testEvents = target.when("test"); 62 const results = []; 63 testEvents.subscribe(e => results.push(e)); 64 testEvents.subscribe(e => results.push(e)); 65 66 const event1 = new Event("test"); 67 const event2 = new Event("test"); 68 target.dispatchEvent(event1); 69 target.dispatchEvent(event2); 70 assert_array_equals(results, [event1, event1, event2, event2]); 71 }, "EventTarget Observables can multicast subscriptions for event handling");