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", "
")).toThrow("already defined"); }); test("adding different template with same name outside dev mode silently ignores it", () => { const context = new TemplateSet({ dev: false }); context.addTemplate("test", ``); expect(() => context.addTemplate("test", "
")).not.toThrow(); expect(context.rawTemplates.test).toBe(""); }); test("invalid xml", () => { const template = "
"; 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 'ctx' 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]); } }`); }); });