1var test = require('tape'); 2var fs = require ('fs'); 3var join = require('path').join; 4var couch_sample_file = join(__dirname, 'fixtures','couch_sample.json'); 5var JSONStream = require('../'); 6 7var fixture = { 8 obj: { 9 one: 1, 10 two: 2, 11 three: 3 12 } 13}; 14 15function assertFixtureKeys(stream, t) { 16 var keys = []; 17 var values = []; 18 stream.on('data', function(data) { 19 keys.push(data.key); 20 values.push(data.value); 21 }); 22 23 stream.on('end', function() { 24 t.deepEqual(keys, ['one', 'two', 'three']); 25 t.deepEqual(values, [1,2,3]); 26 t.end(); 27 }); 28 stream.write(JSON.stringify(fixture)); 29 stream.end(); 30} 31 32test('keys via string', function(t) { 33 var stream = JSONStream.parse('obj.$*'); 34 assertFixtureKeys(stream, t); 35}); 36 37test('keys via array', function(t) { 38 var stream = JSONStream.parse(['obj',{emitKey: true}]); 39 assertFixtureKeys(stream, t); 40}); 41 42test('path via array', function(t) { 43 var stream = JSONStream.parse(['obj',{emitPath: true}]); 44 45 var paths = []; 46 var values = []; 47 stream.on('data', function(data) { 48 console.log(JSON.stringify(data)); 49 paths.push(data.path); 50 values.push(data.value); 51 }); 52 53 stream.on('end', function() { 54 t.deepEqual(paths, [['obj', 'one'], ['obj', 'two'], ['obj', 'three']]); 55 t.deepEqual(values, [1,2,3]); 56 t.end(); 57 }); 58 stream.write(JSON.stringify(fixture)); 59 stream.end(); 60}); 61 62test('advanced keys', function(t) { 63 var advanced = fs.readFileSync(couch_sample_file); 64 var stream = JSONStream.parse(['rows', true, 'doc', {emitKey: true}]); 65 66 var keys = []; 67 var values = []; 68 stream.on('data', function(data) { 69 keys.push(data.key); 70 values.push(data.value); 71 }); 72 73 stream.on('end', function() { 74 t.deepEqual(keys, [ 75 '_id', '_rev', 'hello', 76 '_id', '_rev', 'hello' 77 ]); 78 t.deepEqual(values, [ 79 "change1_0.6995461115147918", "1-e240bae28c7bb3667f02760f6398d508", 1, 80 "change2_0.6995461115147918", "1-13677d36b98c0c075145bb8975105153", 2 81 ]); 82 t.end(); 83 }); 84 stream.write(advanced); 85 stream.end(); 86}); 87 88test('parent keys', function(t) { 89 var stream = JSONStream.parse('$*'); 90 var d = null; 91 stream.on('data', function(data) { 92 if(d) t.fail('should only be called once'); 93 d = data; 94 }); 95 96 stream.on('end', function() { 97 t.deepEqual(d,{ 98 key: 'obj', 99 value: fixture.obj 100 }); 101 t.end(); 102 }); 103 stream.write(JSON.stringify(fixture)); 104 stream.end(); 105}) 106