shithub: hugo

Download patch

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