proto, internal/protobuild: add test proto template builder

The proto package tests often test several variations of messages with a
similar shape. For example, most tests are performed with a proto2
message with a regular field, a proto2 message with an extension field,
and a proto3 message.

Add a protobuild package which can initialize all these variations from
a single template. For example, these three messages:

	&testpb.TestAllTypes{OptionalInt32: proto.Int32(1)}

	&test3pb.TestAllTypes{OptionalInt32: 1}

	m := &testpb.TestAllExtensions{}
	proto.SetExtension(m, &testpb.E_OptionalInt32, 1)

can all be constructed from the template:

	protobuild.Message{"optional_int32": 1}

This reduces redundancy in tests and will make it more practical to
test alternative code generators.

Change-Id: I3245a4bf74ee1bce957bc772fed513d427720677
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/217457
Reviewed-by: Joe Tsai <thebrokentoaster@gmail.com>
diff --git a/proto/merge_test.go b/proto/merge_test.go
index e59feb9..aa9682c 100644
--- a/proto/merge_test.go
+++ b/proto/merge_test.go
@@ -286,41 +286,41 @@
 		desc: "merge extension fields",
 		dst: func() proto.Message {
 			m := new(testpb.TestAllExtensions)
-			proto.SetExtension(m, testpb.E_OptionalInt32Extension, int32(32))
-			proto.SetExtension(m, testpb.E_OptionalNestedMessageExtension,
+			proto.SetExtension(m, testpb.E_OptionalInt32, int32(32))
+			proto.SetExtension(m, testpb.E_OptionalNestedMessage,
 				&testpb.TestAllExtensions_NestedMessage{
 					A: proto.Int32(50),
 				},
 			)
-			proto.SetExtension(m, testpb.E_RepeatedFixed32Extension, []uint32{1, 2, 3})
+			proto.SetExtension(m, testpb.E_RepeatedFixed32, []uint32{1, 2, 3})
 			return m
 		}(),
 		src: func() proto.Message {
 			m2 := new(testpb.TestAllExtensions)
-			proto.SetExtension(m2, testpb.E_OptionalInt64Extension, int64(1000))
+			proto.SetExtension(m2, testpb.E_OptionalInt64, int64(1000))
 			m := new(testpb.TestAllExtensions)
-			proto.SetExtension(m, testpb.E_OptionalInt64Extension, int64(64))
-			proto.SetExtension(m, testpb.E_OptionalNestedMessageExtension,
+			proto.SetExtension(m, testpb.E_OptionalInt64, int64(64))
+			proto.SetExtension(m, testpb.E_OptionalNestedMessage,
 				&testpb.TestAllExtensions_NestedMessage{
 					Corecursive: m2,
 				},
 			)
-			proto.SetExtension(m, testpb.E_RepeatedFixed32Extension, []uint32{4, 5, 6})
+			proto.SetExtension(m, testpb.E_RepeatedFixed32, []uint32{4, 5, 6})
 			return m
 		}(),
 		want: func() proto.Message {
 			m2 := new(testpb.TestAllExtensions)
-			proto.SetExtension(m2, testpb.E_OptionalInt64Extension, int64(1000))
+			proto.SetExtension(m2, testpb.E_OptionalInt64, int64(1000))
 			m := new(testpb.TestAllExtensions)
-			proto.SetExtension(m, testpb.E_OptionalInt32Extension, int32(32))
-			proto.SetExtension(m, testpb.E_OptionalInt64Extension, int64(64))
-			proto.SetExtension(m, testpb.E_OptionalNestedMessageExtension,
+			proto.SetExtension(m, testpb.E_OptionalInt32, int32(32))
+			proto.SetExtension(m, testpb.E_OptionalInt64, int64(64))
+			proto.SetExtension(m, testpb.E_OptionalNestedMessage,
 				&testpb.TestAllExtensions_NestedMessage{
 					A:           proto.Int32(50),
 					Corecursive: m2,
 				},
 			)
-			proto.SetExtension(m, testpb.E_RepeatedFixed32Extension, []uint32{1, 2, 3, 4, 5, 6})
+			proto.SetExtension(m, testpb.E_RepeatedFixed32, []uint32{1, 2, 3, 4, 5, 6})
 			return m
 		}(),
 	}, {