marko/test/codegen/index.test.js
Michael Rawlings 37e0c912ab
Template literal print fixes (#1188)
* when writing a TemplateLiteral, it should not transpile unless generated

* proper escaping for template literals

* add printing test for TemplateLiteral node
2018-12-10 17:01:19 -08:00

74 lines
2.1 KiB
JavaScript

"use strict";
require("../__util__/test-init");
var chai = require("chai");
chai.config.includeStack = true;
var expect = require("chai").expect;
var path = require("path");
var compiler = require("../../compiler");
var builder = compiler.createBuilder();
var autotest = require("../autotest");
var CompileContext = require("marko/compiler/CompileContext");
var CodeGenerator = require("marko/compiler/CodeGenerator");
var CodeWriter = require("marko/compiler/CodeWriter");
function createCodeGenerator(context) {
return new CodeGenerator(context);
}
function createCodeWriter(context) {
return new CodeWriter(context, builder);
}
autotest("fixtures", fixture => {
let test = fixture.test;
let resolve = fixture.resolve;
let snapshot = fixture.snapshot;
test(done => {
var main = require(resolve("index.js"));
var generateCodeFunc = main;
var skipCodegen = main.skipCodegen === true;
var context = new CompileContext(
"dummy",
resolve("dummy.marko"),
builder
);
var codegen = createCodeGenerator(context);
var codeWriter = createCodeWriter(context);
var ast = generateCodeFunc(builder, codegen);
var finalAST = skipCodegen ? ast : codegen.generateCode(ast);
codeWriter.write(finalAST);
var actualSrc = codeWriter.getCode();
actualSrc = actualSrc.replace(/marko\/dist\//g, "marko/src/");
snapshot(actualSrc, { ext: ".js" });
done();
});
});
describe("codegen", function() {
it("should not allow a return outside a function", function() {
let builder = compiler.createBuilder();
var context = new CompileContext(
"dummy",
path.join(__dirname, "dummy.marko"),
builder
);
var codegen = createCodeGenerator(context);
var rootNode = builder.program([builder.returnStatement("foo")]);
expect(function() {
codegen.generateCode(rootNode);
}).to.throw('"return" not allowed outside a function body');
});
});