/
tmpl-spec.jst
87 lines (81 loc) · 2.62 KB
/
tmpl-spec.jst
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
var assert = require('assert'),
path = require('path'),
<% if (saveHtml) { %>
fs = require('fs'),
beautifyHtml = function(html) {
return require('${ paths['js-beautify'] }').html(html, beautifyHtmlConfig);
},
beautifyHtmlConfig = { unformatted: [
'a', 'span', 'img', 'address', 'script',
'h1', 'h2', 'h3', 'h4', 'h5','h6',
'dfn', 'code', 'samp', 'kbd', 'var',
'cite', 'abbr', 'acronym', 'strong',
'sub', 'sup', 'tt', 'big', 'small', 'strike',
'font', 'ins', 'del', 'pre', 'address', 'dt',
'q', 'i', 'b', 'u', 's', 'bdo', 'em'
]},
saveHtmlFile = function(filename, actual, done) {
fs.writeFile(path.join(__dirname, filename), beautifyHtml(actual), done);
},
<% } %>
clearRequire = require('${ paths['clear-require'] }'),
HtmlDiffer = require('${ paths['html-differ'] }').HtmlDiffer,
htmlDiffer = new HtmlDiffer(${ JSON.stringify(diffOpts) }),
referencesJSON = JSON.stringify(require('${ paths.references }')),
getReferences = function () {
return JSON.parse(referencesJSON);
};
describe('${ describe }', function() {
<% _.forEach(its, function(it) { %>
describe('${ it }', function() {
<% _.forEach(engines, function(engine) {
var lang = engine.lang;
print(template('it', {
it: it,
before: [
'var references = getReferences();',
'var engine = ' + loadTemplate(engine.target, engine.exportName) + ';',
].join('\n'),
engine: engine,
lang: lang.isReal ? lang.name : null,
saveHtml: saveHtml
}));
}); %>
});
<% }); %>
}); // /describe ${ describe }
function assertHtml(actual, expected, done, filename) {
<% if (saveHtml) {%>
saveHtmlFile(filename, actual, function() {
<% } %>
if (htmlDiffer.isEqual(actual, expected)) {
// Throw error if actual is empty
assert.ok(actual);
done && done(null);
} else {
assert.fail(actual, expected, null, '\n');
}
<% if (saveHtml) {%>
});
<% } %>
}
<%
function loadTemplate(target, exportName) {
return 'loadTemplate(' + JSON.stringify(target) + ', ' + JSON.stringify(exportName) + ')';
}
%>
function loadTemplate(file, exportName) {
try {
var res = reRequire(file);
exportName && (res = res[exportName]);
return res;
} catch (e) {
console.error(e.stack);
return { apply: function() { return e.stack; } };
}
}
function reRequire(file) {
file = require.resolve(file);
clearRequire(file);
return require(file);
}