import { TemplateSet } from "../../src/runtime/template_set";
import { renderToString, snapshotTemplate, TestContext } from "../helpers";
// -----------------------------------------------------------------------------
// basic validation
// -----------------------------------------------------------------------------
describe("basic validation", () => {
test("error if no template with given name", () => {
const context = new TemplateSet();
expect(() => context.getTemplate("invalidname")).toThrow("Missing template");
});
test("cannot add a different template with the same name in dev mode", () => {
const context = new TemplateSet({ dev: true });
context.addTemplate("test", ``);
// Same template with the same name is fine
expect(() => context.addTemplate("test", "")).not.toThrow();
// Different template with the same name crashes
expect(() => context.addTemplate("test", "
";
expect(() => snapshotTemplate(template)).toThrow("Invalid XML in template");
});
test("missing template in template set", () => {
const context = new TestContext();
const template = `
`;
context.addTemplate("template", template);
expect(() => context.renderToString("template")).toThrowError("Missing");
});
test("error when unknown directive", () => {
const template = `
test
`;
expect(() => renderToString(template)).toThrow("Unknown QWeb directive: 't-best-beer'");
});
test("compilation error", () => {
const template = `
test
`;
expect(() => renderToString(template))
.toThrow(`Failed to compile anonymous template: Unexpected identifier
generated code:
function(app, bdom, helpers) {
let { text, createBlock, list, multi, html, toggler, comment } = bdom;
let block1 = createBlock(\`
test
\`);
return function template(ctx, node, key = "") {
let attr1 = ctx['a']ctx['b'];
return block1([attr1]);
}
}`);
});
});