-
Notifications
You must be signed in to change notification settings - Fork 0
/
testDefCompile.js
96 lines (74 loc) · 2.78 KB
/
testDefCompile.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 compile = require('../src/compile'),
fs = require('fs'),
os = require('os'),
path = require('path'),
assert = require('should');
describe('defCompile', function() {
var helper,
keys = require('../examples/meta');
context('compile', function() {
before(function() {
helper = function(key) {
var inCont = fs.readFileSync('examples/' + key + '.js').toString();
var outCont = fs.readFileSync('examples/' + key + '.out.js').toString();
assert.equal(compile(inCont), outCont);
};
});
//it.only('#range', function() { helper('range'); });
keys.forEach(function(key) {
it('#' + key, function() { helper(key); });
});
});
context('compile.doc', function() {
var parse, result = [];
before(function() {
var outFile = './examples/xx.md', program;
// copy from ./bin/def-doc.js
function ruleToString(rule) {
var res = [];
rule.road.forEach(function(p) {
res.push(p.type + ' ' + p.key + (('val' in p) ? ' = ' + JSON.stringify(p.val) : ''));
});
return '(' + res.join(', ') + ') -> ' + rule.returnType;
}
parse = function (file) {
var docs = compile.doc(fs.readFileSync(file).toString(), program);
var relativeFile = path.relative(path.dirname(path.resolve(outFile)), file);
result.push('## [' + path.basename(relativeFile) + '](' + relativeFile + ')');
docs.forEach(function(docObj) {
var source = relativeFile + '#L' + docObj.loc.start.line + '-' + docObj.loc.end.line;
result.push('### [' + (docObj.names && docObj.names.length && docObj.names.join(' & ') || '(anonymous)') + '](' + source + ')');
if (docObj.desc) {
result.push(docObj.desc);
}
//if (docObj.names && docObj.names.length) {
// result.push('__Alias:__ `' + docObj.names.join('`, `') + '`');
//}
result.push('__Rules:__ ');
result.push(docObj.rules.map(function(rule) {
return ' - `' + ruleToString(rule) + '`';
}).join(os.EOL));
if (docObj.examples.length) {
result.push('__Examples:__ ');
}
docObj.examples.forEach(function(ex) {
result.push('```js');
result.push(ex);
result.push('```');
});
result.push(os.EOL);
});
};
helper = function(key) {
var outCont = fs.readFileSync('examples/' + key + '.md').toString();
parse('./examples/' + key + '.js');
assert.equal(result.join(os.EOL + os.EOL), outCont);
result = [];
};
});
//it.only('#range', function() { helper('range'); });
keys.forEach(function(key) {
it('#' + key, function() { helper(key); });
});
});
});