github.com/gogo/protobuf@v1.3.2/test/merge/merge_test.go (about) 1 package merge 2 3 import ( 4 "fmt" 5 "reflect" 6 "testing" 7 8 "github.com/gogo/protobuf/proto" 9 ) 10 11 func TestClone1(t *testing.T) { 12 f1 := &A{} 13 proto.Clone(f1) 14 } 15 16 func TestClone2(t *testing.T) { 17 f1 := &A{C: []C{{D: 1}, {D: 2}}} 18 f2 := proto.Clone(f1).(*A) 19 if !reflect.DeepEqual(f1.C, f2.C) { 20 t.Fatalf("got %v want %v", f2, f1) 21 } 22 if fmt.Sprintf("%p", f1.C) == fmt.Sprintf("%p", f2.C) { 23 t.Fatalf("slice is not deep copied") 24 } 25 } 26 27 func TestMerge1(t *testing.T) { 28 f1 := &A{} 29 f2 := &A{} 30 proto.Merge(f1, f2) 31 } 32 33 func TestMerge2(t *testing.T) { 34 f1 := &A{B: B{C: 1}} 35 f2 := &A{} 36 proto.Merge(f1, f2) 37 if f1.B.C != 1 { 38 t.Fatalf("got %d want %d", f1.B.C, 1) 39 } 40 } 41 42 func TestMerge3(t *testing.T) { 43 f1 := &A{} 44 f2 := &A{B: B{C: 1}} 45 proto.Merge(f1, f2) 46 if f1.B.C != 1 { 47 t.Fatalf("got %d want %d", f1.B.C, 1) 48 } 49 } 50 51 func TestMerge4(t *testing.T) { 52 f1 := &A{} 53 f2 := &A{C: []C{}} 54 proto.Merge(f1, f2) 55 if f1.C == nil { 56 t.Fatalf("got %v want %v", f1, []C{}) 57 } 58 } 59 60 func TestMerge5(t *testing.T) { 61 f1 := &A{C: []C{{D: 1}, {D: 2}}} 62 f2 := &A{C: []C{{D: 3}, {D: 4}}} 63 f3 := &A{C: []C{{D: 1}, {D: 2}, {D: 3}, {D: 4}}} 64 proto.Merge(f1, f2) 65 if !reflect.DeepEqual(f1, f3) { 66 t.Fatalf("got %v want %v", f1, f3) 67 } 68 }