UNPKG

2.64 kBJavaScriptView Raw
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})