import { snapshotEverything, TestContext } from "../helpers";
snapshotEverything();
// -----------------------------------------------------------------------------
// t-call
// -----------------------------------------------------------------------------
describe("t-call (template calling)", () => {
test("basic caller", () => {
const context = new TestContext();
context.addTemplate("_basic-callee", `ok`);
context.addTemplate("caller", `
`);
expect(context.renderToString("caller")).toBe("ok
");
});
test("basic caller, no parent node", () => {
const context = new TestContext();
context.addTemplate("_basic-callee", `ok`);
context.addTemplate("caller", ``);
expect(context.renderToString("caller")).toBe("ok");
});
test("t-esc inside t-call, with t-set outside", () => {
const context = new TestContext();
const main = `Hi
`;
context.addTemplate("main", main);
context.addTemplate("sub", ``);
expect(context.renderToString("main")).toBe("Hi
");
});
test("t-call with t-if", () => {
const context = new TestContext();
const main = '
';
context.addTemplate("main", main);
context.addTemplate("sub", "ok");
expect(context.renderToString("main", { flag: true })).toBe("ok
");
});
test("t-call allowed on a non t node", () => {
const context = new TestContext();
const main = '';
context.addTemplate("main", main);
context.addTemplate("sub", "ok");
expect(context.renderToString("main")).toBe("ok
");
});
test("with unused body", () => {
const context = new TestContext();
const sub = "ok
";
const main = 'WHEEE';
context.addTemplate("sub", sub);
context.addTemplate("main", main);
expect(context.renderToString("main")).toBe("ok
");
});
test("with unused setbody", () => {
const context = new TestContext();
const sub = "ok
";
const main = ``;
context.addTemplate("sub", sub);
context.addTemplate("main", main);
expect(context.renderToString("main")).toBe("ok
");
});
test("with used body", () => {
const context = new TestContext();
const sub = '
';
const main = 'ok';
context.addTemplate("sub", sub);
context.addTemplate("main", main);
expect(context.renderToString("main")).toBe("ok
");
});
test("with used setbody", () => {
const context = new TestContext();
const sub = '';
const main = ``;
context.addTemplate("sub", sub);
context.addTemplate("main", main);
expect(context.renderToString("main")).toBe("ok");
});
test("inherit context", () => {
const context = new TestContext();
const sub = '';
const main = `
`;
context.addTemplate("sub", sub);
context.addTemplate("main", main);
expect(context.renderToString("main")).toBe("1
");
});
test("scoped parameters", () => {
const context = new TestContext();
const sub = "ok";
const main = `
`;
context.addTemplate("sub", sub);
context.addTemplate("main", main);
expect(context.renderToString("main")).toBe("ok
");
});
test("scoped parameters, part 2", () => {
const context = new TestContext();
const sub = '';
const main = `
`;
context.addTemplate("sub", sub);
context.addTemplate("main", main);
expect(context.renderToString("main")).toBe("4211
");
});
test("call with several sub nodes on same line", () => {
const context = new TestContext();
const sub = `
`;
const main = `
hey yay
`;
context.addTemplate("sub", sub);
context.addTemplate("main", main);
const expected = "";
expect(context.renderToString("main")).toBe(expected);
});
test("cascading t-call t-out='0'", () => {
const context = new TestContext();
const finalTemplate = `
cascade 2
`;
const subSubTemplate = `
cascade 1
`;
const subTemplate = `
cascade 0
`;
const main = `
hey yay
`;
context.addTemplate("finalTemplate", finalTemplate);
context.addTemplate("subSubTemplate", subSubTemplate);
context.addTemplate("subTemplate", subTemplate);
context.addTemplate("main", main);
const expected =
"cascade 2cascade 1cascade 0hey yay
";
expect(context.renderToString("main")).toBe(expected);
});
test("cascading t-call t-out='0', without external divs", () => {
const context = new TestContext();
const finalTemplate = `
cascade 2
`;
const subSubTemplate = `
cascade 1
`;
const subTemplate = `
cascade 0
`;
const main = `
hey yay
`;
context.addTemplate("finalTemplate", finalTemplate);
context.addTemplate("subSubTemplate", subSubTemplate);
context.addTemplate("subTemplate", subTemplate);
context.addTemplate("main", main);
const expected =
"cascade 2cascade 1cascade 0hey yay";
expect(context.renderToString("main")).toBe(expected);
});
test("recursive template, part 1", () => {
const context = new TestContext();
const recursive = `
hey
`;
context.addTemplate("recursive", recursive);
const expected = "hey
";
expect(context.renderToString("recursive")).toBe(expected);
});
test("recursive template, part 2", () => {
const context = new TestContext();
const Parent = `
`;
const nodeTemplate = `
`;
context.addTemplate("Parent", Parent);
context.addTemplate("nodeTemplate", nodeTemplate);
const root = { val: "a", children: [{ val: "b" }, { val: "c" }] };
const expected = "";
expect(context.renderToString("Parent", { root })).toBe(expected);
});
test("recursive template, part 3", () => {
const context = new TestContext();
const Parent = `
`;
const nodeTemplate = `
`;
context.addTemplate("Parent", Parent);
context.addTemplate("nodeTemplate", nodeTemplate);
const root = { val: "a", children: [{ val: "b", children: [{ val: "d" }] }, { val: "c" }] };
const expected =
"";
expect(context.renderToString("Parent", { root })).toBe(expected);
});
test("recursive template, part 4: with t-set recursive index", () => {
const context = new TestContext();
const Parent = `
`;
const nodeTemplate = `
`;
context.addTemplate("Parent", Parent);
context.addTemplate("nodeTemplate", nodeTemplate);
const root = {
val: "a",
children: [{ val: "b", children: [{ val: "c", children: [{ val: "d" }] }] }],
};
const expected =
"";
expect(context.renderToString("Parent", { root })).toBe(expected);
});
test("t-call, conditional and t-set in t-call body", () => {
const context = new TestContext();
const callee1 = `callee1
`;
const callee2 = `callee2
`;
const caller = `
`;
context.addTemplate("callee1", callee1);
context.addTemplate("callee2", callee2);
context.addTemplate("caller", caller);
const expected = ``;
expect(context.renderToString("caller")).toBe(expected);
});
test("t-call with t-set inside and outside", () => {
const context = new TestContext();
const main = `
`;
const sub = `
`;
context.addTemplate("main", main);
context.addTemplate("sub", sub);
const expected = "369
";
const ctx = { list: [{ val: 1 }, { val: 2 }, { val: 3 }] };
expect(context.renderToString("main", ctx)).toBe(expected);
});
test("t-call with t-set inside and outside. 2", () => {
const context = new TestContext();
const main = `
`;
const sub = `
`;
const wrapper = `
`;
context.addTemplate("main", main);
context.addTemplate("sub", sub);
context.addTemplate("wrapper", wrapper);
const expected =
"3fromwrapper6fromwrapper9fromwrapper
";
const ctx = { list: [{ val: 1 }, { val: 2 }, { val: 3 }] };
expect(context.renderToString("wrapper", ctx)).toBe(expected);
});
test("t-call with t-set inside and body text content", () => {
const context = new TestContext();
const main = `
yip yip
`;
const sub = `
`;
context.addTemplate("main", main);
context.addTemplate("sub", sub);
const expected = "";
expect(context.renderToString("main")).toBe(expected);
});
test("t-call with body content as root of a template", () => {
const context = new TestContext();
const antony = ``;
const main = `antony
`;
context.addTemplate("antony", antony);
context.addTemplate("main", main);
const expected = "antony
";
expect(context.renderToString("main")).toBe(expected);
});
test("dynamic t-call", () => {
const context = new TestContext();
const foo = ``;
const bar = ``;
const main = `
`;
context.addTemplate("foo", foo);
context.addTemplate("bar", bar);
context.addTemplate("main", main);
const expected1 = "foo
";
expect(context.renderToString("main", { template: "foo", val: "foo" })).toBe(expected1);
const expected2 = "quux
";
expect(context.renderToString("main", { template: "bar", val: "quux" })).toBe(expected2);
});
});