summaryrefslogtreecommitdiff
path: root/deps/npm/node_modules/JSONStream/test/keys.js
blob: 747723d11e2cc3452ceff68c4f51dd36bbca0fcc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
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();
})