71 lines
2.3 KiB
JavaScript
71 lines
2.3 KiB
JavaScript
test(() => {
|
|
const target = new EventTarget();
|
|
assert_implements(target.when, "The EventTarget interface has an `when` method");
|
|
assert_equals(typeof target.when, "function",
|
|
"EventTarget should have the when method");
|
|
|
|
const testEvents = target.when("test");
|
|
assert_true(testEvents instanceof Observable,
|
|
"EventTarget.when() 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.when() returns an Observable");
|
|
|
|
test(() => {
|
|
const target = new EventTarget();
|
|
const testEvents = target.when("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.when("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");
|