1package mergo_test
2
3import (
4	"testing"
5
6	"github.com/imdario/mergo"
7)
8
9var testDataS = []struct {
10	S1            Student
11	S2            Student
12	ExpectedSlice []string
13}{
14	{Student{"Jack", []string{"a", "B"}}, Student{"Tom", []string{"1"}}, []string{"1", "a", "B"}},
15	{Student{"Jack", []string{"a", "B"}}, Student{"Tom", []string{}}, []string{"a", "B"}},
16	{Student{"Jack", []string{}}, Student{"Tom", []string{"1"}}, []string{"1"}},
17	{Student{"Jack", []string{}}, Student{"Tom", []string{}}, []string{}},
18}
19
20func TestMergeSliceWithOverrideWithAppendSlice(t *testing.T) {
21	for _, data := range testDataS {
22		err := mergo.Merge(&data.S2, data.S1, mergo.WithOverride, mergo.WithAppendSlice)
23		if err != nil {
24			t.Errorf("Error while merging %s", err)
25		}
26
27		if len(data.S2.Books) != len(data.ExpectedSlice) {
28			t.Errorf("Got %d elements in slice, but expected %d", len(data.S2.Books), len(data.ExpectedSlice))
29		}
30
31		for i, val := range data.S2.Books {
32			if val != data.ExpectedSlice[i] {
33				t.Errorf("Expected %s, but got %s while merging slice with override", data.ExpectedSlice[i], val)
34			}
35		}
36	}
37}
38