// Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package proto_test

import (
	"fmt"
	"reflect"
	"sync"
	"testing"

	"github.com/google/go-cmp/cmp"

	"google.golang.org/protobuf/encoding/prototext"
	"google.golang.org/protobuf/internal/encoding/pack"
	"google.golang.org/protobuf/internal/protobuild"
	"google.golang.org/protobuf/proto"
	"google.golang.org/protobuf/reflect/protoreflect"
	"google.golang.org/protobuf/testing/protocmp"
	"google.golang.org/protobuf/types/dynamicpb"

	legacypb "google.golang.org/protobuf/internal/testprotos/legacy"
	testpb "google.golang.org/protobuf/internal/testprotos/test"
	test3pb "google.golang.org/protobuf/internal/testprotos/test3"
)

type testMerge struct {
	desc  string
	dst   protobuild.Message
	src   protobuild.Message
	want  protobuild.Message // if dst and want are nil, want = src
	types []proto.Message
}

var testMerges = []testMerge{{
	desc: "clone a large message",
	src: protobuild.Message{
		"optional_int32":       1001,
		"optional_int64":       1002,
		"optional_uint32":      1003,
		"optional_uint64":      1004,
		"optional_sint32":      1005,
		"optional_sint64":      1006,
		"optional_fixed32":     1007,
		"optional_fixed64":     1008,
		"optional_sfixed32":    1009,
		"optional_sfixed64":    1010,
		"optional_float":       1011.5,
		"optional_double":      1012.5,
		"optional_bool":        true,
		"optional_string":      "string",
		"optional_bytes":       []byte("bytes"),
		"optional_nested_enum": 1,
		"optional_nested_message": protobuild.Message{
			"a": 100,
		},
		"repeated_int32":       []int32{1001, 2001},
		"repeated_int64":       []int64{1002, 2002},
		"repeated_uint32":      []uint32{1003, 2003},
		"repeated_uint64":      []uint64{1004, 2004},
		"repeated_sint32":      []int32{1005, 2005},
		"repeated_sint64":      []int64{1006, 2006},
		"repeated_fixed32":     []uint32{1007, 2007},
		"repeated_fixed64":     []uint64{1008, 2008},
		"repeated_sfixed32":    []int32{1009, 2009},
		"repeated_sfixed64":    []int64{1010, 2010},
		"repeated_float":       []float32{1011.5, 2011.5},
		"repeated_double":      []float64{1012.5, 2012.5},
		"repeated_bool":        []bool{true, false},
		"repeated_string":      []string{"foo", "bar"},
		"repeated_bytes":       []string{"FOO", "BAR"},
		"repeated_nested_enum": []string{"FOO", "BAR"},
		"repeated_nested_message": []protobuild.Message{
			{"a": 200},
			{"a": 300},
		},
	},
}, {
	desc: "clone maps",
	src: protobuild.Message{
		"map_int32_int32":       map[int32]int32{1056: 1156, 2056: 2156},
		"map_int64_int64":       map[int64]int64{1057: 1157, 2057: 2157},
		"map_uint32_uint32":     map[uint32]uint32{1058: 1158, 2058: 2158},
		"map_uint64_uint64":     map[uint64]uint64{1059: 1159, 2059: 2159},
		"map_sint32_sint32":     map[int32]int32{1060: 1160, 2060: 2160},
		"map_sint64_sint64":     map[int64]int64{1061: 1161, 2061: 2161},
		"map_fixed32_fixed32":   map[uint32]uint32{1062: 1162, 2062: 2162},
		"map_fixed64_fixed64":   map[uint64]uint64{1063: 1163, 2063: 2163},
		"map_sfixed32_sfixed32": map[int32]int32{1064: 1164, 2064: 2164},
		"map_sfixed64_sfixed64": map[int64]int64{1065: 1165, 2065: 2165},
		"map_int32_float":       map[int32]float32{1066: 1166.5, 2066: 2166.5},
		"map_int32_double":      map[int32]float64{1067: 1167.5, 2067: 2167.5},
		"map_bool_bool":         map[bool]bool{true: false, false: true},
		"map_string_string":     map[string]string{"69.1.key": "69.1.val", "69.2.key": "69.2.val"},
		"map_string_bytes":      map[string][]byte{"70.1.key": []byte("70.1.val"), "70.2.key": []byte("70.2.val")},
		"map_string_nested_message": map[string]protobuild.Message{
			"71.1.key": {"a": 1171},
			"71.2.key": {"a": 2171},
		},
		"map_string_nested_enum": map[string]string{"73.1.key": "FOO", "73.2.key": "BAR"},
	},
	types: []proto.Message{&testpb.TestAllTypes{}, &test3pb.TestAllTypes{}},
}, {
	desc: "clone oneof uint32",
	src: protobuild.Message{
		"oneof_uint32": 1111,
	},
	types: []proto.Message{&testpb.TestAllTypes{}, &test3pb.TestAllTypes{}},
}, {
	desc: "clone oneof string",
	src: protobuild.Message{
		"oneof_string": "string",
	},
	types: []proto.Message{&testpb.TestAllTypes{}, &test3pb.TestAllTypes{}},
}, {
	desc: "clone oneof bytes",
	src: protobuild.Message{
		"oneof_bytes": "bytes",
	},
	types: []proto.Message{&testpb.TestAllTypes{}, &test3pb.TestAllTypes{}},
}, {
	desc: "clone oneof bool",
	src: protobuild.Message{
		"oneof_bool": true,
	},
	types: []proto.Message{&testpb.TestAllTypes{}, &test3pb.TestAllTypes{}},
}, {
	desc: "clone oneof uint64",
	src: protobuild.Message{
		"oneof_uint64": 100,
	},
	types: []proto.Message{&testpb.TestAllTypes{}, &test3pb.TestAllTypes{}},
}, {
	desc: "clone oneof float",
	src: protobuild.Message{
		"oneof_float": 100,
	},
	types: []proto.Message{&testpb.TestAllTypes{}, &test3pb.TestAllTypes{}},
}, {
	desc: "clone oneof double",
	src: protobuild.Message{
		"oneof_double": 1111,
	},
	types: []proto.Message{&testpb.TestAllTypes{}, &test3pb.TestAllTypes{}},
}, {
	desc: "clone oneof enum",
	src: protobuild.Message{
		"oneof_enum": 1,
	},
	types: []proto.Message{&testpb.TestAllTypes{}, &test3pb.TestAllTypes{}},
}, {
	desc: "clone oneof message",
	src: protobuild.Message{
		"oneof_nested_message": protobuild.Message{
			"a": 1,
		},
	},
	types: []proto.Message{&testpb.TestAllTypes{}, &test3pb.TestAllTypes{}},
}, {
	desc: "clone oneof group",
	src: protobuild.Message{
		"oneofgroup": protobuild.Message{
			"a": 1,
		},
	},
	types: []proto.Message{&testpb.TestAllTypes{}},
}, {
	desc: "merge bytes",
	dst: protobuild.Message{
		"optional_bytes":   []byte{1, 2, 3},
		"repeated_bytes":   [][]byte{{1, 2}, {3, 4}},
		"map_string_bytes": map[string][]byte{"alpha": {1, 2, 3}},
	},
	src: protobuild.Message{
		"optional_bytes":   []byte{4, 5, 6},
		"repeated_bytes":   [][]byte{{5, 6}, {7, 8}},
		"map_string_bytes": map[string][]byte{"alpha": {4, 5, 6}, "bravo": {1, 2, 3}},
	},
	want: protobuild.Message{
		"optional_bytes":   []byte{4, 5, 6},
		"repeated_bytes":   [][]byte{{1, 2}, {3, 4}, {5, 6}, {7, 8}},
		"map_string_bytes": map[string][]byte{"alpha": {4, 5, 6}, "bravo": {1, 2, 3}},
	},
	types: []proto.Message{&testpb.TestAllTypes{}, &test3pb.TestAllTypes{}},
}, {
	desc: "merge singular fields",
	dst: protobuild.Message{
		"optional_int32":       1,
		"optional_int64":       1,
		"optional_uint32":      1,
		"optional_uint64":      1,
		"optional_sint32":      1,
		"optional_sint64":      1,
		"optional_fixed32":     1,
		"optional_fixed64":     1,
		"optional_sfixed32":    1,
		"optional_sfixed64":    1,
		"optional_float":       1,
		"optional_double":      1,
		"optional_bool":        false,
		"optional_string":      "1",
		"optional_bytes":       "1",
		"optional_nested_enum": 1,
		"optional_nested_message": protobuild.Message{
			"a": 1,
			"corecursive": protobuild.Message{
				"optional_int64": 1,
			},
		},
	},
	src: protobuild.Message{
		"optional_int32":       2,
		"optional_int64":       2,
		"optional_uint32":      2,
		"optional_uint64":      2,
		"optional_sint32":      2,
		"optional_sint64":      2,
		"optional_fixed32":     2,
		"optional_fixed64":     2,
		"optional_sfixed32":    2,
		"optional_sfixed64":    2,
		"optional_float":       2,
		"optional_double":      2,
		"optional_bool":        true,
		"optional_string":      "2",
		"optional_bytes":       "2",
		"optional_nested_enum": 2,
		"optional_nested_message": protobuild.Message{
			"a": 2,
			"corecursive": protobuild.Message{
				"optional_int64": 2,
			},
		},
	},
	want: protobuild.Message{
		"optional_int32":       2,
		"optional_int64":       2,
		"optional_uint32":      2,
		"optional_uint64":      2,
		"optional_sint32":      2,
		"optional_sint64":      2,
		"optional_fixed32":     2,
		"optional_fixed64":     2,
		"optional_sfixed32":    2,
		"optional_sfixed64":    2,
		"optional_float":       2,
		"optional_double":      2,
		"optional_bool":        true,
		"optional_string":      "2",
		"optional_bytes":       "2",
		"optional_nested_enum": 2,
		"optional_nested_message": protobuild.Message{
			"a": 2,
			"corecursive": protobuild.Message{
				"optional_int64": 2,
			},
		},
	},
}, {
	desc: "no merge of empty singular fields",
	dst: protobuild.Message{
		"optional_int32":       1,
		"optional_int64":       1,
		"optional_uint32":      1,
		"optional_uint64":      1,
		"optional_sint32":      1,
		"optional_sint64":      1,
		"optional_fixed32":     1,
		"optional_fixed64":     1,
		"optional_sfixed32":    1,
		"optional_sfixed64":    1,
		"optional_float":       1,
		"optional_double":      1,
		"optional_bool":        false,
		"optional_string":      "1",
		"optional_bytes":       "1",
		"optional_nested_enum": 1,
		"optional_nested_message": protobuild.Message{
			"a": 1,
			"corecursive": protobuild.Message{
				"optional_int64": 1,
			},
		},
	},
	src: protobuild.Message{
		"optional_nested_message": protobuild.Message{
			"a": 1,
			"corecursive": protobuild.Message{
				"optional_int32": 2,
			},
		},
	},
	want: protobuild.Message{
		"optional_int32":       1,
		"optional_int64":       1,
		"optional_uint32":      1,
		"optional_uint64":      1,
		"optional_sint32":      1,
		"optional_sint64":      1,
		"optional_fixed32":     1,
		"optional_fixed64":     1,
		"optional_sfixed32":    1,
		"optional_sfixed64":    1,
		"optional_float":       1,
		"optional_double":      1,
		"optional_bool":        false,
		"optional_string":      "1",
		"optional_bytes":       "1",
		"optional_nested_enum": 1,
		"optional_nested_message": protobuild.Message{
			"a": 1,
			"corecursive": protobuild.Message{
				"optional_int32": 2,
				"optional_int64": 1,
			},
		},
	},
}, {
	desc: "merge list fields",
	dst: protobuild.Message{
		"repeated_int32":       []int32{1, 2, 3},
		"repeated_int64":       []int64{1, 2, 3},
		"repeated_uint32":      []uint32{1, 2, 3},
		"repeated_uint64":      []uint64{1, 2, 3},
		"repeated_sint32":      []int32{1, 2, 3},
		"repeated_sint64":      []int64{1, 2, 3},
		"repeated_fixed32":     []uint32{1, 2, 3},
		"repeated_fixed64":     []uint64{1, 2, 3},
		"repeated_sfixed32":    []int32{1, 2, 3},
		"repeated_sfixed64":    []int64{1, 2, 3},
		"repeated_float":       []float32{1, 2, 3},
		"repeated_double":      []float64{1, 2, 3},
		"repeated_bool":        []bool{true},
		"repeated_string":      []string{"a", "b", "c"},
		"repeated_bytes":       []string{"a", "b", "c"},
		"repeated_nested_enum": []int{1, 2, 3},
		"repeated_nested_message": []protobuild.Message{
			{"a": 100},
			{"a": 200},
		},
	},
	src: protobuild.Message{
		"repeated_int32":       []int32{4, 5, 6},
		"repeated_int64":       []int64{4, 5, 6},
		"repeated_uint32":      []uint32{4, 5, 6},
		"repeated_uint64":      []uint64{4, 5, 6},
		"repeated_sint32":      []int32{4, 5, 6},
		"repeated_sint64":      []int64{4, 5, 6},
		"repeated_fixed32":     []uint32{4, 5, 6},
		"repeated_fixed64":     []uint64{4, 5, 6},
		"repeated_sfixed32":    []int32{4, 5, 6},
		"repeated_sfixed64":    []int64{4, 5, 6},
		"repeated_float":       []float32{4, 5, 6},
		"repeated_double":      []float64{4, 5, 6},
		"repeated_bool":        []bool{false},
		"repeated_string":      []string{"d", "e", "f"},
		"repeated_bytes":       []string{"d", "e", "f"},
		"repeated_nested_enum": []int{4, 5, 6},
		"repeated_nested_message": []protobuild.Message{
			{"a": 300},
			{"a": 400},
		},
	},
	want: protobuild.Message{
		"repeated_int32":       []int32{1, 2, 3, 4, 5, 6},
		"repeated_int64":       []int64{1, 2, 3, 4, 5, 6},
		"repeated_uint32":      []uint32{1, 2, 3, 4, 5, 6},
		"repeated_uint64":      []uint64{1, 2, 3, 4, 5, 6},
		"repeated_sint32":      []int32{1, 2, 3, 4, 5, 6},
		"repeated_sint64":      []int64{1, 2, 3, 4, 5, 6},
		"repeated_fixed32":     []uint32{1, 2, 3, 4, 5, 6},
		"repeated_fixed64":     []uint64{1, 2, 3, 4, 5, 6},
		"repeated_sfixed32":    []int32{1, 2, 3, 4, 5, 6},
		"repeated_sfixed64":    []int64{1, 2, 3, 4, 5, 6},
		"repeated_float":       []float32{1, 2, 3, 4, 5, 6},
		"repeated_double":      []float64{1, 2, 3, 4, 5, 6},
		"repeated_bool":        []bool{true, false},
		"repeated_string":      []string{"a", "b", "c", "d", "e", "f"},
		"repeated_bytes":       []string{"a", "b", "c", "d", "e", "f"},
		"repeated_nested_enum": []int{1, 2, 3, 4, 5, 6},
		"repeated_nested_message": []protobuild.Message{
			{"a": 100},
			{"a": 200},
			{"a": 300},
			{"a": 400},
		},
	},
}, {
	desc: "merge map fields",
	dst: protobuild.Message{
		"map_int32_int32":       map[int]int{1: 1, 3: 1},
		"map_int64_int64":       map[int]int{1: 1, 3: 1},
		"map_uint32_uint32":     map[int]int{1: 1, 3: 1},
		"map_uint64_uint64":     map[int]int{1: 1, 3: 1},
		"map_sint32_sint32":     map[int]int{1: 1, 3: 1},
		"map_sint64_sint64":     map[int]int{1: 1, 3: 1},
		"map_fixed32_fixed32":   map[int]int{1: 1, 3: 1},
		"map_fixed64_fixed64":   map[int]int{1: 1, 3: 1},
		"map_sfixed32_sfixed32": map[int]int{1: 1, 3: 1},
		"map_sfixed64_sfixed64": map[int]int{1: 1, 3: 1},
		"map_int32_float":       map[int]int{1: 1, 3: 1},
		"map_int32_double":      map[int]int{1: 1, 3: 1},
		"map_bool_bool":         map[bool]bool{true: true},
		"map_string_string":     map[string]string{"a": "1", "ab": "1"},
		"map_string_bytes":      map[string]string{"a": "1", "ab": "1"},
		"map_string_nested_message": map[string]protobuild.Message{
			"a": {"a": 1},
			"ab": {
				"a": 1,
				"corecursive": protobuild.Message{
					"map_int32_int32": map[int]int{1: 1, 3: 1},
				},
			},
		},
		"map_string_nested_enum": map[string]int{"a": 1, "ab": 1},
	},
	src: protobuild.Message{
		"map_int32_int32":       map[int]int{2: 2, 3: 2},
		"map_int64_int64":       map[int]int{2: 2, 3: 2},
		"map_uint32_uint32":     map[int]int{2: 2, 3: 2},
		"map_uint64_uint64":     map[int]int{2: 2, 3: 2},
		"map_sint32_sint32":     map[int]int{2: 2, 3: 2},
		"map_sint64_sint64":     map[int]int{2: 2, 3: 2},
		"map_fixed32_fixed32":   map[int]int{2: 2, 3: 2},
		"map_fixed64_fixed64":   map[int]int{2: 2, 3: 2},
		"map_sfixed32_sfixed32": map[int]int{2: 2, 3: 2},
		"map_sfixed64_sfixed64": map[int]int{2: 2, 3: 2},
		"map_int32_float":       map[int]int{2: 2, 3: 2},
		"map_int32_double":      map[int]int{2: 2, 3: 2},
		"map_bool_bool":         map[bool]bool{false: false},
		"map_string_string":     map[string]string{"b": "2", "ab": "2"},
		"map_string_bytes":      map[string]string{"b": "2", "ab": "2"},
		"map_string_nested_message": map[string]protobuild.Message{
			"b": {"a": 2},
			"ab": {
				"a": 2,
				"corecursive": protobuild.Message{
					"map_int32_int32": map[int]int{2: 2, 3: 2},
				},
			},
		},
		"map_string_nested_enum": map[string]int{"b": 2, "ab": 2},
	},
	want: protobuild.Message{
		"map_int32_int32":       map[int]int{1: 1, 2: 2, 3: 2},
		"map_int64_int64":       map[int]int{1: 1, 2: 2, 3: 2},
		"map_uint32_uint32":     map[int]int{1: 1, 2: 2, 3: 2},
		"map_uint64_uint64":     map[int]int{1: 1, 2: 2, 3: 2},
		"map_sint32_sint32":     map[int]int{1: 1, 2: 2, 3: 2},
		"map_sint64_sint64":     map[int]int{1: 1, 2: 2, 3: 2},
		"map_fixed32_fixed32":   map[int]int{1: 1, 2: 2, 3: 2},
		"map_fixed64_fixed64":   map[int]int{1: 1, 2: 2, 3: 2},
		"map_sfixed32_sfixed32": map[int]int{1: 1, 2: 2, 3: 2},
		"map_sfixed64_sfixed64": map[int]int{1: 1, 2: 2, 3: 2},
		"map_int32_float":       map[int]int{1: 1, 2: 2, 3: 2},
		"map_int32_double":      map[int]int{1: 1, 2: 2, 3: 2},
		"map_bool_bool":         map[bool]bool{true: true, false: false},
		"map_string_string":     map[string]string{"a": "1", "b": "2", "ab": "2"},
		"map_string_bytes":      map[string]string{"a": "1", "b": "2", "ab": "2"},
		"map_string_nested_message": map[string]protobuild.Message{
			"a": {"a": 1},
			"b": {"a": 2},
			"ab": {
				"a": 2,
				"corecursive": protobuild.Message{
					// The map item "ab" was entirely replaced, so
					// this does not contain 1:1 from dst.
					"map_int32_int32": map[int]int{2: 2, 3: 2},
				},
			},
		},
		"map_string_nested_enum": map[string]int{"a": 1, "b": 2, "ab": 2},
	},
	types: []proto.Message{&testpb.TestAllTypes{}, &test3pb.TestAllTypes{}},
}, {
	desc: "merge oneof message fields",
	dst: protobuild.Message{
		"oneof_nested_message": protobuild.Message{
			"a": 100,
		},
	},
	src: protobuild.Message{
		"oneof_nested_message": protobuild.Message{
			"corecursive": protobuild.Message{
				"optional_int64": 1000,
			},
		},
	},
	want: protobuild.Message{
		"oneof_nested_message": protobuild.Message{
			"a": 100,
			"corecursive": protobuild.Message{
				"optional_int64": 1000,
			},
		},
	},
	types: []proto.Message{&testpb.TestAllTypes{}, &test3pb.TestAllTypes{}},
}, {
	desc: "merge oneof scalar fields",
	dst: protobuild.Message{
		"oneof_uint32": 100,
	},
	src: protobuild.Message{
		"oneof_float": 3.14152,
	},
	want: protobuild.Message{
		"oneof_float": 3.14152,
	},
	types: []proto.Message{&testpb.TestAllTypes{}, &test3pb.TestAllTypes{}},
}, {
	desc: "merge unknown fields",
	dst: protobuild.Message{
		protobuild.Unknown: pack.Message{
			pack.Tag{Number: 50000, Type: pack.VarintType}, pack.Svarint(-5),
		}.Marshal(),
	},
	src: protobuild.Message{
		protobuild.Unknown: pack.Message{
			pack.Tag{Number: 500000, Type: pack.VarintType}, pack.Svarint(-50),
		}.Marshal(),
	},
	want: protobuild.Message{
		protobuild.Unknown: pack.Message{
			pack.Tag{Number: 50000, Type: pack.VarintType}, pack.Svarint(-5),
			pack.Tag{Number: 500000, Type: pack.VarintType}, pack.Svarint(-50),
		}.Marshal(),
	},
}, {
	desc: "clone legacy message",
	src: protobuild.Message{"f1": protobuild.Message{
		"optional_int32":        1,
		"optional_int64":        1,
		"optional_uint32":       1,
		"optional_uint64":       1,
		"optional_sint32":       1,
		"optional_sint64":       1,
		"optional_fixed32":      1,
		"optional_fixed64":      1,
		"optional_sfixed32":     1,
		"optional_sfixed64":     1,
		"optional_float":        1,
		"optional_double":       1,
		"optional_bool":         true,
		"optional_string":       "string",
		"optional_bytes":        "bytes",
		"optional_sibling_enum": 1,
		"optional_sibling_message": protobuild.Message{
			"f1": "value",
		},
		"repeated_int32":        []int32{1},
		"repeated_int64":        []int64{1},
		"repeated_uint32":       []uint32{1},
		"repeated_uint64":       []uint64{1},
		"repeated_sint32":       []int32{1},
		"repeated_sint64":       []int64{1},
		"repeated_fixed32":      []uint32{1},
		"repeated_fixed64":      []uint64{1},
		"repeated_sfixed32":     []int32{1},
		"repeated_sfixed64":     []int64{1},
		"repeated_float":        []float32{1},
		"repeated_double":       []float64{1},
		"repeated_bool":         []bool{true},
		"repeated_string":       []string{"string"},
		"repeated_bytes":        []string{"bytes"},
		"repeated_sibling_enum": []int{1},
		"repeated_sibling_message": []protobuild.Message{
			{"f1": "1"},
		},
		"map_bool_int32":    map[bool]int{true: 1},
		"map_bool_int64":    map[bool]int{true: 1},
		"map_bool_uint32":   map[bool]int{true: 1},
		"map_bool_uint64":   map[bool]int{true: 1},
		"map_bool_sint32":   map[bool]int{true: 1},
		"map_bool_sint64":   map[bool]int{true: 1},
		"map_bool_fixed32":  map[bool]int{true: 1},
		"map_bool_fixed64":  map[bool]int{true: 1},
		"map_bool_sfixed32": map[bool]int{true: 1},
		"map_bool_sfixed64": map[bool]int{true: 1},
		"map_bool_float":    map[bool]int{true: 1},
		"map_bool_double":   map[bool]int{true: 1},
		"map_bool_bool":     map[bool]bool{true: false},
		"map_bool_string":   map[bool]string{true: "1"},
		"map_bool_bytes":    map[bool]string{true: "1"},
		"map_bool_sibling_message": map[bool]protobuild.Message{
			true: {"f1": "1"},
		},
		"map_bool_sibling_enum": map[bool]int{true: 1},
		"oneof_sibling_message": protobuild.Message{
			"f1": "1",
		},
	}},
	types: []proto.Message{&legacypb.Legacy{}},
}}

