mirror of
				https://github.com/gohugoio/hugo.git
				synced 2024-05-11 05:54:58 +00:00 
			
		
		
		
	tpl/collections: Fix apply with namespaced template funcs
We changed the signature to `func(...interface{}) (interface{}, error)` some time ago, but sadly we had no test for this for `apply`. Now we do.
Fixes #9393
			
			
This commit is contained in:
		| @@ -460,7 +460,6 @@ complex: 80: 80 | ||||
|  | ||||
| // Issue 7528 | ||||
| func TestPartialWithZeroedArgs(t *testing.T) { | ||||
|  | ||||
| 	b := newTestSitesBuilder(t) | ||||
| 	b.WithTemplatesAdded("index.html", | ||||
| 		`  | ||||
| @@ -483,7 +482,6 @@ X123X | ||||
| X123X | ||||
| X123X | ||||
| `) | ||||
|  | ||||
| } | ||||
|  | ||||
| func TestPartialCached(t *testing.T) { | ||||
| @@ -757,3 +755,20 @@ This is single main | ||||
| `, | ||||
| 	) | ||||
| } | ||||
|  | ||||
| // Issue 9393. | ||||
| func TestApplyWithNamespace(t *testing.T) { | ||||
| 	b := newTestSitesBuilder(t) | ||||
|  | ||||
| 	b.WithTemplates( | ||||
| 		"index.html", ` | ||||
| {{ $b := slice " a " "     b "   "       c" }}		 | ||||
| {{ $a := apply $b "strings.Trim" "." " " }} | ||||
| a: {{ $a }} | ||||
| `, | ||||
| 	).WithContent("p1.md", "") | ||||
|  | ||||
| 	b.Build(BuildCfg{}) | ||||
|  | ||||
| 	b.AssertFileContent("public/index.html", `a: [a b c]`) | ||||
| } | ||||
|   | ||||
| @@ -111,15 +111,25 @@ func (ns *Namespace) lookupFunc(fname string) (reflect.Value, bool) { | ||||
|  | ||||
| 	ss := strings.SplitN(fname, ".", 2) | ||||
|  | ||||
| 	// namespace | ||||
| 	// Namespace | ||||
| 	nv, found := ns.lookupFunc(ss[0]) | ||||
| 	if !found { | ||||
| 		return reflect.Value{}, false | ||||
| 	} | ||||
|  | ||||
| 	fn, ok := nv.Interface().(func(...interface{}) (interface{}, error)) | ||||
| 	if !ok { | ||||
| 		return reflect.Value{}, false | ||||
| 	} | ||||
| 	v, err := fn() | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
| 	nv = reflect.ValueOf(v) | ||||
|  | ||||
| 	// method | ||||
| 	m := nv.MethodByName(ss[1]) | ||||
| 	// if reflect.DeepEqual(m, reflect.Value{}) { | ||||
|  | ||||
| 	if m.Kind() == reflect.Invalid { | ||||
| 		return reflect.Value{}, false | ||||
| 	} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user