···
expect(res) |> toEqual([| Push(1), Push(2), Push(1), Push(2), End |]);
1222
+
describe("switchMap", () => {
1223
+
afterEach(() => Jest.useRealTimers());
1226
+
open! Expect.Operators;
1228
+
it("maps from a source and switches to a new source", () => {
1229
+
let a = Wonka.fromList([1, 2, 3]);
1231
+
let talkback = ref((. _: Wonka_types.talkbackT) => ());
1232
+
let signals = [||];
1233
+
let source = Wonka.switchMap((.x) => Wonka.fromList([x * x]), a);
1235
+
source((.signal) =>
1241
+
ignore(Js.Array.push(signal, signals));
1243
+
| End => ignore(Js.Array.push(signal, signals))
1247
+
expect(signals) == [|Push(1), Push(4), Push(9), End|];
1250
+
it("unsubscribes from previous subscriptions", () => {
1251
+
Jest.useFakeTimers();
1253
+
let a = Wonka.interval(100);
1255
+
let talkback = ref((._: Wonka_types.talkbackT) => ());
1256
+
let signals = [||];
1258
+
Wonka.switchMap((._) => Wonka.interval(25), a) |> Wonka.take(5);
1260
+
source((.signal) =>
1266
+
ignore(Js.Array.push(signal, signals));
1268
+
| End => ignore(Js.Array.push(signal, signals))
1272
+
Jest.runTimersToTime(300);
1275
+
== [|Push(0), Push(1), Push(2), Push(0), Push(1), End|];
1278
+
testPromise("follows the spec for listenables", () =>
1279
+
Wonka_thelpers.testWithListenable(source =>
1280
+
Wonka.switchMap((.x) => x, Wonka.fromList([source]))
1282
+
|> Js.Promise.then_(x =>
1284
+
|> toEqual(([|Pull, Pull, Pull|], [|Push(1), Push(2), End|]))
1285
+
|> Js.Promise.resolve
1290
+
"ends itself and source when its talkback receives the End signal", () =>
1291
+
Wonka_thelpers.testTalkbackEnd(source =>
1292
+
Wonka.switchMap((.x) => x, Wonka.fromList([source]))
1294
+
|> Js.Promise.then_(x =>
1296
+
|> toEqual(([|Pull, Pull, Close|], [|Push(1)|]))
1297
+
|> Js.Promise.resolve
describe("sink factories", () => {