diff options
Diffstat (limited to 'deps/npm/node_modules/pumpify/test.js')
-rw-r--r-- | deps/npm/node_modules/pumpify/test.js | 235 |
1 files changed, 235 insertions, 0 deletions
diff --git a/deps/npm/node_modules/pumpify/test.js b/deps/npm/node_modules/pumpify/test.js new file mode 100644 index 0000000000..b603c4d80a --- /dev/null +++ b/deps/npm/node_modules/pumpify/test.js @@ -0,0 +1,235 @@ +var tape = require('tape') +var through = require('through2') +var pumpify = require('./') +var stream = require('stream') +var duplexify = require('duplexify') + +tape('basic', function(t) { + t.plan(3) + + var pipeline = pumpify( + through(function(data, enc, cb) { + t.same(data.toString(), 'hello') + cb(null, data.toString().toUpperCase()) + }), + through(function(data, enc, cb) { + t.same(data.toString(), 'HELLO') + cb(null, data.toString().toLowerCase()) + }) + ) + + pipeline.write('hello') + pipeline.on('data', function(data) { + t.same(data.toString(), 'hello') + t.end() + }) +}) + +tape('3 times', function(t) { + t.plan(4) + + var pipeline = pumpify( + through(function(data, enc, cb) { + t.same(data.toString(), 'hello') + cb(null, data.toString().toUpperCase()) + }), + through(function(data, enc, cb) { + t.same(data.toString(), 'HELLO') + cb(null, data.toString().toLowerCase()) + }), + through(function(data, enc, cb) { + t.same(data.toString(), 'hello') + cb(null, data.toString().toUpperCase()) + }) + ) + + pipeline.write('hello') + pipeline.on('data', function(data) { + t.same(data.toString(), 'HELLO') + t.end() + }) +}) + +tape('destroy', function(t) { + var test = through() + test.destroy = function() { + t.ok(true) + t.end() + } + + var pipeline = pumpify(through(), test) + + pipeline.destroy() +}) + +tape('close', function(t) { + var test = through() + var pipeline = pumpify(through(), test) + + pipeline.on('error', function(err) { + t.same(err.message, 'lol') + t.end() + }) + + test.emit('error', new Error('lol')) +}) + +tape('end waits for last one', function(t) { + var ran = false + + var a = through() + var b = through() + var c = through(function(data, enc, cb) { + setTimeout(function() { + ran = true + cb() + }, 100) + }) + + var pipeline = pumpify(a, b, c) + + pipeline.write('foo') + pipeline.end(function() { + t.ok(ran) + t.end() + }) + + t.ok(!ran) +}) + +tape('always wait for finish', function(t) { + var a = new stream.Readable() + a._read = function() {} + a.push('hello') + + var pipeline = pumpify(a, through(), through()) + var ran = false + + pipeline.on('finish', function() { + t.ok(ran) + t.end() + }) + + setTimeout(function() { + ran = true + a.push(null) + }, 100) +}) + +tape('async', function(t) { + var pipeline = pumpify() + + t.plan(4) + + pipeline.write('hello') + pipeline.on('data', function(data) { + t.same(data.toString(), 'HELLO') + t.end() + }) + + setTimeout(function() { + pipeline.setPipeline( + through(function(data, enc, cb) { + t.same(data.toString(), 'hello') + cb(null, data.toString().toUpperCase()) + }), + through(function(data, enc, cb) { + t.same(data.toString(), 'HELLO') + cb(null, data.toString().toLowerCase()) + }), + through(function(data, enc, cb) { + t.same(data.toString(), 'hello') + cb(null, data.toString().toUpperCase()) + }) + ) + }, 100) +}) + +tape('early destroy', function(t) { + var a = through() + var b = through() + var c = through() + + b.destroy = function() { + t.ok(true) + t.end() + } + + var pipeline = pumpify() + + pipeline.destroy() + setTimeout(function() { + pipeline.setPipeline(a, b, c) + }, 100) +}) + +tape('preserves error', function (t) { + var a = through() + var b = through(function (data, enc, cb) { + cb(new Error('stop')) + }) + var c = through() + var s = pumpify() + + s.on('error', function (err) { + t.same(err.message, 'stop') + t.end() + }) + + s.setPipeline(a, b, c) + s.resume() + s.write('hi') +}) + +tape('preserves error again', function (t) { + var ws = new stream.Writable() + var rs = new stream.Readable({highWaterMark: 16}) + + ws._write = function (data, enc, cb) { + cb(null) + } + + rs._read = function () { + process.nextTick(function () { + rs.push('hello world') + }) + } + + var pumpifyErr = pumpify( + through(), + through(function(chunk, _, cb) { + cb(new Error('test')) + }), + ws + ) + + rs.pipe(pumpifyErr) + .on('error', function (err) { + t.ok(err) + t.ok(err.message !== 'premature close', 'does not close with premature close') + t.end() + }) +}) + +tape('returns error from duplexify', function (t) { + var a = through() + var b = duplexify() + var s = pumpify() + + s.setPipeline(a, b) + + s.on('error', function (err) { + t.same(err.message, 'stop') + t.end() + }) + + s.write('data') + // Test passes if `.end()` is not called + s.end() + + b.setWritable(through()) + + setImmediate(function () { + b.destroy(new Error('stop')) + }) +}) |