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.
		
		
		
		
		
			
		
			
				
					
					
						
							123 lines
						
					
					
						
							2.6 KiB
						
					
					
				
			
		
		
	
	
							123 lines
						
					
					
						
							2.6 KiB
						
					
					
				var test = require('tape') | 
						|
var path = require('path') | 
						|
var from = require('./') | 
						|
var fs   = require('fs') | 
						|
 | 
						|
var tmp = path.resolve( | 
						|
  __dirname, 'tmp.txt' | 
						|
) | 
						|
 | 
						|
function fromString(string) { | 
						|
  return from(function(size, next) { | 
						|
    if (string.length <= 0) return next(null, null) | 
						|
    var chunk = string.slice(0, size) | 
						|
    string = string.slice(size) | 
						|
    next(null, chunk) | 
						|
  }) | 
						|
} | 
						|
 | 
						|
test('from2', function(t) { | 
						|
  var contents = fs.readFileSync(__filename, 'utf8') | 
						|
  var stream = fromString(contents) | 
						|
 | 
						|
  stream | 
						|
    .pipe(fs.createWriteStream(tmp)) | 
						|
    .on('close', function() { | 
						|
      t.equal(fs.readFileSync(tmp, 'utf8'), contents) | 
						|
      fs.unlinkSync(tmp) | 
						|
      t.end() | 
						|
    }) | 
						|
}) | 
						|
 | 
						|
test('old mode', function(t) { | 
						|
  var contents = fs.readFileSync(__filename, 'utf8') | 
						|
  var stream = fromString(contents) | 
						|
  var buffer = '' | 
						|
 | 
						|
  stream.on('data', function(data) { | 
						|
    buffer += data | 
						|
  }).on('end', function() { | 
						|
    t.equal(buffer, contents) | 
						|
    t.end() | 
						|
  }) | 
						|
}) | 
						|
 | 
						|
test('destroy', function(t) { | 
						|
  var stream = from(function(size, next) { | 
						|
    process.nextTick(function() { | 
						|
      next(null, 'no') | 
						|
    }) | 
						|
  }) | 
						|
 | 
						|
  stream.on('data', function(data) { | 
						|
    t.ok(false) | 
						|
  }).on('close', function() { | 
						|
    t.ok(true) | 
						|
    t.end() | 
						|
  }) | 
						|
 | 
						|
  stream.destroy() | 
						|
}) | 
						|
 | 
						|
test('arrays', function (t) { | 
						|
  var input = ['a', 'b', 'c'] | 
						|
  var stream = from(input) | 
						|
  var output = [] | 
						|
  stream.on('data', function (letter) { | 
						|
    output.push(letter.toString()) | 
						|
  }) | 
						|
  stream.on('end', function () { | 
						|
    t.deepEqual(input, output) | 
						|
    t.end() | 
						|
  }) | 
						|
}) | 
						|
 | 
						|
test('obj arrays', function (t) { | 
						|
  var input = [{foo:'a'}, {foo:'b'}, {foo:'c'}] | 
						|
  var stream = from.obj(input) | 
						|
  var output = [] | 
						|
  stream.on('data', function (letter) { | 
						|
    output.push(letter) | 
						|
  }) | 
						|
  stream.on('end', function () { | 
						|
    t.deepEqual(input, output) | 
						|
    t.end() | 
						|
  }) | 
						|
}) | 
						|
 | 
						|
 | 
						|
test('arrays can emit errors', function (t) { | 
						|
  var input = ['a', 'b', new Error('ooops'), 'c'] | 
						|
  var stream = from(input) | 
						|
  var output = [] | 
						|
  stream.on('data', function (letter) { | 
						|
    output.push(letter.toString()) | 
						|
  }) | 
						|
  stream.on('error', function(e){ | 
						|
    t.deepEqual(['a', 'b'], output) | 
						|
    t.equal('ooops', e.message) | 
						|
    t.end() | 
						|
  })   | 
						|
  stream.on('end', function () { | 
						|
    t.fail('the stream should have errored') | 
						|
  }) | 
						|
}) | 
						|
 | 
						|
test('obj arrays can emit errors', function (t) { | 
						|
  var input = [{foo:'a'}, {foo:'b'}, new Error('ooops'), {foo:'c'}] | 
						|
  var stream = from.obj(input) | 
						|
  var output = [] | 
						|
  stream.on('data', function (letter) { | 
						|
    output.push(letter) | 
						|
  }) | 
						|
  stream.on('error', function(e){ | 
						|
    t.deepEqual([{foo:'a'}, {foo:'b'}], output) | 
						|
    t.equal('ooops', e.message) | 
						|
    t.end() | 
						|
  }) | 
						|
  stream.on('end', function () { | 
						|
    t.fail('the stream should have errored') | 
						|
  }) | 
						|
}) | 
						|
 | 
						|
 | 
						|
 |