tests.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. var assert = require("chai").assert;
  2. var ForkStream = require("../");
  3. describe("fork-stream", function() {
  4. it("should split objects into their correct streams", function(done) {
  5. var fork = new ForkStream({
  6. classifier: function classify(e, done) {
  7. return done(null, e >= 5);
  8. },
  9. });
  10. var expectedA = [5, 7, 9],
  11. expectedB = [1, 4, 3, 1];
  12. var actualA = [],
  13. actualB = [];
  14. fork.a.on("data", function(e) {
  15. actualA.push(e);
  16. });
  17. fork.b.on("data", function(e) {
  18. actualB.push(e);
  19. });
  20. fork.on("finish", function() {
  21. assert.deepEqual(expectedA, actualA);
  22. assert.deepEqual(expectedB, actualB);
  23. return done();
  24. });
  25. [1, 5, 7, 4, 9, 3, 1].forEach(function(n) {
  26. fork.write(n);
  27. });
  28. fork.end();
  29. });
  30. it("should respect backpressure", function(done) {
  31. var fork = new ForkStream({
  32. highWaterMark: 2,
  33. classifier: function classify(e, done) {
  34. return done(null, e >= 5);
  35. },
  36. });
  37. var expected = [5, 7],
  38. actual = [];
  39. fork.a.on("data", function(e) {
  40. actual.push(e);
  41. });
  42. var timeout = setTimeout(function() {
  43. assert.deepEqual(expected, actual);
  44. return done();
  45. }, 10);
  46. fork.on("finish", function() {
  47. clearTimeout(timeout);
  48. return done(Error("should not finish"));
  49. });
  50. [1, 5, 7, 4, 9, 3, 1].forEach(function(n) {
  51. fork.write(n);
  52. });
  53. fork.end();
  54. });
  55. it("should end the outputs when the input finishes", function(done) {
  56. var fork = new ForkStream();
  57. var count = 0;
  58. var onEnd = function onEnd() {
  59. if (++count === 2) {
  60. return done();
  61. }
  62. };
  63. fork.a.on("end", onEnd)
  64. fork.b.on("end", onEnd);
  65. // start "flowing" mode
  66. fork.a.resume();
  67. fork.b.resume();
  68. fork.end();
  69. });
  70. });