func TestMerge(t *testing.T) {
	for _, tt := range testMerges {
		for _, mt := range templateMessages(tt.types...) {
			t.Run(fmt.Sprintf("%s (%v)", tt.desc, mt.Descriptor().FullName()), func(t *testing.T) {
				dst := mt.New().Interface()
				tt.dst.Build(dst.ProtoReflect())

				src := mt.New().Interface()
				tt.src.Build(src.ProtoReflect())

				want := mt.New().Interface()
				if tt.dst == nil && tt.want == nil {
					tt.src.Build(want.ProtoReflect())
				} else {
					tt.want.Build(want.ProtoReflect())
				}

				// Merge should be semantically equivalent to unmarshaling the
				// encoded form of src into the current dst.
				b1, err := proto.MarshalOptions{AllowPartial: true}.Marshal(dst)
				if err != nil {
					t.Fatalf("Marshal(dst) error: %v", err)
				}
				b2, err := proto.MarshalOptions{AllowPartial: true}.Marshal(src)
				if err != nil {
					t.Fatalf("Marshal(src) error: %v", err)
				}
				unmarshaled := dst.ProtoReflect().New().Interface()
				err = proto.UnmarshalOptions{AllowPartial: true}.Unmarshal(append(b1, b2...), unmarshaled)
				if err != nil {
					t.Fatalf("Unmarshal() error: %v", err)
				}
				if !proto.Equal(unmarshaled, want) {
					t.Fatalf("Unmarshal(Marshal(dst)+Marshal(src)) mismatch:\n got %v\nwant %v\ndiff (-want,+got):\n%v", unmarshaled, want, cmp.Diff(want, unmarshaled, protocmp.Transform()))
				}

				// Test heterogeneous MessageTypes by merging into a
				// dynamic message.
				ddst := dynamicpb.NewMessage(mt.Descriptor())
				tt.dst.Build(ddst.ProtoReflect())
				proto.Merge(ddst, src)
				if !proto.Equal(ddst, want) {
					t.Fatalf("Merge() into dynamic message mismatch:\n got %v\nwant %v\ndiff (-want,+got):\n%v", ddst, want, cmp.Diff(want, ddst, protocmp.Transform()))
				}

				proto.Merge(dst, src)
				if !proto.Equal(dst, want) {
					t.Fatalf("Merge() mismatch:\n got %v\nwant %v\ndiff (-want,+got):\n%v", dst, want, cmp.Diff(want, dst, protocmp.Transform()))
				}
				mutateValue(protoreflect.ValueOfMessage(src.ProtoReflect()))
				if !proto.Equal(dst, want) {
					t.Fatalf("mutation observed after modifying source:\n got %v\nwant %v\ndiff (-want,+got):\n%v", dst, want, cmp.Diff(want, dst, protocmp.Transform()))
				}
			})
		}
	}
}

