tpl: Update lower to accept interface{} params
authorCameron Moore <moorereason@gmail.com>
Thu, 22 Dec 2016 23:39:38 +0000 (17:39 -0600)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Fri, 23 Dec 2016 08:51:03 +0000 (09:51 +0100)
Updates #2822

tpl/template_funcs.go
tpl/template_funcs_test.go

index 4ed6a159fbd88aebd7ef61b1649c6ac8f0e5e379..7d72a587ee63be007af233eb0f75dec354d37060 100644 (file)
@@ -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,
index c5fb4c03da95d236c773a6b0e8db6022e0539a6e..e2ac80e575a80131ec9b1a67529d9ec3763dfe44 100644 (file)
@@ -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", "")