1package tmpl
2
3import (
4	"testing"
5	"text/template"
6
7	"github.com/stretchr/testify/assert"
8)
9
10func TestInline(t *testing.T) {
11	testdata := []string{
12		"{{ print `hello world`}}",
13		"{{ tpl \"{{ print `hello world`}}\"}}",
14		"{{ tpl \"{{ tpl \\\"{{ print `hello world`}}\\\"}}\"}}",
15	}
16	tmpl := &Template{
17		defaultCtx: map[string]string{},
18		root:       template.New("root"),
19	}
20	tmpl.root.Funcs(template.FuncMap{
21		"tpl": tmpl.Inline,
22	})
23	for _, d := range testdata {
24		out, err := tmpl.Inline(d)
25		assert.NoError(t, err, d)
26		assert.Equal(t, "hello world", out)
27	}
28}
29
30func TestParseArgs(t *testing.T) {
31	defaultCtx := map[string]string{"hello": "world"}
32	tmpl := New(nil, defaultCtx)
33	name, in, ctx, err := tmpl.parseArgs("foo")
34	assert.NoError(t, err)
35	assert.Equal(t, "<inline>", name)
36	assert.Equal(t, "foo", in)
37	assert.Equal(t, defaultCtx, ctx)
38
39	_, _, _, err = tmpl.parseArgs(42)
40	assert.Error(t, err)
41
42	_, _, _, err = tmpl.parseArgs()
43	assert.Error(t, err)
44
45	_, _, _, err = tmpl.parseArgs("", "", 42, "")
46	assert.Error(t, err)
47
48	_, _, _, err = tmpl.parseArgs("", 42, 42)
49	assert.Error(t, err)
50
51	name, in, ctx, err = tmpl.parseArgs("foo", "bar")
52	assert.NoError(t, err)
53	assert.Equal(t, "foo", name)
54	assert.Equal(t, "bar", in)
55	assert.Equal(t, defaultCtx, ctx)
56
57	c := map[string]string{"one": "two"}
58	name, in, ctx, err = tmpl.parseArgs("foo", c)
59	assert.NoError(t, err)
60	assert.Equal(t, "<inline>", name)
61	assert.Equal(t, "foo", in)
62	assert.Equal(t, c, ctx)
63
64	name, in, ctx, err = tmpl.parseArgs("foo", "bar", c)
65	assert.NoError(t, err)
66	assert.Equal(t, "foo", name)
67	assert.Equal(t, "bar", in)
68	assert.Equal(t, c, ctx)
69}
70
71func TestExec(t *testing.T) {
72	root := template.New("root")
73	t1 := root.New("T1")
74	t1.Parse("hello, {{ . }}")
75	tmpl := &Template{
76		defaultCtx: map[string]string{"foo": "bar"},
77		root:       root,
78	}
79
80	out, err := tmpl.Exec("T1")
81	assert.NoError(t, err)
82	assert.Equal(t, "hello, map[foo:bar]", out)
83
84	out, err = tmpl.Exec("T1", "world")
85	assert.NoError(t, err)
86	assert.Equal(t, "hello, world", out)
87
88	_, err = tmpl.Exec("bogus")
89	assert.Error(t, err)
90}
91