encoding/textpb: clean-up code and fix error handling inside closures
In marshalMap, replace Map.Range and sortMap with
internal/mapsort.Range. Also, make sure to capture fatal error properly
for return.
In appendExtensions, capture fatal error properly for return. Added a
testcase that shows this was a bug.
In unmarshalAny, remove unnecessary checks and use internal/fieldnum for
Any's field numbers.
Change-Id: Id8574d5b4eb820ad961f6ad5e886f8ae2e9b90f0
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/170627
Reviewed-by: Damien Neil <dneil@google.com>
diff --git a/encoding/textpb/encode_test.go b/encoding/textpb/encode_test.go
index d185fa6..c929549 100644
--- a/encoding/textpb/encode_test.go
+++ b/encoding/textpb/encode_test.go
@@ -919,6 +919,40 @@
[pb2.opt_ext_string]: "extension field"
`,
}, {
+ desc: "extension partial returns error",
+ input: func() proto.Message {
+ m := &pb2.Extensions{}
+ setExtension(m, pb2.E_OptExtPartial, &pb2.PartialRequired{
+ OptString: scalar.String("partial1"),
+ })
+ setExtension(m, pb2.E_ExtensionsContainer_OptExtPartial, &pb2.PartialRequired{
+ OptString: scalar.String("partial2"),
+ })
+ return m
+ }(),
+ want: `[pb2.ExtensionsContainer.opt_ext_partial]: {
+ opt_string: "partial2"
+}
+[pb2.opt_ext_partial]: {
+ opt_string: "partial1"
+}
+`,
+ wantErr: true,
+ }, {
+ desc: "extension partial with AllowPartial",
+ mo: textpb.MarshalOptions{AllowPartial: true},
+ input: func() proto.Message {
+ m := &pb2.Extensions{}
+ setExtension(m, pb2.E_OptExtPartial, &pb2.PartialRequired{
+ OptString: scalar.String("partial1"),
+ })
+ return m
+ }(),
+ want: `[pb2.opt_ext_partial]: {
+ opt_string: "partial1"
+}
+`,
+ }, {
desc: "extension message field set to nil",
input: func() proto.Message {
m := &pb2.Extensions{}