summaryrefslogtreecommitdiff
path: root/tmpl/tmpl_test.go
blob: 00e66247605636b06b15c23d015e3c5577fd10db (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
package tmpl

import (
	"testing"
	"text/template"

	"github.com/stretchr/testify/assert"
	"github.com/stretchr/testify/require"
)

func TestInline(t *testing.T) {
	testdata := []string{
		"{{ print `hello world`}}",
		"{{ tpl \"{{ print `hello world`}}\"}}",
		"{{ tpl \"{{ tpl \\\"{{ print `hello world`}}\\\"}}\"}}",
	}
	tmpl := &Template{
		defaultCtx: map[string]string{},
		root:       template.New("root"),
	}
	tmpl.root.Funcs(template.FuncMap{
		"tpl": tmpl.Inline,
	})
	for _, d := range testdata {
		out, err := tmpl.Inline(d)
		require.NoError(t, err, d)
		assert.Equal(t, "hello world", out)
	}
}

func TestParseArgs(t *testing.T) {
	defaultCtx := map[string]string{"hello": "world"}
	tmpl := New(nil, defaultCtx, "")
	name, in, ctx, err := tmpl.parseArgs("foo")
	require.NoError(t, err)
	assert.Equal(t, "<inline>", name)
	assert.Equal(t, "foo", in)
	assert.Equal(t, defaultCtx, ctx)

	_, _, _, err = tmpl.parseArgs(42)
	require.Error(t, err)

	_, _, _, err = tmpl.parseArgs()
	require.Error(t, err)

	_, _, _, err = tmpl.parseArgs("", "", 42, "")
	require.Error(t, err)

	_, _, _, err = tmpl.parseArgs("", 42, 42)
	require.Error(t, err)

	name, in, ctx, err = tmpl.parseArgs("foo", "bar")
	require.NoError(t, err)
	assert.Equal(t, "foo", name)
	assert.Equal(t, "bar", in)
	assert.Equal(t, defaultCtx, ctx)

	c := map[string]string{"one": "two"}
	name, in, ctx, err = tmpl.parseArgs("foo", c)
	require.NoError(t, err)
	assert.Equal(t, "<inline>", name)
	assert.Equal(t, "foo", in)
	assert.Equal(t, c, ctx)

	name, in, ctx, err = tmpl.parseArgs("foo", "bar", c)
	require.NoError(t, err)
	assert.Equal(t, "foo", name)
	assert.Equal(t, "bar", in)
	assert.Equal(t, c, ctx)
}

func TestExec(t *testing.T) {
	root := template.New("root")
	t1 := root.New("T1")
	t1.Parse("hello, {{ . }}")
	tmpl := &Template{
		defaultCtx: map[string]string{"foo": "bar"},
		root:       root,
	}

	out, err := tmpl.Exec("T1")
	require.NoError(t, err)
	assert.Equal(t, "hello, map[foo:bar]", out)

	out, err = tmpl.Exec("T1", "world")
	require.NoError(t, err)
	assert.Equal(t, "hello, world", out)

	_, err = tmpl.Exec("bogus")
	require.Error(t, err)
}

func TestPath(t *testing.T) {
	tmpl := New(nil, nil, "")

	p, err := tmpl.Path()
	require.NoError(t, err)
	assert.Equal(t, "", p)

	tmpl = New(nil, nil, "foo")
	p, err = tmpl.Path()
	require.NoError(t, err)
	assert.Equal(t, "foo", p)
}

func TestPathDir(t *testing.T) {
	tmpl := New(nil, nil, "")

	p, err := tmpl.PathDir()
	require.NoError(t, err)
	assert.Equal(t, "", p)

	tmpl = New(nil, nil, "foo")
	p, err = tmpl.PathDir()
	require.NoError(t, err)
	assert.Equal(t, ".", p)

	tmpl = New(nil, nil, "foo/bar")
	p, err = tmpl.PathDir()
	require.NoError(t, err)
	assert.Equal(t, "foo", p)
}