Make chomp return the type it receives

fixes #2187
This commit is contained in:
Victor Kropp 2017-10-13 22:57:52 +02:00 committed by Bjørn Erik Pedersen
parent db4b7a5c67
commit 22cd89adc4
2 changed files with 21 additions and 8 deletions

View file

@ -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.

View file

@ -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)
}
}