-
Notifications
You must be signed in to change notification settings - Fork 8
/
analyzer.js
96 lines (80 loc) · 2.12 KB
/
analyzer.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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
var analyzer = require('loadbuilder/analyzer'),
assert = require('assert');
var tree = {
a: 1,
b: 2,
c: [
3,
4,
{
d: 7
}
],
e: {
f: 8
},
f: 9
},
match, matches;
module.exports = {
testMatchShouldReturnNullIfNoMatches: function() {
match = analyzer.match({ not: 'here' }, tree);
assert.isNull(match);
},
testMatchShouldReturnArrayIfMatches: function() {
match = analyzer.match({ a: 1, b: 2 }, tree);
assert.eql(match, []);
match = analyzer.match({ a: 1, b: 2, c: [ 3 ] }, tree);
assert.eql(match, []);
match = analyzer.match(tree, tree);
assert.eql(match, []);
},
testMatchShouldReturnMatchedWildcardsInArray: function() {
match = analyzer.match({ a: null }, tree);
assert.eql(match, [1]);
match = analyzer.match({
a: 1,
b: 2,
c: null
}, tree);
assert.eql(match, [[3,4,{"d":7}]]);
match = analyzer.match({ a: null, b: null }, tree);
assert.eql(match, [1, 2]);
},
testWalkShouldReturnArrayOfMatches: function() {
matches = analyzer.walk({ f: 8 }, tree);
assert.eql(matches, [
{ parent: tree, index: 3, values: [] }
]);
matches = analyzer.walk({ a: 1, b: null }, tree);
assert.eql(matches, [
{ parent: null, index: 0, values: [2] }
]);
matches = analyzer.walk({ b: 2, c: [null] }, tree);
assert.eql(matches, [
{ parent: null, index: 0, values: [3] }
]);
matches = analyzer.walk({ f: null }, tree);
assert.eql(matches, [
{ parent: null, index: 0, values: [9] },
{ parent: tree, index: 3, values: [8] }
]);
},
testAnalyzeShouldWalkJSSource: function() {
var src = "function pow() { var thing = require('blah'); }";
matches = analyzer.analyze({
"type": "CallExpression",
"callee": {
"type": "Identifier",
"name": "require"
},
"arguments": [
{
"type": "Literal",
"value": null
}
]
}, src);
assert.eql(matches[0].values, ['blah']);
}
}