Codebase list golang-github-imdario-mergo / 1624953e-2fd5-40e3-838c-a47f538e1c56/main issue33_test.go
1624953e-2fd5-40e3-838c-a47f538e1c56/main

Tree @1624953e-2fd5-40e3-838c-a47f538e1c56/main (Download .tar.gz)

issue33_test.go @1624953e-2fd5-40e3-838c-a47f538e1c56/main

6720d30
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
package mergo

import (
	"testing"
)

type Foo struct {
	Str    string
	Bslice []byte
}

func TestIssue33Merge(t *testing.T) {
	dest := Foo{Str: "a"}
	toMerge := Foo{
		Str:    "b",
		Bslice: []byte{1, 2},
	}
	if err := Merge(&dest, toMerge); err != nil {
		t.Errorf("Error while merging: %s", err)
	}
	// Merge doesn't overwrite an attribute if in destination it doesn't have a zero value.
	// In this case, Str isn't a zero value string.
	if dest.Str != "a" {
		t.Errorf("dest.Str should have not been override as it has a non-zero value: dest.Str(%v) != 'a'", dest.Str)
	}
	// If we want to override, we must use MergeWithOverwrite or Merge using WithOverride.
	if err := Merge(&dest, toMerge, WithOverride); err != nil {
		t.Errorf("Error while merging: %s", err)
	}
	if dest.Str != toMerge.Str {
		t.Errorf("dest.Str should have been override: dest.Str(%v) != toMerge.Str(%v)", dest.Str, toMerge.Str)
	}
}