1 package mergo_test
2
3 import (
4 "reflect"
5 "testing"
6
7 "github.com/imdario/mergo"
8 )
9
10 func TestIssue202(t *testing.T) {
11 tests := []struct {
12 name string
13 dst, src, want map[string]interface{}
14 }{
15 {
16 name: "slice override string",
17 dst: map[string]interface{}{
18 "x": 456,
19 "y": "foo",
20 },
21 src: map[string]interface{}{
22 "x": "123",
23 "y": []int{1, 2, 3},
24 },
25 want: map[string]interface{}{
26 "x": "123",
27 "y": []int{1, 2, 3},
28 },
29 },
30 {
31 name: "string override slice",
32 dst: map[string]interface{}{
33 "x": 456,
34 "y": []int{1, 2, 3},
35 },
36 src: map[string]interface{}{
37 "x": "123",
38 "y": "foo",
39 },
40 want: map[string]interface{}{
41 "x": "123",
42 "y": "foo",
43 },
44 },
45 {
46 name: "map override string",
47 dst: map[string]interface{}{
48 "x": 456,
49 "y": "foo",
50 },
51 src: map[string]interface{}{
52 "x": "123",
53 "y": map[string]interface{}{
54 "a": true,
55 },
56 },
57 want: map[string]interface{}{
58 "x": "123",
59 "y": map[string]interface{}{
60 "a": true,
61 },
62 },
63 },
64 {
65 name: "string override map",
66 dst: map[string]interface{}{
67 "x": 456,
68 "y": map[string]interface{}{
69 "a": true,
70 },
71 },
72 src: map[string]interface{}{
73 "x": "123",
74 "y": "foo",
75 },
76 want: map[string]interface{}{
77 "x": "123",
78 "y": "foo",
79 },
80 },
81 {
82 name: "map override map",
83 dst: map[string]interface{}{
84 "x": 456,
85 "y": map[string]interface{}{
86 "a": 10,
87 },
88 },
89 src: map[string]interface{}{
90 "x": "123",
91 "y": map[string]interface{}{
92 "a": true,
93 },
94 },
95 want: map[string]interface{}{
96 "x": "123",
97 "y": map[string]interface{}{
98 "a": true,
99 },
100 },
101 },
102 {
103 name: "map override map with merge",
104 dst: map[string]interface{}{
105 "x": 456,
106 "y": map[string]interface{}{
107 "a": 10,
108 "b": 100,
109 },
110 },
111 src: map[string]interface{}{
112 "x": "123",
113 "y": map[string]interface{}{
114 "a": true,
115 },
116 },
117 want: map[string]interface{}{
118 "x": "123",
119 "y": map[string]interface{}{
120 "a": true,
121 "b": 100,
122 },
123 },
124 },
125 }
126
127 for _, tt := range tests {
128 t.Run(tt.name, func(t *testing.T) {
129 if err := mergo.Merge(&tt.dst, tt.src, mergo.WithOverride); err != nil {
130 t.Error(err)
131 }
132
133 if !reflect.DeepEqual(tt.dst, tt.want) {
134 t.Errorf("maps not equal.\nwant:\n%v\ngot:\n%v\n", tt.want, tt.dst)
135 }
136 })
137 }
138 }
139
View as plain text