···
expect(res) |> toEqual([| Push(1), Push(2), Push(1), Push(2), End |]);
+
describe("switchMap", () => {
+
afterEach(() => Jest.useRealTimers());
+
open! Expect.Operators;
+
it("maps from a source and switches to a new source", () => {
+
let a = Wonka.fromList([1, 2, 3]);
+
let talkback = ref((. _: Wonka_types.talkbackT) => ());
+
let source = Wonka.switchMap((.x) => Wonka.fromList([x * x]), a);
+
ignore(Js.Array.push(signal, signals));
+
| End => ignore(Js.Array.push(signal, signals))
+
expect(signals) == [|Push(1), Push(4), Push(9), End|];
+
it("unsubscribes from previous subscriptions", () => {
+
let a = Wonka.interval(100);
+
let talkback = ref((._: Wonka_types.talkbackT) => ());
+
Wonka.switchMap((._) => Wonka.interval(25), a) |> Wonka.take(5);
+
ignore(Js.Array.push(signal, signals));
+
| End => ignore(Js.Array.push(signal, signals))
+
Jest.runTimersToTime(300);
+
== [|Push(0), Push(1), Push(2), Push(0), Push(1), End|];
+
testPromise("follows the spec for listenables", () =>
+
Wonka_thelpers.testWithListenable(source =>
+
Wonka.switchMap((.x) => x, Wonka.fromList([source]))
+
|> Js.Promise.then_(x =>
+
|> toEqual(([|Pull, Pull, Pull|], [|Push(1), Push(2), End|]))
+
"ends itself and source when its talkback receives the End signal", () =>
+
Wonka_thelpers.testTalkbackEnd(source =>
+
Wonka.switchMap((.x) => x, Wonka.fromList([source]))
+
|> Js.Promise.then_(x =>
+
|> toEqual(([|Pull, Pull, Close|], [|Push(1)|]))
describe("sink factories", () => {