ref: 6b8422bb35b7c9eada3a62563f2056eee29f94e0
parent: f25f8373390f73d8bb8b7bdfdf49fa9fc6d0d910
author: Cameron Moore <[email protected]>
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