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