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 #10 from parkerziegler/task/add-subject-tests

Add basic tests for Subject.

authored by

Phil Plückthun and committed by
GitHub
4bca87d4 498b3f5f

+116
+116
__tests__/wonka_test.re
··· 1294 1294 expect(output) |> toEqual(output) 1295 1295 }); 1296 1296 }); 1297 + 1298 + describe("subject", () => { 1299 + open Expect; 1300 + open! Expect.Operators; 1301 + 1302 + it("sends values passed to .next to puller sinks", () => { 1303 + let signals = [||]; 1304 + 1305 + let subject = Wonka.makeSubject(); 1306 + 1307 + subject.source((.signal) => 1308 + switch (signal) { 1309 + | Start(_) => ignore() 1310 + | Push(_) => ignore(Js.Array.push(signal, signals)) 1311 + | End => ignore(Js.Array.push(signal, signals)) 1312 + } 1313 + ); 1314 + 1315 + subject.next(10); 1316 + subject.next(20); 1317 + subject.next(30); 1318 + subject.next(40); 1319 + subject.complete(); 1320 + 1321 + expect(signals) == [|Push(10), Push(20), Push(30), Push(40), End|]; 1322 + }); 1323 + 1324 + it("handles multiple sinks", () => { 1325 + let talkback = ref((._: Wonka_types.talkbackT) => ()); 1326 + let signalsOne = [||]; 1327 + let signalsTwo = [||]; 1328 + 1329 + let subject = Wonka.makeSubject(); 1330 + 1331 + subject.source((.signal) => 1332 + switch (signal) { 1333 + | Start(x) => talkback := x 1334 + | Push(_) => ignore(Js.Array.push(signal, signalsOne)) 1335 + | End => ignore(Js.Array.push(signal, signalsOne)) 1336 + } 1337 + ); 1338 + 1339 + subject.source((.signal) => 1340 + switch (signal) { 1341 + | Start(_) => ignore() 1342 + | Push(_) => ignore(Js.Array.push(signal, signalsTwo)) 1343 + | End => ignore(Js.Array.push(signal, signalsTwo)) 1344 + } 1345 + ); 1346 + 1347 + subject.next(10); 1348 + subject.next(20); 1349 + subject.next(30); 1350 + 1351 + talkback^(.Close); 1352 + 1353 + subject.next(40); 1354 + subject.next(50); 1355 + 1356 + subject.complete(); 1357 + 1358 + expect((signalsOne, signalsTwo)) 1359 + == ( 1360 + [|Push(10), Push(20), Push(30)|], 1361 + [|Push(10), Push(20), Push(30), Push(40), Push(50), End|], 1362 + ); 1363 + }); 1364 + 1365 + it("handles multiple sinks that subscribe and close at different times", () => { 1366 + let talkbackOne = ref((._: Wonka_types.talkbackT) => ()); 1367 + let talkbackTwo = ref((._: Wonka_types.talkbackT) => ()); 1368 + let signalsOne = [||]; 1369 + let signalsTwo = [||]; 1370 + 1371 + let subject = Wonka.makeSubject(); 1372 + 1373 + subject.next(10); 1374 + subject.next(20); 1375 + 1376 + subject.source((.signal) => 1377 + switch (signal) { 1378 + | Start(x) => talkbackOne := x 1379 + | Push(_) => ignore(Js.Array.push(signal, signalsOne)) 1380 + | End => ignore(Js.Array.push(signal, signalsOne)) 1381 + } 1382 + ); 1383 + 1384 + subject.next(30); 1385 + 1386 + subject.source((.signal) => 1387 + switch (signal) { 1388 + | Start(x) => talkbackTwo := x 1389 + | Push(_) => ignore(Js.Array.push(signal, signalsTwo)) 1390 + | End => ignore(Js.Array.push(signal, signalsTwo)) 1391 + } 1392 + ); 1393 + 1394 + subject.next(40); 1395 + subject.next(50); 1396 + 1397 + talkbackTwo^(.Close); 1398 + 1399 + subject.next(60); 1400 + 1401 + talkbackOne^(.Close); 1402 + 1403 + subject.next(70); 1404 + subject.complete(); 1405 + 1406 + expect((signalsOne, signalsTwo)) 1407 + == ( 1408 + [|Push(30), Push(40), Push(50), Push(60)|], 1409 + [|Push(40), Push(50)|], 1410 + ); 1411 + }); 1412 + });