add more reliable source-map tests
This commit is contained in:
@@ -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);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user