tpl/collections: Fix merge vs Params
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Wed, 18 Dec 2019 20:31:34 +0000 (21:31 +0100)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Wed, 18 Dec 2019 20:31:34 +0000 (21:31 +0100)
Fixes #6633

tpl/collections/merge.go
tpl/collections/merge_test.go

index 6916d0710946f4e66bd2b273525c3b7ea497939c..39ef932ca0887ee024dd1f70d0def03b67c6cc67 100644 (file)
@@ -40,7 +40,7 @@ func (ns *Namespace) Merge(src, dst interface{}) (interface{}, error) {
                return nil, errors.Errorf("source must be a map, got %T", src)
        }
 
-       if vsrc.Type() != vdst.Type() {
+       if vsrc.Type().Key() != vdst.Type().Key() {
                return nil, errors.Errorf("incompatible map types, got %T to %T", src, dst)
        }
 
index a08e0021bd334de3d64aab1fd9d5cebbd7797c53..57163a0d5adcf835d1309a4153d012589c2d51c5 100644 (file)
@@ -21,6 +21,8 @@ import (
        "strings"
        "testing"
 
+       "github.com/gohugoio/hugo/common/maps"
+
        "github.com/gohugoio/hugo/parser"
 
        "github.com/gohugoio/hugo/parser/metadecoders"
@@ -57,6 +59,18 @@ func TestMerge(t *testing.T) {
                        map[string]interface{}{"a": 1, "b": map[string]interface{}{"d": 1, "e": 2}},
                        map[string]interface{}{"a": 42, "c": 3, "b": map[string]interface{}{"d": 55, "e": 66, "f": 3}},
                        map[string]interface{}{"a": 1, "b": map[string]interface{}{"d": 1, "e": 2, "f": 3}, "c": 3}, false},
+               {
+                       // https://github.com/gohugoio/hugo/issues/6633
+                       "params dst",
+                       maps.Params{"a": 1, "b": 2},
+                       map[string]interface{}{"a": 42, "c": 3},
+                       maps.Params{"a": int(1), "b": int(2), "c": int(3)}, false},
+               {
+                       // https://github.com/gohugoio/hugo/issues/6633
+                       "params src",
+                       map[string]interface{}{"a": 1, "c": 2},
+                       maps.Params{"a": 42, "c": 3},
+                       map[string]interface{}{"a": int(1), "c": int(2)}, false},
                {"src nil", simpleMap, nil, simpleMap, false},
                // Error cases.
                {"dst not a map", "not a map", nil, nil, true},