shithub: hugo

Download patch

ref: 22cd89adc4792a3b55389d38acd4acfae3786775
parent: db4b7a5c6742c75f9cd9627d3b054d3a72802ec8
author: Victor Kropp <[email protected]>
date: Fri Oct 13 18:57:52 EDT 2017

Make chomp return the type it receives

fixes #2187

--- a/tpl/strings/strings.go
+++ b/tpl/strings/strings.go
@@ -78,13 +78,20 @@
 }
 
 // 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.
--- a/tpl/strings/strings_test.go
+++ b/tpl/strings/strings_test.go
@@ -19,6 +19,7 @@
 	"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 @@
 		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 @@
 
 		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)
 	}
 }