pull/31431/merge
tison 3 days ago committed by GitHub
commit c975b0e6ab
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -50,6 +50,7 @@ func funcMap() template.FuncMap {
// Add some extra functionality
extra := template.FuncMap{
"toToml": toTOML,
"mustToToml": mustToTOML,
"fromToml": fromTOML,
"toYaml": toYAML,
"mustToYaml": mustToYAML,
@ -155,9 +156,22 @@ func fromYAMLArray(str string) []interface{} {
func toTOML(v interface{}) string {
b := bytes.NewBuffer(nil)
e := toml.NewEncoder(b)
err := e.Encode(v)
if err != nil {
return err.Error()
if err := e.Encode(v); err != nil {
return ""
}
return b.String()
}
// mustToTOML takes an interface, marshals it to toml, and returns a string.
// It will panic if there is an error.
//
// This is designed to be called from a template when need to ensure that the
// output TOML is valid.
func mustToTOML(v interface{}) string {
b := bytes.NewBuffer(nil)
e := toml.NewEncoder(b)
if err := e.Encode(v); err != nil {
panic(err)
}
return b.String()
}

@ -25,7 +25,6 @@ import (
)
func TestFuncs(t *testing.T) {
//TODO write tests for failure cases
tests := []struct {
tpl, expect string
vars interface{}
@ -136,10 +135,9 @@ keyInElement1 = "valueInElement1"`,
assert.Equal(t, tt.expect, b.String(), tt.tpl)
}
loopMap := map[string]interface{}{
"foo": "bar",
nonSerializable := map[string]interface{}{
"foo": struct{ Fn func() }{},
}
loopMap["loop"] = []interface{}{loopMap}
mustFuncsTests := []struct {
tpl string
@ -147,18 +145,25 @@ keyInElement1 = "valueInElement1"`,
vars interface{}
}{{
tpl: `{{ mustToYaml . }}`,
vars: loopMap,
vars: nonSerializable,
}, {
tpl: `{{ mustToJson . }}`,
vars: loopMap,
vars: nonSerializable,
}, {
tpl: `{{ mustToToml . }}`,
vars: nonSerializable,
}, {
tpl: `{{ toYaml . }}`,
expect: "", // should return empty string and swallow error
vars: loopMap,
vars: nonSerializable,
}, {
tpl: `{{ toJson . }}`,
expect: "", // should return empty string and swallow error
vars: loopMap,
vars: nonSerializable,
}, {
tpl: `{{ toToml . }}`,
expect: "", // should return empty string and swallow error
vars: nonSerializable,
},
}

Loading…
Cancel
Save