You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					134 lines
				
				2.3 KiB
			
		
		
			
		
	
	
					134 lines
				
				2.3 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								
							 | 
						||
| 
								 | 
							
								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()
							 | 
						||
| 
								 | 
							
								})
							 |