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