Skip to content

Commit

Permalink
more updates, nextTick the removable of listeners in tests
Browse files Browse the repository at this point in the history
  • Loading branch information
phated committed Jan 14, 2016
1 parent 3a0cf5b commit 1b02a46
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 10 deletions.
26 changes: 18 additions & 8 deletions lib/sink.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,33 +11,43 @@ function hasListeners(stream) {
}

function sink(stream) {
var sinkAdded = false;
var sinkStream = new Writable({
objectMode: true,
write: function(file, enc, cb) {
cb();
},
});

function addSink() {
if (sinkAdded) {
return;
}

if (hasListeners(stream)) {
return;
}

sinkAdded = true;
stream.pipe(sinkStream);
}

function removeSink(evt) {
if (evt !== 'readable' && evt !== 'data') {
return;
}

if (hasListeners(stream)) {
stream.unpipe(sinkStream);
sinkAdded = false;
return stream.unpipe(sinkStream);
}
}

stream.on('newListener', removeSink);
stream.on('removeListener', removeSink);
stream.on('removeListener', addSink);

return function() {
if (hasListeners(stream)) {
return;
}

stream.pipe(sinkStream);
};
return addSink;
}

module.exports = sink;
8 changes: 6 additions & 2 deletions test/dest.js
Original file line number Diff line number Diff line change
Expand Up @@ -1411,7 +1411,9 @@ describe('dest stream', function() {

srcStream.pipe(countFiles).pipe(destStream);

destStream.removeListener('readable', noop);
process.nextTick(function() {
destStream.removeListener('readable', noop);
});
});

it('sinks the stream if all the data event handlers are removed', function(done) {
Expand Down Expand Up @@ -1444,7 +1446,9 @@ describe('dest stream', function() {

srcStream.pipe(countFiles).pipe(destStream);

destStream.removeListener('data', onData);
process.nextTick(function() {
destStream.removeListener('data', onData);
});
});

it('should pass options to through2', function(done) {
Expand Down

0 comments on commit 1b02a46

Please sign in to comment.