|
var test = require('tape');
|
|
var fs = require ('fs');
|
|
var join = require('path').join;
|
|
var couch_sample_file = join(__dirname, 'fixtures','couch_sample.json');
|
|
var JSONStream = require('../');
|
|
|
|
var fixture = {
|
|
obj: {
|
|
one: 1,
|
|
two: 2,
|
|
three: 3
|
|
}
|
|
};
|
|
|
|
function assertFixtureKeys(stream, t) {
|
|
var keys = [];
|
|
var values = [];
|
|
stream.on('data', function(data) {
|
|
keys.push(data.key);
|
|
values.push(data.value);
|
|
});
|
|
|
|
stream.on('end', function() {
|
|
t.deepEqual(keys, ['one', 'two', 'three']);
|
|
t.deepEqual(values, [1,2,3]);
|
|
t.end();
|
|
});
|
|
stream.write(JSON.stringify(fixture));
|
|
stream.end();
|
|
}
|
|
|
|
test('keys via string', function(t) {
|
|
var stream = JSONStream.parse('obj.$*');
|
|
assertFixtureKeys(stream, t);
|
|
});
|
|
|
|
test('keys via array', function(t) {
|
|
var stream = JSONStream.parse(['obj',{emitKey: true}]);
|
|
assertFixtureKeys(stream, t);
|
|
});
|
|
|
|
test('path via array', function(t) {
|
|
var stream = JSONStream.parse(['obj',{emitPath: true}]);
|
|
|
|
var paths = [];
|
|
var values = [];
|
|
stream.on('data', function(data) {
|
|
console.log(JSON.stringify(data));
|
|
paths.push(data.path);
|
|
values.push(data.value);
|
|
});
|
|
|
|
stream.on('end', function() {
|
|
t.deepEqual(paths, [['obj', 'one'], ['obj', 'two'], ['obj', 'three']]);
|
|
t.deepEqual(values, [1,2,3]);
|
|
t.end();
|
|
});
|
|
stream.write(JSON.stringify(fixture));
|
|
stream.end();
|
|
});
|
|
|
|
test('advanced keys', function(t) {
|
|
var advanced = fs.readFileSync(couch_sample_file);
|
|
var stream = JSONStream.parse(['rows', true, 'doc', {emitKey: true}]);
|
|
|
|
var keys = [];
|
|
var values = [];
|
|
stream.on('data', function(data) {
|
|
keys.push(data.key);
|
|
values.push(data.value);
|
|
});
|
|
|
|
stream.on('end', function() {
|
|
t.deepEqual(keys, [
|
|
'_id', '_rev', 'hello',
|
|
'_id', '_rev', 'hello'
|
|
]);
|
|
t.deepEqual(values, [
|
|
"change1_0.6995461115147918", "1-e240bae28c7bb3667f02760f6398d508", 1,
|
|
"change2_0.6995461115147918", "1-13677d36b98c0c075145bb8975105153", 2
|
|
]);
|
|
t.end();
|
|
});
|
|
stream.write(advanced);
|
|
stream.end();
|
|
});
|
|
|
|
test('parent keys', function(t) {
|
|
var stream = JSONStream.parse('$*');
|
|
var d = null;
|
|
stream.on('data', function(data) {
|
|
if(d) t.fail('should only be called once');
|
|
d = data;
|
|
});
|
|
|
|
stream.on('end', function() {
|
|
t.deepEqual(d,{
|
|
key: 'obj',
|
|
value: fixture.obj
|
|
});
|
|
t.end();
|
|
});
|
|
stream.write(JSON.stringify(fixture));
|
|
stream.end();
|
|
})
|