test-asStream.mjs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. 'use strict';
  2. import test from 'tape-six';
  3. import {streamToArray, delay} from './helpers.mjs';
  4. import {none} from '../src/defs.js';
  5. import asStream from '../src/asStream.js';
  6. test.asPromise('asStream: smoke test', (t, resolve) => {
  7. const pattern = [0, 1, true, false, {}, [], {a: 'b'}, ['c']],
  8. result = [],
  9. stream = asStream(x => x),
  10. pipeline = stream.pipe(streamToArray(result));
  11. pipeline.on('finish', () => {
  12. t.deepEqual(result, pattern);
  13. resolve();
  14. });
  15. pattern.forEach(value => stream.write(value));
  16. stream.end();
  17. });
  18. test.asPromise('asStream: function', (t, resolve) => {
  19. const pattern = [0, 1, true, false, {}, [], {a: 'b'}, ['c']],
  20. result = [],
  21. stream = asStream(x => (x ? x : none)),
  22. pipeline = stream.pipe(streamToArray(result));
  23. pipeline.on('finish', () => {
  24. t.deepEqual(
  25. result,
  26. pattern.filter(x => x)
  27. );
  28. resolve();
  29. });
  30. pattern.forEach(value => stream.write(value));
  31. stream.end();
  32. });
  33. test.asPromise('asStream: async function', (t, resolve) => {
  34. const pattern = [0, 1, true, false, {}, [], {a: 'b'}, ['c']],
  35. result = [],
  36. stream = asStream(delay(x => (x ? x : none))),
  37. pipeline = stream.pipe(streamToArray(result));
  38. pipeline.on('finish', () => {
  39. t.deepEqual(
  40. result,
  41. pattern.filter(x => x)
  42. );
  43. resolve();
  44. });
  45. pattern.forEach(value => stream.write(value));
  46. stream.end();
  47. });
  48. test.asPromise('asStream: generator', (t, resolve) => {
  49. const pattern = [1, 2, 3],
  50. result = [],
  51. stream = asStream(function* () {
  52. yield* pattern;
  53. }),
  54. pipeline = stream.pipe(streamToArray(result));
  55. pipeline.on('finish', () => {
  56. t.deepEqual(result, pattern);
  57. resolve();
  58. });
  59. stream.end(1);
  60. });
  61. test.asPromise('asStream: async generator', (t, resolve) => {
  62. const pattern = [1, 2, 3],
  63. result = [],
  64. stream = asStream(async function* () {
  65. const fn = delay(x => x);
  66. yield* pattern.map(value => fn(value));
  67. }),
  68. pipeline = stream.pipe(streamToArray(result));
  69. pipeline.on('finish', () => {
  70. t.deepEqual(result, pattern);
  71. resolve();
  72. });
  73. stream.end(1);
  74. });
  75. test('asStream: wrong argument', t => {
  76. t.throws(() => {
  77. asStream(1);
  78. t.fail("shouldn't be here");
  79. });
  80. });