ref: 29caaddce67943d399b2ab811fa9325e23930c26
parent: 661d64c46adb4a5d1436acbcdc7b338dcfc3f696
author: Cameron Moore <moorereason@gmail.com>
date: Thu Dec 22 17:01:00 EST 2016
tpl: Update title to accept interface{} params
Updates #2822
--- a/tpl/template_funcs.go
+++ b/tpl/template_funcs.go
@@ -1457,6 +1457,17 @@
return strings.ToLower(ss), nil
}
+// title returns a copy of the input s with all Unicode letters that begin words
+// mapped to their title case.
+func title(s interface{}) (string, error) {+ ss, err := cast.ToStringE(s)
+ if err != nil {+ return "", err
+ }
+
+ return strings.Title(ss), nil
+}
+
// upper returns a copy of the input s with all Unicode letters mapped to their
// upper case.
func upper(s interface{}) (string, error) {@@ -2158,7 +2169,7 @@
"string": func(v interface{}) (string, error) { return cast.ToStringE(v) }, "sub": func(a, b interface{}) (interface{}, error) { return helpers.DoArithmetic(a, b, '-') },"substr": substr,
- "title": func(a string) string { return strings.Title(a) },+ "title": title,
"time": asTime,
"trim": trim,
"upper": upper,
--- a/tpl/template_funcs_test.go
+++ b/tpl/template_funcs_test.go
@@ -2022,6 +2022,29 @@
}
}
+func TestTitle(t *testing.T) {+ cases := []struct {+ s interface{}+ want string
+ isErr bool
+ }{+ {"test", "Test", false},+ {template.HTML("hypertext"), "Hypertext", false},+ {[]byte("bytes"), "Bytes", false},+ }
+
+ for i, c := range cases {+ res, err := title(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] title failed: want %v, got %v", i, c.want, res)+ }
+ }
+}
+
func TestUpper(t *testing.T) { cases := []struct { s interface{}--
⑨