hugo

Unnamed repository; edit this file 'description' to name the repository.

git clone git://git.shimmy1996.com/hugo.git
commit 4e5b4ac504b216b034eba456b6101635afc6d006
parent 6b8422bb35b7c9eada3a62563f2056eee29f94e0
Author: Cameron Moore <moorereason@gmail.com>
Date:   Thu, 22 Dec 2016 17:39:38 -0600

tpl: Update lower to accept interface{} params

Updates #2822

Diffstat:
Mtpl/template_funcs.go | 13++++++++++++-
Mtpl/template_funcs_test.go | 23+++++++++++++++++++++++
2 files changed, 35 insertions(+), 1 deletion(-)
diff --git a/tpl/template_funcs.go b/tpl/template_funcs.go
@@ -1446,6 +1446,17 @@ func chomp(text interface{}) (template.HTML, error) {
 	return template.HTML(strings.TrimRight(s, "\r\n")), nil
 }
 
+// lower returns a copy of the input s with all Unicode letters mapped to their
+// lower case.
+func lower(s interface{}) (string, error) {
+	ss, err := cast.ToStringE(s)
+	if err != nil {
+		return "", err
+	}
+
+	return strings.ToLower(ss), nil
+}
+
 // trim leading/trailing characters defined by b from a
 func trim(a interface{}, b string) (string, error) {
 	aStr, err := cast.ToStringE(a)
@@ -2090,7 +2101,7 @@ func initFuncMap() {
 		"jsonify":       jsonify,
 		"last":          last,
 		"le":            le,
-		"lower":         func(a string) string { return strings.ToLower(a) },
+		"lower":         lower,
 		"lt":            lt,
 		"markdownify":   markdownify,
 		"md5":           md5,
diff --git a/tpl/template_funcs_test.go b/tpl/template_funcs_test.go
@@ -1999,6 +1999,29 @@ func TestChomp(t *testing.T) {
 	}
 }
 
+func TestLower(t *testing.T) {
+	cases := []struct {
+		s     interface{}
+		want  string
+		isErr bool
+	}{
+		{"TEST", "test", false},
+		{template.HTML("LoWeR"), "lower", false},
+		{[]byte("BYTES"), "bytes", false},
+	}
+
+	for i, c := range cases {
+		res, err := lower(c.s)
+		if (err != nil) != c.isErr {
+			t.Fatalf("[%d] unexpected isErr state: want %v, got %v, err = %v", i, c.want, (err != nil), err)
+		}
+
+		if res != c.want {
+			t.Errorf("[%d] lower failed: want %v, got %v", i, c.want, res)
+		}
+	}
+}
+
 func TestHighlight(t *testing.T) {
 	code := "func boo() {}"
 	highlighted, err := highlight(code, "go", "")