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 = "
hey yay
"; 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 = "

a

b

c

"; 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 = "

a

b

d

c

"; 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 = "

a 2

b 3

c 4

d 5

"; 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 = `
callee2 success
`; 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 = "

yip yip

"; 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("root t-call with body: t-if true", () => { const context = new TestContext(); const subTemplate = `sub`; const main = `zero`; context.addTemplate("subTemplate", subTemplate); context.addTemplate("main", main); const expected = "sub"; expect(context.renderToString("main")).toBe(expected); }); test("root t-call with body: t-if false", () => { const context = new TestContext(); const subTemplate = `sub`; const main = `zero`; context.addTemplate("subTemplate", subTemplate); context.addTemplate("main", main); const expected = "sub"; expect(context.renderToString("main")).toBe(expected); }); test("root t-call with body: t-out with default", () => { const context = new TestContext(); const subTemplate = `sub`; const main = `default`; context.addTemplate("subTemplate", subTemplate); context.addTemplate("main", main); const expected = "sub"; expect(context.renderToString("main")).toBe(expected); }); test("root t-call with body: t-foreach", () => { const context = new TestContext(); const subTemplate = `sub`; const main = ` 1 `; context.addTemplate("subTemplate", subTemplate); context.addTemplate("main", main); const expected = "sub"; 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); }); test("t-call-context", () => { const context = new TestContext(); context.addTemplate("sub", ``); context.addTemplate("main", ``); expect(context.renderToString("main", { obj: { value: 123 } })).toBe("123"); }); test("t-call on a div with t-call-context", () => { const context = new TestContext(); context.addTemplate("sub", ``); context.addTemplate("main", `
`); expect(context.renderToString("main", { obj: { value: 123 } })).toBe( "
123
" ); }); test("t-call-context and value in body", () => { const context = new TestContext(); context.addTemplate("sub", ``); context.addTemplate( "main", ` ` ); expect(context.renderToString("main", { obj: { value1: 123 }, aaron: "lucas" })).toBe( "123lucas" ); }); test("nested t-calls with magic variable 0", () => { const context = new TestContext(); context.addTemplate("grandchild", `grandchild`); context.addTemplate("child", ``); context.addTemplate( "main", `

Some content...

` ); expect(context.renderToString("main")).toBe("grandchild

Some content...

"); }); });