add more reliable source-map tests

This commit is contained in:
Sebastian McKenzie
2014-10-10 09:15:24 +11:00
parent a0c4efb152
commit d511fc8094
12 changed files with 90 additions and 36 deletions

View File

@@ -1,7 +1,8 @@
var traverse = require("./traverse");
var recast = require("recast");
var util = require("./util");
var _ = require("lodash");
var sourceMap = require("source-map");
var traverse = require("./traverse");
var recast = require("recast");
var util = require("./util");
var _ = require("lodash");
var ensureTransformerNames = function (type, keys) {
_.each(keys, function (key) {
@@ -20,7 +21,8 @@ var transform = module.exports = function (code, opts) {
whitelist: [],
sourceMap: false,
filename: "unknown",
format: {}
format: {},
ast: false
});
ensureTransformerNames("blacklist", opts.blacklist);
@@ -56,6 +58,14 @@ transform._run = function (code, tree, opts) {
result.code += "\n" + util.sourceMapToComment(result.map);
}
result.map = result.map || null;
if (opts.ast) {
result.ast = tree;
} else {
result.ast = null;
}
return result;
};
@@ -76,25 +86,29 @@ transform.test = function (task, assert) {
var opts = task.options;
opts.filename = actual.filename;
opts.ast = true;
var actualCode = actual.code.trim();
var transformedResult = transform(actualCode, opts);
var transformedCode = transformedResult.code;
var actualResult = transform(actualCode, opts);
var actualAst = actualResult.ast;
actualCode = recast.prettyPrint(actualAst).code;
var actualAst = util.parse(actual.filename, transformedCode);
var actualResult = recast.prettyPrint(actualAst);
actualCode = actualResult.code;
var expectCode = expect.code.trim();
var expectAst = util.parse(expect.filename, expectCode);
var expectCode = expect.code.trim();
var expectAst = util.parse(expect.filename, expectCode);
var expectResult = recast.prettyPrint(expectAst);
expectCode = expectResult.code;
expectCode = expectResult.code;
assert.equal(actualCode, expectCode);
if (opts.sourceMap && task.sourceMap) {
assert.deepEqual(util.formatJSON(transformedResult.map), util.formatJSON(task.sourceMap));
if (task.sourceMappings) {
var consumer = new sourceMap.SourceMapConsumer(actualResult.map);
_.each(task.sourceMappings, function (mapping, i) {
var pos = consumer.originalPositionFor(mapping.generated);
var msg = "source mapping " + ++i + " - generated: " + mapping.generated.line + ":" + mapping.generated.column;
assert.equal(pos.line + ":" + pos.column, mapping.original.line + ":" + mapping.original.column, msg);
});
}
};