| 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(); |
| }) |