proto: import change from Google. Add tests for merging a map field. When src contains a duplicate key, its value message replaces (not merges with) the value message in dst.
diff --git a/proto/clone_test.go b/proto/clone_test.go index 76720f1..f607ff4 100644 --- a/proto/clone_test.go +++ b/proto/clone_test.go
@@ -195,6 +195,9 @@ NameMapping: map[int32]string{6: "Nigel"}, MsgMapping: map[int64]*pb.FloatingPoint{ 0x4001: &pb.FloatingPoint{F: proto.Float64(2.0)}, + 0x4002: &pb.FloatingPoint{ + F: proto.Float64(2.0), + }, }, ByteMapping: map[bool][]byte{true: []byte("wowsa")}, }, @@ -203,6 +206,12 @@ 6: "Bruce", // should be overwritten 7: "Andrew", }, + MsgMapping: map[int64]*pb.FloatingPoint{ + 0x4002: &pb.FloatingPoint{ + F: proto.Float64(3.0), + Exact: proto.Bool(true), + }, // the entire message should be overwritten + }, }, want: &pb.MessageWithMap{ NameMapping: map[int32]string{ @@ -211,6 +220,9 @@ }, MsgMapping: map[int64]*pb.FloatingPoint{ 0x4001: &pb.FloatingPoint{F: proto.Float64(2.0)}, + 0x4002: &pb.FloatingPoint{ + F: proto.Float64(2.0), + }, }, ByteMapping: map[bool][]byte{true: []byte("wowsa")}, }, @@ -254,6 +266,27 @@ Union: &pb.Communique_Name{"Bobby Tables"}, }, }, + { + src: &proto3pb.Message{ + Terrain: map[string]*proto3pb.Nested{ + "kay_a": &proto3pb.Nested{Cute: true}, // replace + "kay_b": &proto3pb.Nested{Bunny: "rabbit"}, // insert + }, + }, + dst: &proto3pb.Message{ + Terrain: map[string]*proto3pb.Nested{ + "kay_a": &proto3pb.Nested{Bunny: "lost"}, // replaced + "kay_c": &proto3pb.Nested{Bunny: "bunny"}, // keep + }, + }, + want: &proto3pb.Message{ + Terrain: map[string]*proto3pb.Nested{ + "kay_a": &proto3pb.Nested{Cute: true}, + "kay_b": &proto3pb.Nested{Bunny: "rabbit"}, + "kay_c": &proto3pb.Nested{Bunny: "bunny"}, + }, + }, + }, } func TestMerge(t *testing.T) {
diff --git a/proto/proto3_proto/proto3.proto b/proto/proto3_proto/proto3.proto index 31509e4..3e9a1ab 100644 --- a/proto/proto3_proto/proto3.proto +++ b/proto/proto3_proto/proto3.proto
@@ -66,6 +66,7 @@ message Nested { string bunny = 1; + bool cute = 2; } message MessageWithMap {
diff --git a/proto/testdata/test.proto b/proto/testdata/test.proto index f607113..2ce2960 100644 --- a/proto/testdata/test.proto +++ b/proto/testdata/test.proto
@@ -488,6 +488,7 @@ message FloatingPoint { required double f = 1; + optional bool exact = 2; } message MessageWithMap {