Mirror: 🎩 A tiny but capable push & pull stream library for TypeScript and Flow
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge pull request #11 from parkerziegler/test/add-switchMap-tests

Add tests for switchMap.

authored by

Phil Plückthun and committed by
GitHub
f2b4a6dc 9ded31eb

+80
+80
__tests__/wonka_test.re
··· 1218 1218 expect(res) |> toEqual([| Push(1), Push(2), Push(1), Push(2), End |]); 1219 1219 }); 1220 1220 }); 1221 + 1222 + describe("switchMap", () => { 1223 + afterEach(() => Jest.useRealTimers()); 1224 + 1225 + open Expect; 1226 + open! Expect.Operators; 1227 + 1228 + it("maps from a source and switches to a new source", () => { 1229 + let a = Wonka.fromList([1, 2, 3]); 1230 + 1231 + let talkback = ref((. _: Wonka_types.talkbackT) => ()); 1232 + let signals = [||]; 1233 + let source = Wonka.switchMap((.x) => Wonka.fromList([x * x]), a); 1234 + 1235 + source((.signal) => 1236 + switch (signal) { 1237 + | Start(x) => 1238 + talkback := x; 1239 + x(.Pull); 1240 + | Push(_) => 1241 + ignore(Js.Array.push(signal, signals)); 1242 + talkback^(.Pull); 1243 + | End => ignore(Js.Array.push(signal, signals)) 1244 + } 1245 + ); 1246 + 1247 + expect(signals) == [|Push(1), Push(4), Push(9), End|]; 1248 + }); 1249 + 1250 + it("unsubscribes from previous subscriptions", () => { 1251 + Jest.useFakeTimers(); 1252 + 1253 + let a = Wonka.interval(100); 1254 + 1255 + let talkback = ref((._: Wonka_types.talkbackT) => ()); 1256 + let signals = [||]; 1257 + let source = 1258 + Wonka.switchMap((._) => Wonka.interval(25), a) |> Wonka.take(5); 1259 + 1260 + source((.signal) => 1261 + switch (signal) { 1262 + | Start(x) => 1263 + talkback := x; 1264 + x(.Pull); 1265 + | Push(_) => 1266 + ignore(Js.Array.push(signal, signals)); 1267 + talkback^(.Pull); 1268 + | End => ignore(Js.Array.push(signal, signals)) 1269 + } 1270 + ); 1271 + 1272 + Jest.runTimersToTime(300); 1273 + 1274 + expect(signals) 1275 + == [|Push(0), Push(1), Push(2), Push(0), Push(1), End|]; 1276 + }); 1277 + 1278 + testPromise("follows the spec for listenables", () => 1279 + Wonka_thelpers.testWithListenable(source => 1280 + Wonka.switchMap((.x) => x, Wonka.fromList([source])) 1281 + ) 1282 + |> Js.Promise.then_(x => 1283 + expect(x) 1284 + |> toEqual(([|Pull, Pull, Pull|], [|Push(1), Push(2), End|])) 1285 + |> Js.Promise.resolve 1286 + ) 1287 + ); 1288 + 1289 + testPromise( 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])) 1293 + ) 1294 + |> Js.Promise.then_(x => 1295 + expect(x) 1296 + |> toEqual(([|Pull, Pull, Close|], [|Push(1)|])) 1297 + |> Js.Promise.resolve 1298 + ) 1299 + ); 1300 + }); 1221 1301 }); 1222 1302 1223 1303 describe("sink factories", () => {