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