-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtemplate_funcs_test.go
79 lines (61 loc) · 2.14 KB
/
template_funcs_test.go
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
package erk_test
import (
"fmt"
"testing"
"text/template"
"github.com/JosiahWitt/ensure"
"github.com/JosiahWitt/ensure/ensurepkg"
"github.com/JosiahWitt/erk"
)
func TestTemplateFuncs(t *testing.T) {
ensure := ensure.New(t)
ensure.Run("with no TemplateFuncsFor function", func(ensure ensurepkg.Ensure) {
type TestType string
msg := "{{.a}} is {{type .a}}"
err := erk.New(ErkSimple{}, msg)
err = erk.WithParam(err, "a", TestType("hello"))
ensure(err.Error()).Equals("hello is erk_test.TestType")
})
ensure.Run("with overridden TemplateFuncsFor function", func(ensure ensurepkg.Ensure) {
type TestType string
msg := "{{.a}} is {{fancyType .a}}"
err := erk.New(ErkOverriddenTemplateFuncs{}, msg)
err = erk.WithParam(err, "a", TestType("hello"))
ensure(err.Error()).Equals("hello is 'type from overridden_funcs: erk_test.TestType'")
})
ensure.Run("with default kind", func(ensure ensurepkg.Ensure) {
ensure.Run("when printing type of param", func(ensure ensurepkg.Ensure) {
type TestType string
msg := "{{.a}} is {{type .a}}"
err := erk.New(ErkExample{}, msg)
err = erk.WithParam(err, "a", TestType("hello"))
ensure(err.Error()).Equals("hello is erk_test.TestType")
})
ensure.Run("when inspecting complex param", func(ensure ensurepkg.Ensure) {
type param struct {
Msg string
Map map[string]string
}
msg := "my message: {{inspect .a}}"
err := erk.New(ErkExample{}, msg)
err = erk.WithParam(err, "a", param{Msg: "hey", Map: map[string]string{"key": "value"}})
ensure(err.Error()).Equals("my message: {Msg:hey Map:map[key:value]}")
})
})
}
type ErkSimple struct{}
var _ erk.Kind = ErkSimple{}
func (ErkSimple) KindStringFor(erk.Kind) string {
return "erk_simple"
}
type ErkOverriddenTemplateFuncs struct{ erk.DefaultKind }
func (k ErkOverriddenTemplateFuncs) TemplateFuncsFor(k2 erk.Kind) template.FuncMap {
funcMap := k.DefaultKind.TemplateFuncsFor(k2)
funcMap["fancyType"] = func(v interface{}) string {
return fmt.Sprintf("'type from %s: %T'", k2.KindStringFor(k2), v)
}
return funcMap
}
func (ErkOverriddenTemplateFuncs) KindStringFor(erk.Kind) string {
return "overridden_funcs"
}