|
|
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')) }) })
|