Disable HTML escaping for JSON in formatter

Signed-off-by: Boaz Shuster <ripcurld.github@gmail.com>
This commit is contained in:
Boaz Shuster 2017-03-27 19:50:53 +03:00
parent 7ca86796c9
commit 5766317e33
2 changed files with 18 additions and 2 deletions

View File

@ -1,6 +1,7 @@
package templates
import (
"bytes"
"encoding/json"
"strings"
"text/template"
@ -10,8 +11,12 @@ import (
// functions provided to every template.
var basicFunctions = template.FuncMap{
"json": func(v interface{}) string {
a, _ := json.Marshal(v)
return string(a)
buf := &bytes.Buffer{}
enc := json.NewEncoder(buf)
enc.SetEscapeHTML(false)
enc.Encode(v)
// Remove the trailing new line added by the encoder
return strings.TrimSpace(buf.String())
},
"split": strings.Split,
"join": strings.Join,

View File

@ -7,6 +7,17 @@ import (
"github.com/stretchr/testify/assert"
)
// Github #32120
func TestParseJSONFunctions(t *testing.T) {
tm, err := Parse(`{{json .Ports}}`)
assert.NoError(t, err)
var b bytes.Buffer
assert.NoError(t, tm.Execute(&b, map[string]string{"Ports": "0.0.0.0:2->8/udp"}))
want := "\"0.0.0.0:2->8/udp\""
assert.Equal(t, want, b.String())
}
func TestParseStringFunctions(t *testing.T) {
tm, err := Parse(`{{join (split . ":") "/"}}`)
assert.NoError(t, err)