ref: 6b8422bb35b7c9eada3a62563f2056eee29f94e0
parent: f25f8373390f73d8bb8b7bdfdf49fa9fc6d0d910
author: Cameron Moore <moorereason@gmail.com>
date: Thu Dec 22 12:29:31 EST 2016
tpl: Update hasPrefix to accept interface{} params
Updates #2822
--- a/tpl/template_funcs.go
+++ b/tpl/template_funcs.go
@@ -239,6 +239,21 @@
}
+// hasPrefix tests whether the input s begins with prefix.
+func hasPrefix(s, prefix interface{}) (bool, error) {+ ss, err := cast.ToStringE(s)
+ if err != nil {+ return false, err
+ }
+
+ sp, err := cast.ToStringE(prefix)
+ if err != nil {+ return false, err
+ }
+
+ return strings.HasPrefix(ss, sp), nil
+}
+
// substr extracts parts of a string, beginning at the character at the specified
// position, and returns the specified number of characters.
//
@@ -2060,7 +2075,7 @@
"getJSON": getJSON,
"getenv": func(varName string) string { return os.Getenv(varName) },"gt": gt,
- "hasPrefix": func(a, b string) bool { return strings.HasPrefix(a, b) },+ "hasPrefix": hasPrefix,
"highlight": highlight,
"htmlEscape": htmlEscape,
"htmlUnescape": htmlUnescape,
--- a/tpl/template_funcs_test.go
+++ b/tpl/template_funcs_test.go
@@ -804,6 +804,33 @@
}
}
+func TestHasPrefix(t *testing.T) {+ cases := []struct {+ s interface{}+ prefix interface{}+ want interface{}+ isErr bool
+ }{+ {"abcd", "ab", true, false},+ {"abcd", "cd", false, false},+ {template.HTML("abcd"), "ab", true, false},+ {template.HTML("abcd"), "cd", false, false},+ {template.HTML("1234"), 12, true, false},+ {template.HTML("1234"), 34, false, false},+ {[]byte("abcd"), "ab", true, false},+ }
+
+ for i, c := range cases {+ res, err := hasPrefix(c.s, c.prefix)
+ if (err != nil) != c.isErr {+ t.Fatalf("[%d] unexpected isErr state: want %v, got %v, err = %v", i, c.isErr, err != nil, err)+ }
+ if res != c.want {+ t.Errorf("[%d] want %v, got %v", i, c.want, res)+ }
+ }
+}
+
func TestSubstr(t *testing.T) {var err error
var n int
--
⑨