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. // 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) ss, err := cast.ToStringE(s)
if err != nil { if err != nil {
return "", err 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. // Contains reports whether substr is in s.

View file

@ -19,6 +19,7 @@ import (
"testing" "testing"
"github.com/gohugoio/hugo/deps" "github.com/gohugoio/hugo/deps"
"github.com/spf13/cast"
"github.com/spf13/viper" "github.com/spf13/viper"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
@ -35,12 +36,12 @@ func TestChomp(t *testing.T) {
s interface{} s interface{}
expect interface{} expect interface{}
}{ }{
{"\n a\n", template.HTML("\n a")}, {"\n a\n", "\n a"},
{"\n a\n\n", template.HTML("\n a")}, {"\n a\n\n", "\n a"},
{"\n a\r\n", template.HTML("\n a")}, {"\n a\r\n", "\n a"},
{"\n a\n\r\n", template.HTML("\n a")}, {"\n a\n\r\n", "\n a"},
{"\n a\r\r", template.HTML("\n a")}, {"\n a\r\r", "\n a"},
{"\n a\r", template.HTML("\n a")}, {"\n a\r", "\n a"},
// errors // errors
{tstNoStringer{}, false}, {tstNoStringer{}, false},
} { } {
@ -55,6 +56,11 @@ func TestChomp(t *testing.T) {
require.NoError(t, err, errMsg) require.NoError(t, err, errMsg)
assert.Equal(t, test.expect, result, 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)
} }
} }