57 lines
1.5 KiB
JavaScript
57 lines
1.5 KiB
JavaScript
try {
|
|
if (typeof define !== 'function' || !define.amd) {
|
|
var SourceMap = require('source-map'),
|
|
SourceMapConsumer = SourceMap.SourceMapConsumer;
|
|
}
|
|
} catch (err) {
|
|
/* NOP for in browser */
|
|
}
|
|
|
|
describe('source-map', function() {
|
|
if (!Handlebars.precompile || !SourceMap) {
|
|
return;
|
|
}
|
|
|
|
it('should safely include source map info', function() {
|
|
var template = Handlebars.precompile('{{hello}}', {
|
|
destName: 'dest.js',
|
|
srcName: 'src.hbs'
|
|
});
|
|
|
|
equal(!!template.code, true);
|
|
equal(!!template.map, !CompilerContext.browser);
|
|
});
|
|
it('should map source properly', function() {
|
|
var templateSource =
|
|
' b{{hello}} \n {{bar}}a {{#block arg hash=(subex 1 subval)}}{{/block}}',
|
|
template = Handlebars.precompile(templateSource, {
|
|
destName: 'dest.js',
|
|
srcName: 'src.hbs'
|
|
});
|
|
|
|
if (template.map) {
|
|
var consumer = new SourceMapConsumer(template.map),
|
|
lines = template.code.split('\n'),
|
|
srcLines = templateSource.split('\n'),
|
|
generated = grepLine('" b"', lines),
|
|
source = grepLine(' b', srcLines);
|
|
|
|
var mapped = consumer.originalPositionFor(generated);
|
|
equal(mapped.line, source.line);
|
|
equal(mapped.column, source.column);
|
|
}
|
|
});
|
|
});
|
|
|
|
function grepLine(token, lines) {
|
|
for (var i = 0; i < lines.length; i++) {
|
|
var column = lines[i].indexOf(token);
|
|
if (column >= 0) {
|
|
return {
|
|
line: i + 1,
|
|
column: column
|
|
};
|
|
}
|
|
}
|
|
}
|