• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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