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.
		
		
		
		
		
			
		
			
				
					
					
						
							133 lines
						
					
					
						
							2.3 KiB
						
					
					
				
			
		
		
	
	
							133 lines
						
					
					
						
							2.3 KiB
						
					
					
				
 | 
						|
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() | 
						|
})
 | 
						|
 |