func TestMergeFromNil(t *testing.T) {
	dst := &testpb.TestAllTypes{}
	proto.Merge(dst, (*testpb.TestAllTypes)(nil))
	if !proto.Equal(dst, &testpb.TestAllTypes{}) {
		t.Errorf("destination should be empty after merging from nil message; got:\n%v", prototext.Format(dst))
	}
}

// TestMergeAberrant tests inputs that are beyond the protobuf data model.
// Just because there is a test for the current behavior does not mean that
// this will behave the same way in the future.
func TestMergeAberrant(t *testing.T) {
	tests := []struct {
		label string
		dst   proto.Message
		src   proto.Message
		check func(proto.Message) bool
	}{{
		label: "Proto2EmptyBytes",
		dst:   &testpb.TestAllTypes{OptionalBytes: nil},
		src:   &testpb.TestAllTypes{OptionalBytes: []byte{}},
		check: func(m proto.Message) bool {
			return m.(*testpb.TestAllTypes).OptionalBytes != nil
		},
	}, {
		label: "Proto3EmptyBytes",
		dst:   &test3pb.TestAllTypes{OptionalBytes: nil},
		src:   &test3pb.TestAllTypes{OptionalBytes: []byte{}},
		check: func(m proto.Message) bool {
			return m.(*test3pb.TestAllTypes).OptionalBytes == nil
		},
	}, {
		label: "EmptyList",
		dst:   &testpb.TestAllTypes{RepeatedInt32: nil},
		src:   &testpb.TestAllTypes{RepeatedInt32: []int32{}},
		check: func(m proto.Message) bool {
			return m.(*testpb.TestAllTypes).RepeatedInt32 == nil
		},
	}, {
		label: "ListWithNilBytes",
		dst:   &testpb.TestAllTypes{RepeatedBytes: nil},
		src:   &testpb.TestAllTypes{RepeatedBytes: [][]byte{nil}},
		check: func(m proto.Message) bool {
			return reflect.DeepEqual(m.(*testpb.TestAllTypes).RepeatedBytes, [][]byte{{}})
		},
	}, {
		label: "ListWithEmptyBytes",
		dst:   &testpb.TestAllTypes{RepeatedBytes: nil},
		src:   &testpb.TestAllTypes{RepeatedBytes: [][]byte{{}}},
		check: func(m proto.Message) bool {
			return reflect.DeepEqual(m.(*testpb.TestAllTypes).RepeatedBytes, [][]byte{{}})
		},
	}, {
		label: "ListWithNilMessage",
		dst:   &testpb.TestAllTypes{RepeatedNestedMessage: nil},
		src:   &testpb.TestAllTypes{RepeatedNestedMessage: []*testpb.TestAllTypes_NestedMessage{nil}},
		check: func(m proto.Message) bool {
			return m.(*testpb.TestAllTypes).RepeatedNestedMessage[0] != nil
		},
	}, {
		label: "EmptyMap",
		dst:   &testpb.TestAllTypes{MapStringString: nil},
		src:   &testpb.TestAllTypes{MapStringString: map[string]string{}},
		check: func(m proto.Message) bool {
			return m.(*testpb.TestAllTypes).MapStringString == nil
		},
	}, {
		label: "MapWithNilBytes",
		dst:   &testpb.TestAllTypes{MapStringBytes: nil},
		src:   &testpb.TestAllTypes{MapStringBytes: map[string][]byte{"k": nil}},
		check: func(m proto.Message) bool {
			return reflect.DeepEqual(m.(*testpb.TestAllTypes).MapStringBytes, map[string][]byte{"k": {}})
		},
	}, {
		label: "MapWithEmptyBytes",
		dst:   &testpb.TestAllTypes{MapStringBytes: nil},
		src:   &testpb.TestAllTypes{MapStringBytes: map[string][]byte{"k": {}}},
		check: func(m proto.Message) bool {
			return reflect.DeepEqual(m.(*testpb.TestAllTypes).MapStringBytes, map[string][]byte{"k": {}})
		},
	}, {
		label: "MapWithNilMessage",
		dst:   &testpb.TestAllTypes{MapStringNestedMessage: nil},
		src:   &testpb.TestAllTypes{MapStringNestedMessage: map[string]*testpb.TestAllTypes_NestedMessage{"k": nil}},
		check: func(m proto.Message) bool {
			return m.(*testpb.TestAllTypes).MapStringNestedMessage["k"] != nil
		},
	}, {
		label: "OneofWithTypedNilWrapper",
		dst:   &testpb.TestAllTypes{OneofField: nil},
		src:   &testpb.TestAllTypes{OneofField: (*testpb.TestAllTypes_OneofNestedMessage)(nil)},
		check: func(m proto.Message) bool {
			return m.(*testpb.TestAllTypes).OneofField == nil
		},
	}, {
		label: "OneofWithNilMessage",
		dst:   &testpb.TestAllTypes{OneofField: nil},
		src:   &testpb.TestAllTypes{OneofField: &testpb.TestAllTypes_OneofNestedMessage{OneofNestedMessage: nil}},
		check: func(m proto.Message) bool {
			return m.(*testpb.TestAllTypes).OneofField.(*testpb.TestAllTypes_OneofNestedMessage).OneofNestedMessage != nil
		},
		// TODO: extension, nil message
		// TODO: repeated extension, nil
		// TODO: extension bytes
		// TODO: repeated extension, nil message
	}}

	for _, tt := range tests {
		t.Run(tt.label, func(t *testing.T) {
			var pass bool
			func() {
				defer func() { recover() }()
				proto.Merge(tt.dst, tt.src)
				pass = tt.check(tt.dst)
			}()
			if !pass {
				t.Error("check failed")
			}
		})
	}
}

