internal/impl: support legacy message names
This change:
* Adds aberrant support for the undocumented XXX_MessageName method.
* Adds LegacyMessageTypeOf so that v1 registration can suggest a
fullname to use with a legacy message with no Descriptor support.
Change-Id: I0265bd3cf67f4d4815358148f5817695c1122dc8
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/193518
Reviewed-by: Damien Neil <dneil@google.com>
diff --git a/internal/impl/legacy_test.go b/internal/impl/legacy_test.go
index a231fec..6a11f40 100644
--- a/internal/impl/legacy_test.go
+++ b/internal/impl/legacy_test.go
@@ -664,3 +664,36 @@
}
}
}
+
+type LegacyTestMessageName1 struct{}
+
+func (*LegacyTestMessageName1) Reset() { panic("not implemented") }
+func (*LegacyTestMessageName1) String() string { panic("not implemented") }
+func (*LegacyTestMessageName1) ProtoMessage() { panic("not implemented") }
+
+type LegacyTestMessageName2 struct{}
+
+func (*LegacyTestMessageName2) Reset() { panic("not implemented") }
+func (*LegacyTestMessageName2) String() string { panic("not implemented") }
+func (*LegacyTestMessageName2) ProtoMessage() { panic("not implemented") }
+func (*LegacyTestMessageName2) XXX_MessageName() string {
+ return "google.golang.org.LegacyTestMessageName2"
+}
+
+func TestLegacyMessageName(t *testing.T) {
+ tests := []struct {
+ in piface.MessageV1
+ suggestName pref.FullName
+ wantName pref.FullName
+ }{
+ {new(LegacyTestMessageName1), "google.golang.org.LegacyTestMessageName1", "google.golang.org.LegacyTestMessageName1"},
+ {new(LegacyTestMessageName2), "", "google.golang.org.LegacyTestMessageName2"},
+ }
+
+ for _, tt := range tests {
+ mt := pimpl.Export{}.LegacyMessageTypeOf(tt.in, tt.suggestName)
+ if got := mt.Descriptor().FullName(); got != tt.wantName {
+ t.Errorf("type: %T, name mismatch: got %v, want %v", tt.in, got, tt.wantName)
+ }
+ }
+}