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