123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- var test = require('tape')
- var spec = require('stream-spec')
- var through = require('../')
- /*
- I'm using these two functions, and not streams and pipe
- so there is less to break. if this test fails it must be
- the implementation of _through_
- */
- function write(array, stream) {
- array = array.slice()
- function next() {
- while(array.length)
- if(stream.write(array.shift()) === false)
- return stream.once('drain', next)
-
- stream.end()
- }
- next()
- }
- function read(stream, callback) {
- var actual = []
- stream.on('data', function (data) {
- actual.push(data)
- })
- stream.once('end', function () {
- callback(null, actual)
- })
- stream.once('error', function (err) {
- callback(err)
- })
- }
- test('simple defaults', function(assert) {
- var l = 1000
- , expected = []
- while(l--) expected.push(l * Math.random())
- var t = through()
- var s = spec(t).through().pausable()
- read(t, function (err, actual) {
- assert.ifError(err)
- assert.deepEqual(actual, expected)
- assert.end()
- })
- t.on('close', s.validate)
- write(expected, t)
- });
- test('simple functions', function(assert) {
- var l = 1000
- , expected = []
- while(l--) expected.push(l * Math.random())
- var t = through(function (data) {
- this.emit('data', data*2)
- })
- var s = spec(t).through().pausable()
-
- read(t, function (err, actual) {
- assert.ifError(err)
- assert.deepEqual(actual, expected.map(function (data) {
- return data*2
- }))
- assert.end()
- })
- t.on('close', s.validate)
- write(expected, t)
- })
- test('pauses', function(assert) {
- var l = 1000
- , expected = []
- while(l--) expected.push(l) //Math.random())
- var t = through()
-
- var s = spec(t)
- .through()
- .pausable()
- t.on('data', function () {
- if(Math.random() > 0.1) return
- t.pause()
- process.nextTick(function () {
- t.resume()
- })
- })
- read(t, function (err, actual) {
- assert.ifError(err)
- assert.deepEqual(actual, expected)
- })
- t.on('close', function () {
- s.validate()
- assert.end()
- })
- write(expected, t)
- })
- test('does not soft-end on `undefined`', function(assert) {
- var stream = through()
- , count = 0
- stream.on('data', function (data) {
- count++
- })
- stream.write(undefined)
- stream.write(undefined)
- assert.equal(count, 2)
- assert.end()
- })
|