Files
owl/tests/qweb/simple_templates.test.ts
T
Lucas Perais (lpe) 52fa81c510 [FIX] re-introduce some missing tests
The point is to have visibility on the development of the owl2 features.
This commit reintroduces some tests keeping them skipped in order to fulfill that purpose.

There still are some missing tests though.
2022-02-11 10:18:03 +01:00

155 lines
5.4 KiB
TypeScript

import { renderToString, snapshotEverything, TestContext } from "../helpers";
snapshotEverything();
// -----------------------------------------------------------------------------
// Simple templates, mostly static
// -----------------------------------------------------------------------------
describe("simple templates, mostly static", () => {
test("simple string", () => {
const template = `hello vdom`;
expect(renderToString(template)).toBe("hello vdom");
});
test("simple string in t tag", () => {
const template = `<t>hello vdom</t>`;
expect(renderToString(template)).toBe("hello vdom");
});
test("empty string", () => {
const template = ``;
expect(renderToString(template)).toBe("");
});
test("empty string in a template set", () => {
const template = ``;
const context = new TestContext();
context.addTemplate("potato", template);
expect(context.renderToString("potato")).toBe("");
});
test("empty div", () => {
const template = `<div></div>`;
expect(renderToString(template)).toBe("<div></div>");
});
test("div with content", () => {
const template = `<div>foo</div>`;
expect(renderToString(template)).toBe("<div>foo</div>");
});
test("multiple root nodes", () => {
const template = `<div>foo</div><span>hey</span>`;
expect(renderToString(template)).toBe("<div>foo</div><span>hey</span>");
});
test("dynamic text value", () => {
const template = `<t><t t-esc="text"/></t>`;
expect(renderToString(template, { text: "owl" })).toBe("owl");
});
test("two t-escs next to each other", () => {
const template = `<t><t t-esc="text1"/><t t-esc="text2"/></t>`;
expect(renderToString(template, { text1: "hello", text2: "owl" })).toBe("helloowl");
});
test("two t-escs next to each other", () => {
const template = `<t t-esc="text1"/><t t-esc="text2"/>`;
expect(renderToString(template, { text1: "hello", text2: "owl" })).toBe("helloowl");
});
test("two t-escs next to each other, in a div", () => {
const template = `<div><t t-esc="text1"/><t t-esc="text2"/></div>`;
expect(renderToString(template, { text1: "hello", text2: "owl" })).toBe("<div>helloowl</div>");
});
test("static text and dynamic text", () => {
const template = `<t>hello <t t-esc="text"/></t>`;
expect(renderToString(template, { text: "owl" })).toBe("hello owl");
});
test("static text and dynamic text (no t tag)", () => {
const template = `hello <t t-esc="text"/>`;
expect(renderToString(template, { text: "owl" })).toBe("hello owl");
});
test("t-esc in dom node", () => {
const template = `<div><t t-esc="text"/></div>`;
expect(renderToString(template, { text: "hello owl" })).toBe("<div>hello owl</div>");
});
test("dom node with t-esc", () => {
const template1 = `<div t-esc="text" />`;
expect(renderToString(template1, { text: "hello owl" })).toBe("<div>hello owl</div>");
const template2 = `<div t-esc="text"></div>`;
expect(renderToString(template2, { text: "hello owl" })).toBe("<div>hello owl</div>");
});
test("t-esc in dom node, variations", () => {
const template1 = `<div>hello <t t-esc="text"/></div>`;
expect(renderToString(template1, { text: "owl" })).toBe("<div>hello owl</div>");
const template2 = `<div>hello <t t-esc="text"/> world</div>`;
expect(renderToString(template2, { text: "owl" })).toBe("<div>hello owl world</div>");
});
test("div with a class attribute", () => {
const template = `<div class="abc">foo</div>`;
expect(renderToString(template)).toBe(`<div class="abc">foo</div>`);
});
test("div with a class attribute with a quote", () => {
const template = `<div class="a'bc">word</div>`;
expect(renderToString(template)).toBe(`<div class="a'bc">word</div>`);
});
test("div with an arbitrary attribute with a quote", () => {
const template = `<div abc="a'bc">word</div>`;
expect(renderToString(template)).toBe(`<div abc="a'bc">word</div>`);
});
test("div with an empty class attribute", () => {
const template = `<div class="">word</div>`;
expect(renderToString(template)).toBe(`<div>word</div>`);
});
test("div with a span child node", () => {
const template = `<div><span>word</span></div>`;
expect(renderToString(template)).toBe("<div><span>word</span></div>");
});
test("can render a table row", () => {
const template = `<tr><td>cell</td></tr>`;
expect(renderToString(template)).toBe(template);
});
});
describe("loading templates", () => {
test.skip("can initialize qweb with a string", () => {
/* const templates = `<?xml version="1.0" encoding="UTF-8"?>
<templates id="template" xml:space="preserve">
<div t-name="hey">jupiler</div>
</templates>`;
const qweb = new QWeb({ templates });
expect(renderToString(qweb, "hey")).toBe("<div>jupiler</div>");*/
});
test.skip("can load a few templates from a xml string", () => {
/*const data = `<?xml version="1.0" encoding="UTF-8"?>
<templates id="template" xml:space="preserve">
<t t-name="items"><li>ok</li><li>foo</li></t>
<ul t-name="main"><t t-call="items"/></ul>
</templates>`;
qweb.addTemplates(data);
const result = renderToString(qweb, "main");
expect(result).toBe("<ul><li>ok</li><li>foo</li></ul>");*/
});
test.skip("does not crash if string does not have templates", () => {
/*const data = "";
qweb.addTemplates(data);
expect(Object.keys(qweb.templates)).toEqual([]);*/
});
});