...

Source file src/dario.cat/mergo/issue33_test.go

Documentation: dario.cat/mergo

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

View as plain text