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