func TestMergeRace(t *testing.T) {
	dst := new(testpb.TestAllTypes)
	srcs := []*testpb.TestAllTypes{
		{OptionalInt32: proto.Int32(1)},
		{OptionalString: proto.String("hello")},
		{RepeatedInt32: []int32{2, 3, 4}},
		{RepeatedString: []string{"goodbye"}},
		{MapStringString: map[string]string{"key": "value"}},
		{OptionalNestedMessage: &testpb.TestAllTypes_NestedMessage{
			A: proto.Int32(5),
		}},
		func() *testpb.TestAllTypes {
			m := new(testpb.TestAllTypes)
			m.ProtoReflect().SetUnknown(pack.Message{
				pack.Tag{Number: 50000, Type: pack.VarintType}, pack.Svarint(-5),
			}.Marshal())
			return m
		}(),
	}

	// It should be safe to concurrently merge non-overlapping fields.
	var wg sync.WaitGroup
	defer wg.Wait()
	for _, src := range srcs {
		wg.Add(1)
		go func(src proto.Message) {
			defer wg.Done()
			proto.Merge(dst, src)
		}(src)
	}
}

func TestMergeSelf(t *testing.T) {
	got := &testpb.TestAllTypes{
		OptionalInt32:   proto.Int32(1),
		OptionalString:  proto.String("hello"),
		RepeatedInt32:   []int32{2, 3, 4},
		RepeatedString:  []string{"goodbye"},
		MapStringString: map[string]string{"key": "value"},
		OptionalNestedMessage: &testpb.TestAllTypes_NestedMessage{
			A: proto.Int32(5),
		},
	}
	got.ProtoReflect().SetUnknown(pack.Message{
		pack.Tag{Number: 50000, Type: pack.VarintType}, pack.Svarint(-5),
	}.Marshal())
	proto.Merge(got, got)

	// The main impact of merging to self is that repeated fields and
	// unknown fields are doubled.
	want := &testpb.TestAllTypes{
		OptionalInt32:   proto.Int32(1),
		OptionalString:  proto.String("hello"),
		RepeatedInt32:   []int32{2, 3, 4, 2, 3, 4},
		RepeatedString:  []string{"goodbye", "goodbye"},
		MapStringString: map[string]string{"key": "value"},
		OptionalNestedMessage: &testpb.TestAllTypes_NestedMessage{
			A: proto.Int32(5),
		},
	}
	want.ProtoReflect().SetUnknown(pack.Message{
		pack.Tag{Number: 50000, Type: pack.VarintType}, pack.Svarint(-5),
		pack.Tag{Number: 50000, Type: pack.VarintType}, pack.Svarint(-5),
	}.Marshal())

	if !proto.Equal(got, want) {
		t.Errorf("Equal mismatch:\ngot  %v\nwant %v", got, want)
	}
}

