-
Notifications
You must be signed in to change notification settings - Fork 14
/
parser.js
81 lines (63 loc) · 1.95 KB
/
parser.js
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
var Parser = require('../');
describe('Parser', function(){
describe('Parser()', function(){
it('should return a new Parser', function(){
Parser().should.be.an.instanceof(Parser);
})
})
describe('.use(fn)', function(){
it('should be invoked with both the key and value', function(done){
var parser = new Parser;
parser.use(function(key, val){
key.should.equal('foo');
val.should.equal('bar');
done();
});
parser.parse('{ "foo": "bar" }');
})
})
describe('.read(path)', function(){
it('should read the JSON and apply plugins', function(){
var parser = new Parser;
parser.use(function(key, val){ return val.toUpperCase(); });
var obj = parser.read('test/fixtures/config.json');
obj.should.eql({ foo: 'BAR', bar: 'BAZ' });
})
})
describe('.parse(str)', function(){
it('should invoke each plugin', function(done){
var parser = new Parser
, calls = [];
parser.use(function(key, val){
key.should.equal('foo');
val.should.equal('bar');
calls.push('a');
});
parser.use(function(key, val){
key.should.equal('foo');
val.should.equal('bar');
calls.push('b');
calls.should.eql(['a', 'b']);
done();
});
parser.parse('{ "foo": "bar" }');
})
it('should not modify when undefined is returned', function(){
var parser = new Parser;
parser.use(function(key, val){});
parser.parse('{ "foo": "bar" }')
.should.eql({ foo: 'bar' });
})
it('should modify when a value is returned', function(){
var parser = new Parser;
parser.use(function(key, val){ return 'hey'; });
parser.parse('{ "foo": "bar" }')
.should.eql({ foo: 'hey' });
})
it('should also parse objects', function(){
var parser = new Parser
, data = { foo: 'bar' };
parser.parse(data).should.eql(data);
})
})
})