1package mergo 2 3import ( 4 "testing" 5) 6 7type Foo struct { 8 Str string 9 Bslice []byte 10} 11 12func TestIssue33Merge(t *testing.T) { 13 dest := Foo{Str: "a"} 14 toMerge := Foo{ 15 Str: "b", 16 Bslice: []byte{1, 2}, 17 } 18 if err := Merge(&dest, toMerge); err != nil { 19 t.Errorf("Error while merging: %s", err) 20 } 21 // Merge doesn't overwrite an attribute if in destination it doesn't have a zero value. 22 // In this case, Str isn't a zero value string. 23 if dest.Str != "a" { 24 t.Errorf("dest.Str should have not been override as it has a non-zero value: dest.Str(%v) != 'a'", dest.Str) 25 } 26 // If we want to override, we must use MergeWithOverwrite or Merge using WithOverride. 27 if err := Merge(&dest, toMerge, WithOverride); err != nil { 28 t.Errorf("Error while merging: %s", err) 29 } 30 if dest.Str != toMerge.Str { 31 t.Errorf("dest.Str should have been override: dest.Str(%v) != toMerge.Str(%v)", dest.Str, toMerge.Str) 32 } 33} 34