From 22cd89adc4792a3b55389d38acd4acfae3786775 Mon Sep 17 00:00:00 2001 From: Victor Kropp Date: Fri, 13 Oct 2017 22:57:52 +0200 Subject: [PATCH] Make chomp return the type it receives fixes #2187 --- tpl/strings/strings.go | 11 +++++++++-- tpl/strings/strings_test.go | 18 ++++++++++++------ 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/tpl/strings/strings.go b/tpl/strings/strings.go index f8acbfe2b..6d423391f 100644 --- a/tpl/strings/strings.go +++ b/tpl/strings/strings.go @@ -78,13 +78,20 @@ func (ns *Namespace) CountWords(s interface{}) (int, error) { } // Chomp returns a copy of s with all trailing newline characters removed. -func (ns *Namespace) Chomp(s interface{}) (template.HTML, error) { +func (ns *Namespace) Chomp(s interface{}) (interface{}, error) { ss, err := cast.ToStringE(s) if err != nil { return "", err } - return template.HTML(_strings.TrimRight(ss, "\r\n")), nil + res := _strings.TrimRight(ss, "\r\n") + switch s.(type) { + case template.HTML: + return template.HTML(res), nil + default: + return res, nil + } + } // Contains reports whether substr is in s. diff --git a/tpl/strings/strings_test.go b/tpl/strings/strings_test.go index 3ab73392c..91e71fd01 100644 --- a/tpl/strings/strings_test.go +++ b/tpl/strings/strings_test.go @@ -19,6 +19,7 @@ import ( "testing" "github.com/gohugoio/hugo/deps" + "github.com/spf13/cast" "github.com/spf13/viper" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -35,12 +36,12 @@ func TestChomp(t *testing.T) { s interface{} expect interface{} }{ - {"\n a\n", template.HTML("\n a")}, - {"\n a\n\n", template.HTML("\n a")}, - {"\n a\r\n", template.HTML("\n a")}, - {"\n a\n\r\n", template.HTML("\n a")}, - {"\n a\r\r", template.HTML("\n a")}, - {"\n a\r", template.HTML("\n a")}, + {"\n a\n", "\n a"}, + {"\n a\n\n", "\n a"}, + {"\n a\r\n", "\n a"}, + {"\n a\n\r\n", "\n a"}, + {"\n a\r\r", "\n a"}, + {"\n a\r", "\n a"}, // errors {tstNoStringer{}, false}, } { @@ -55,6 +56,11 @@ func TestChomp(t *testing.T) { require.NoError(t, err, errMsg) assert.Equal(t, test.expect, result, errMsg) + + // repeat the check with template.HTML input + result, err = ns.Chomp(template.HTML(cast.ToString(test.s))) + require.NoError(t, err, errMsg) + assert.Equal(t, template.HTML(cast.ToString(test.expect)), result, errMsg) } }