diff options
Diffstat (limited to 'tpl')
-rw-r--r-- | tpl/strings/strings.go | 11 | ||||
-rw-r--r-- | 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) } } |