return strings.ToLower(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) {
+ ss, err := cast.ToStringE(s)
+ if err != nil {
+ return "", err
+ }
+
+ return strings.ToUpper(ss), nil
+}
+
// trim leading/trailing characters defined by b from a
func trim(a interface{}, b string) (string, error) {
aStr, err := cast.ToStringE(a)
"title": func(a string) string { return strings.Title(a) },
"time": asTime,
"trim": trim,
- "upper": func(a string) string { return strings.ToUpper(a) },
+ "upper": upper,
"urlize": helpers.CurrentPathSpec().URLize,
"where": where,
"i18n": i18nTranslate,
}
}
+func TestUpper(t *testing.T) {
+ cases := []struct {
+ s interface{}
+ want string
+ isErr bool
+ }{
+ {"test", "TEST", false},
+ {template.HTML("UpPeR"), "UPPER", false},
+ {[]byte("bytes"), "BYTES", false},
+ }
+
+ for i, c := range cases {
+ res, err := upper(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] upper failed: want %v, got %v", i, c.want, res)
+ }
+ }
+}
+
func TestHighlight(t *testing.T) {
code := "func boo() {}"
highlighted, err := highlight(code, "go", "")