collect-json
Version:
Returns a stream which becomes readable with a single value once all (valid) JSON is received.
76 lines (66 loc) • 1.75 kB
JavaScript
var test = require('tape')
var collectJson = require('../')
test('.collectJson() - without args converts a JSON string to an object', function (t) {
var stream = collectJson()
stream.on('readable', function () {
var chunk = this.read()
if (chunk) {
t.ok(Array.isArray(chunk))
t.deepEqual(chunk, [ 1, 2, 3 ])
t.end()
}
})
stream.end('[ 1, 2, 3 ]')
})
test('.collectJson() with input that fails to JSON.parse', function (t) {
t.plan(1)
var stream = collectJson()
stream.on('readable', function () {
t.fail("'readable' should never fire")
})
stream.on('error', function () {
t.pass('failed, as planned')
})
stream.end('asdfadsf')
})
test('.collectJson(throughFunc)', function (t) {
t.plan(3)
var stream = collectJson(function (data) {
t.ok(Array.isArray(data))
return data.concat(4)
})
stream.on('readable', function () {
var chunk = this.read()
if (chunk) {
t.ok(Array.isArray(chunk))
t.deepEqual(chunk, [ 1, 2, 3, 4 ])
}
})
stream.end('[ 1, 2, 3 ]')
})
test.skip('.collectJson.async(throughFunc)', function (t) {
var stream = collectJson.async(function (data, done) {
process.nextTick(function () {
t.ok(Array.isArray(data))
done(data.concat(4))
})
})
stream.on('readable', function () {
var chunk = this.read()
if (chunk) {
t.ok(Array.isArray(chunk))
t.deepEqual(chunk, [ 1, 2, 3, 4 ])
t.end()
}
})
stream.end('[ 1, 2, 3 ]')
})
test('multiple chunks', function (t) {
var stream = collectJson(function (data) {
t.strictEqual(data.length, 2)
t.end()
})
var input = '[ { "one": 1 }, { "two": 2 } ]'
stream.write(input.substr(0, 5))
stream.end(input.substr(5))
})