import { snapshotEverything, TestContext } from "../helpers"; snapshotEverything(); describe("loading templates", () => { test("can initialize qweb with a string", () => { const templates = `
jupiler
`; const context = new TestContext(); context.addTemplates(templates); expect(context.renderToString("hey")).toBe("
jupiler
"); }); test("can initialize qweb with an XMLDocument", () => { const data = `
jupiler
`; const xml = new DOMParser().parseFromString(data, "text/xml"); const context = new TestContext(); context.addTemplates(xml); expect(context.renderToString("hey")).toBe("
jupiler
"); }); test("addTemplates does not modify its xml document in place", () => { const data = `
`; const xml = new DOMParser().parseFromString(data, "text/xml"); const context = new TestContext(); expect(xml.firstElementChild!.innerHTML).toBe(`
`); context.addTemplates(xml); expect(context.renderToString("hey", { value: 123 })).toBe("
123
"); expect(xml.firstElementChild!.innerHTML).toBe(`
`); }); test("can load a few templates from a xml string", () => { const data = `
  • ok
  • foo
  • `; const context = new TestContext(); context.addTemplates(data); const result = context.renderToString("main"); expect(result).toBe(""); }); test("can load a few templates from an XMLDocument", () => { const data = `
  • ok
  • foo
  • `; const xml = new DOMParser().parseFromString(data, "text/xml"); const context = new TestContext(); context.addTemplates(xml); const result = context.renderToString("main"); expect(result).toBe(""); }); test("does not crash if string does not have templates", () => { const data = ""; const context = new TestContext(); context.addTemplates(data); expect(Object.keys(context.rawTemplates)).toEqual([]); }); test("does not crash if XMLDocument does not have templates", () => { const data = ""; const xml = new DOMParser().parseFromString(data, "text/xml"); const context = new TestContext(); context.addTemplates(xml); expect(Object.keys(context.rawTemplates)).toEqual([]); }); test("getTemplate: element returned", () => { const context = new TestContext({ getTemplate: (name) => { if (name === "main") { const data = `
    Hello World!
    `; const xml = new DOMParser().parseFromString(data, "text/xml"); return xml.firstChild as Element; } return; }, }); const result = context.renderToString("main"); expect(result).toBe("
    Hello World!
    "); }); test("getTemplate: element returned (2)", () => { const context = new TestContext({ getTemplate: (name) => { if (name === "main") { const doc = new Document(); const div = doc.createElement("div"); div.append(doc.createTextNode("Hello World!")); return div; } return; }, }); const result = context.renderToString("main"); expect(result).toBe("
    Hello World!
    "); }); test("getTemplate: template string returned", () => { const context = new TestContext({ getTemplate: (name) => { if (name === "main") { return `
    Hello World!
    `; } return; }, }); const result = context.renderToString("main"); expect(result).toBe("
    Hello World!
    "); }); test("getTemplate: undefined returned", () => { const context = new TestContext({ getTemplate: () => {}, }); const data = `
    Hello World!
    `; const xml = new DOMParser().parseFromString(data, "text/xml"); context.addTemplates(xml); const result = context.renderToString("main"); expect(result).toBe("
    Hello World!
    "); }); });