Ensure that templates do not recurse.

Closes #765.
This commit is contained in:
Brian Donovan 2015-02-12 15:51:34 -08:00
parent 0a2003af66
commit 928ebda5bc
2 changed files with 19 additions and 0 deletions

View File

@ -88,6 +88,7 @@ var templateVisitor = {
node = node.expression;
}
if (t.isIdentifier(node) && has(nodes, node.name)) {
this.skip();
return nodes[node.name];
}
}

View File

@ -1,5 +1,6 @@
var assert = require("assert");
var util = require("../lib/6to5/util");
var parse = require("../lib/6to5/helpers/parse");
var t = require("../lib/6to5/types");
suite("util", function () {
@ -9,6 +10,23 @@ suite("util", function () {
}, /unknown template/);
});
test("templates do not recurse", function () {
var key = __filename;
var KEY = parse({ loc: key }, "replacedKey").program.body[0].expression;
var VALUE = parse({ loc: key }, "+KEY").program.body[0].expression;
util.templates[key] = util.parseTemplate(key, "KEY = VALUE;");
var result = util.template(key, {KEY: KEY, VALUE: VALUE});
delete util.templates[key];
assert.strictEqual(
result.right.argument.name,
"KEY",
"template should not recurse into replaced nodes, " +
"replacing KEY inside VALUE"
);
});
test("canCompile", function () {
assert.ok(util.canCompile("test.js"));
assert.ok(util.canCompile("/test.js"));