From 4e5b4ac504b216b034eba456b6101635afc6d006 Mon Sep 17 00:00:00 2001 From: Cameron Moore Date: Thu, 22 Dec 2016 17:39:38 -0600 Subject: [PATCH] tpl: Update lower to accept interface{} params Updates #2822 --- tpl/template_funcs.go | 13 ++++++++++++- tpl/template_funcs_test.go | 23 +++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/tpl/template_funcs.go b/tpl/template_funcs.go index 4ed6a159f..7d72a587e 100644 --- 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 index c5fb4c03d..e2ac80e57 100644 --- 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", "")