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.
		
		
		
		
			
				
					124 lines
				
				2.6 KiB
			
		
		
			
		
	
	
					124 lines
				
				2.6 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								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')
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 |