func TestClone(t *testing.T) {
	want := &testpb.TestAllTypes{
		OptionalInt32: proto.Int32(1),
	}
	got := proto.Clone(want).(*testpb.TestAllTypes)
	if !proto.Equal(got, want) {
		t.Errorf("Clone(src) != src:\n got %v\nwant %v", got, want)
	}
}

// mutateValue changes a Value, returning a new value.
//
// For scalar values, it returns a value different from the input.
// For Message, List, and Map values, it mutates the input and returns it.
func mutateValue(v protoreflect.Value) protoreflect.Value {
	switch v := v.Interface().(type) {
	case bool:
		return protoreflect.ValueOfBool(!v)
	case protoreflect.EnumNumber:
		return protoreflect.ValueOfEnum(v + 1)
	case int32:
		return protoreflect.ValueOfInt32(v + 1)
	case int64:
		return protoreflect.ValueOfInt64(v + 1)
	case uint32:
		return protoreflect.ValueOfUint32(v + 1)
	case uint64:
		return protoreflect.ValueOfUint64(v + 1)
	case float32:
		return protoreflect.ValueOfFloat32(v + 1)
	case float64:
		return protoreflect.ValueOfFloat64(v + 1)
	case []byte:
		for i := range v {
			v[i]++
		}
		return protoreflect.ValueOfBytes(v)
	case string:
		return protoreflect.ValueOfString("_" + v)
	case protoreflect.Message:
		v.Range(func(fd protoreflect.FieldDescriptor, val protoreflect.Value) bool {
			v.Set(fd, mutateValue(val))
			return true
		})
		return protoreflect.ValueOfMessage(v)
	case protoreflect.List:
		for i := 0; i < v.Len(); i++ {
			v.Set(i, mutateValue(v.Get(i)))
		}
		return protoreflect.ValueOfList(v)
	case protoreflect.Map:
		v.Range(func(mk protoreflect.MapKey, mv protoreflect.Value) bool {
			v.Set(mk, mutateValue(mv))
			return true
		})
		return protoreflect.ValueOfMap(v)
	default:
		panic(fmt.Sprintf("unknown value type %T", v))
	}
}
