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