blob: e59f0a0327089cdf2adf8eaf6221ea3392c39da9 [file] [log] [blame]
Joe Tsai08e00302018-11-26 22:32:06 -08001// Copyright 2018 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
Joe Tsai21ade492019-05-22 13:42:54 -04005package impl_test
Joe Tsai08e00302018-11-26 22:32:06 -08006
7import (
Damien Neil987d5702019-04-10 11:06:53 -07008 "bytes"
9 "compress/gzip"
10 "io/ioutil"
Joe Tsai08e00302018-11-26 22:32:06 -080011 "reflect"
12 "testing"
13
Joe Tsai21ade492019-05-22 13:42:54 -040014 "github.com/google/go-cmp/cmp"
Joe Tsaie0daf312020-02-25 12:51:10 -080015
Joe Tsai21ade492019-05-22 13:42:54 -040016 "google.golang.org/protobuf/internal/impl"
17 "google.golang.org/protobuf/internal/pragma"
Damien Neile89e6242019-05-13 23:55:40 -070018 "google.golang.org/protobuf/proto"
19 pdesc "google.golang.org/protobuf/reflect/protodesc"
20 pref "google.golang.org/protobuf/reflect/protoreflect"
Joe Tsai08e00302018-11-26 22:32:06 -080021
Joe Tsai55f18252020-01-11 00:25:01 -080022 proto2_20160225 "google.golang.org/protobuf/internal/testprotos/legacy/proto2_20160225_2fc053c5"
23 proto2_20160519 "google.golang.org/protobuf/internal/testprotos/legacy/proto2_20160519_a4ab9ec5"
24 proto2_20180125 "google.golang.org/protobuf/internal/testprotos/legacy/proto2_20180125_92554152"
25 proto2_20180430 "google.golang.org/protobuf/internal/testprotos/legacy/proto2_20180430_b4deda09"
26 proto2_20180814 "google.golang.org/protobuf/internal/testprotos/legacy/proto2_20180814_aa810b61"
27 proto2_20190205 "google.golang.org/protobuf/internal/testprotos/legacy/proto2_20190205_c823c79e"
28 proto3_20160225 "google.golang.org/protobuf/internal/testprotos/legacy/proto3_20160225_2fc053c5"
29 proto3_20160519 "google.golang.org/protobuf/internal/testprotos/legacy/proto3_20160519_a4ab9ec5"
30 proto3_20180125 "google.golang.org/protobuf/internal/testprotos/legacy/proto3_20180125_92554152"
31 proto3_20180430 "google.golang.org/protobuf/internal/testprotos/legacy/proto3_20180430_b4deda09"
32 proto3_20180814 "google.golang.org/protobuf/internal/testprotos/legacy/proto3_20180814_aa810b61"
33 proto3_20190205 "google.golang.org/protobuf/internal/testprotos/legacy/proto3_20190205_c823c79e"
Joe Tsaia95b29f2019-05-16 12:47:20 -070034 "google.golang.org/protobuf/types/descriptorpb"
Joe Tsai08e00302018-11-26 22:32:06 -080035)
36
37func mustLoadFileDesc(b []byte, _ []int) pref.FileDescriptor {
Damien Neil987d5702019-04-10 11:06:53 -070038 zr, err := gzip.NewReader(bytes.NewReader(b))
39 if err != nil {
40 panic(err)
41 }
42 b, err = ioutil.ReadAll(zr)
43 if err != nil {
44 panic(err)
45 }
46 p := new(descriptorpb.FileDescriptorProto)
47 err = proto.UnmarshalOptions{DiscardUnknown: true}.Unmarshal(b, p)
48 if err != nil {
49 panic(err)
50 }
51 fd, err := pdesc.NewFile(p, nil)
Joe Tsai08e00302018-11-26 22:32:06 -080052 if err != nil {
53 panic(err)
54 }
55 return fd
56}
57
58func TestDescriptor(t *testing.T) {
59 var tests []struct{ got, want pref.Descriptor }
60
61 fileDescP2_20160225 := mustLoadFileDesc(new(proto2_20160225.Message).Descriptor())
62 tests = append(tests, []struct{ got, want pref.Descriptor }{{
Joe Tsai21ade492019-05-22 13:42:54 -040063 got: impl.LegacyLoadEnumDesc(reflect.TypeOf(proto2_20160225.SiblingEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -080064 want: fileDescP2_20160225.Enums().ByName("SiblingEnum"),
65 }, {
Joe Tsai21ade492019-05-22 13:42:54 -040066 got: impl.LegacyLoadEnumDesc(reflect.TypeOf(proto2_20160225.Message_ChildEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -080067 want: fileDescP2_20160225.Messages().ByName("Message").Enums().ByName("ChildEnum"),
68 }, {
Joe Tsai21ade492019-05-22 13:42:54 -040069 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160225.SiblingMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -080070 want: fileDescP2_20160225.Messages().ByName("SiblingMessage"),
71 }, {
Joe Tsai21ade492019-05-22 13:42:54 -040072 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160225.Message_ChildMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -080073 want: fileDescP2_20160225.Messages().ByName("Message").Messages().ByName("ChildMessage"),
74 }, {
Joe Tsai21ade492019-05-22 13:42:54 -040075 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160225.Message))),
Joe Tsai08e00302018-11-26 22:32:06 -080076 want: fileDescP2_20160225.Messages().ByName("Message"),
77 }, {
Joe Tsai21ade492019-05-22 13:42:54 -040078 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160225.Message_NamedGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -080079 want: fileDescP2_20160225.Messages().ByName("Message").Messages().ByName("NamedGroup"),
80 }, {
Joe Tsai21ade492019-05-22 13:42:54 -040081 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160225.Message_OptionalGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -080082 want: fileDescP2_20160225.Messages().ByName("Message").Messages().ByName("OptionalGroup"),
83 }, {
Joe Tsai21ade492019-05-22 13:42:54 -040084 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160225.Message_RequiredGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -080085 want: fileDescP2_20160225.Messages().ByName("Message").Messages().ByName("RequiredGroup"),
86 }, {
Joe Tsai21ade492019-05-22 13:42:54 -040087 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160225.Message_RepeatedGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -080088 want: fileDescP2_20160225.Messages().ByName("Message").Messages().ByName("RepeatedGroup"),
89 }, {
Joe Tsai21ade492019-05-22 13:42:54 -040090 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160225.Message_OneofGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -080091 want: fileDescP2_20160225.Messages().ByName("Message").Messages().ByName("OneofGroup"),
92 }, {
Joe Tsai21ade492019-05-22 13:42:54 -040093 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160225.Message_ExtensionOptionalGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -080094 want: fileDescP2_20160225.Messages().ByName("Message").Messages().ByName("ExtensionOptionalGroup"),
95 }, {
Joe Tsai21ade492019-05-22 13:42:54 -040096 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160225.Message_ExtensionRepeatedGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -080097 want: fileDescP2_20160225.Messages().ByName("Message").Messages().ByName("ExtensionRepeatedGroup"),
98 }}...)
99
100 fileDescP3_20160225 := mustLoadFileDesc(new(proto3_20160225.Message).Descriptor())
101 tests = append(tests, []struct{ got, want pref.Descriptor }{{
Joe Tsai21ade492019-05-22 13:42:54 -0400102 got: impl.LegacyLoadEnumDesc(reflect.TypeOf(proto3_20160225.SiblingEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800103 want: fileDescP3_20160225.Enums().ByName("SiblingEnum"),
104 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400105 got: impl.LegacyLoadEnumDesc(reflect.TypeOf(proto3_20160225.Message_ChildEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800106 want: fileDescP3_20160225.Messages().ByName("Message").Enums().ByName("ChildEnum"),
107 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400108 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto3_20160225.SiblingMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800109 want: fileDescP3_20160225.Messages().ByName("SiblingMessage"),
110 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400111 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto3_20160225.Message_ChildMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800112 want: fileDescP3_20160225.Messages().ByName("Message").Messages().ByName("ChildMessage"),
113 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400114 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto3_20160225.Message))),
Joe Tsai08e00302018-11-26 22:32:06 -0800115 want: fileDescP3_20160225.Messages().ByName("Message"),
116 }}...)
117
118 fileDescP2_20160519 := mustLoadFileDesc(new(proto2_20160519.Message).Descriptor())
119 tests = append(tests, []struct{ got, want pref.Descriptor }{{
Joe Tsai21ade492019-05-22 13:42:54 -0400120 got: impl.LegacyLoadEnumDesc(reflect.TypeOf(proto2_20160519.SiblingEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800121 want: fileDescP2_20160519.Enums().ByName("SiblingEnum"),
122 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400123 got: impl.LegacyLoadEnumDesc(reflect.TypeOf(proto2_20160519.Message_ChildEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800124 want: fileDescP2_20160519.Messages().ByName("Message").Enums().ByName("ChildEnum"),
125 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400126 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160519.SiblingMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800127 want: fileDescP2_20160519.Messages().ByName("SiblingMessage"),
128 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400129 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160519.Message_ChildMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800130 want: fileDescP2_20160519.Messages().ByName("Message").Messages().ByName("ChildMessage"),
131 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400132 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160519.Message))),
Joe Tsai08e00302018-11-26 22:32:06 -0800133 want: fileDescP2_20160519.Messages().ByName("Message"),
134 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400135 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160519.Message_NamedGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800136 want: fileDescP2_20160519.Messages().ByName("Message").Messages().ByName("NamedGroup"),
137 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400138 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160519.Message_OptionalGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800139 want: fileDescP2_20160519.Messages().ByName("Message").Messages().ByName("OptionalGroup"),
140 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400141 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160519.Message_RequiredGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800142 want: fileDescP2_20160519.Messages().ByName("Message").Messages().ByName("RequiredGroup"),
143 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400144 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160519.Message_RepeatedGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800145 want: fileDescP2_20160519.Messages().ByName("Message").Messages().ByName("RepeatedGroup"),
146 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400147 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160519.Message_OneofGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800148 want: fileDescP2_20160519.Messages().ByName("Message").Messages().ByName("OneofGroup"),
149 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400150 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160519.Message_ExtensionOptionalGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800151 want: fileDescP2_20160519.Messages().ByName("Message").Messages().ByName("ExtensionOptionalGroup"),
152 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400153 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160519.Message_ExtensionRepeatedGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800154 want: fileDescP2_20160519.Messages().ByName("Message").Messages().ByName("ExtensionRepeatedGroup"),
155 }}...)
156
157 fileDescP3_20160519 := mustLoadFileDesc(new(proto3_20160519.Message).Descriptor())
158 tests = append(tests, []struct{ got, want pref.Descriptor }{{
Joe Tsai21ade492019-05-22 13:42:54 -0400159 got: impl.LegacyLoadEnumDesc(reflect.TypeOf(proto3_20160519.SiblingEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800160 want: fileDescP3_20160519.Enums().ByName("SiblingEnum"),
161 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400162 got: impl.LegacyLoadEnumDesc(reflect.TypeOf(proto3_20160519.Message_ChildEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800163 want: fileDescP3_20160519.Messages().ByName("Message").Enums().ByName("ChildEnum"),
164 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400165 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto3_20160519.SiblingMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800166 want: fileDescP3_20160519.Messages().ByName("SiblingMessage"),
167 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400168 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto3_20160519.Message_ChildMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800169 want: fileDescP3_20160519.Messages().ByName("Message").Messages().ByName("ChildMessage"),
170 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400171 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto3_20160519.Message))),
Joe Tsai08e00302018-11-26 22:32:06 -0800172 want: fileDescP3_20160519.Messages().ByName("Message"),
173 }}...)
174
175 fileDescP2_20180125 := mustLoadFileDesc(new(proto2_20180125.Message).Descriptor())
176 tests = append(tests, []struct{ got, want pref.Descriptor }{{
Joe Tsai21ade492019-05-22 13:42:54 -0400177 got: impl.LegacyLoadEnumDesc(reflect.TypeOf(proto2_20180125.SiblingEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800178 want: fileDescP2_20180125.Enums().ByName("SiblingEnum"),
179 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400180 got: impl.LegacyLoadEnumDesc(reflect.TypeOf(proto2_20180125.Message_ChildEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800181 want: fileDescP2_20180125.Messages().ByName("Message").Enums().ByName("ChildEnum"),
182 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400183 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180125.SiblingMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800184 want: fileDescP2_20180125.Messages().ByName("SiblingMessage"),
185 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400186 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180125.Message_ChildMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800187 want: fileDescP2_20180125.Messages().ByName("Message").Messages().ByName("ChildMessage"),
188 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400189 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180125.Message))),
Joe Tsai08e00302018-11-26 22:32:06 -0800190 want: fileDescP2_20180125.Messages().ByName("Message"),
191 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400192 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180125.Message_NamedGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800193 want: fileDescP2_20180125.Messages().ByName("Message").Messages().ByName("NamedGroup"),
194 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400195 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180125.Message_OptionalGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800196 want: fileDescP2_20180125.Messages().ByName("Message").Messages().ByName("OptionalGroup"),
197 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400198 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180125.Message_RequiredGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800199 want: fileDescP2_20180125.Messages().ByName("Message").Messages().ByName("RequiredGroup"),
200 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400201 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180125.Message_RepeatedGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800202 want: fileDescP2_20180125.Messages().ByName("Message").Messages().ByName("RepeatedGroup"),
203 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400204 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180125.Message_OneofGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800205 want: fileDescP2_20180125.Messages().ByName("Message").Messages().ByName("OneofGroup"),
206 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400207 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180125.Message_ExtensionOptionalGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800208 want: fileDescP2_20180125.Messages().ByName("Message").Messages().ByName("ExtensionOptionalGroup"),
209 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400210 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180125.Message_ExtensionRepeatedGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800211 want: fileDescP2_20180125.Messages().ByName("Message").Messages().ByName("ExtensionRepeatedGroup"),
212 }}...)
213
214 fileDescP3_20180125 := mustLoadFileDesc(new(proto3_20180125.Message).Descriptor())
215 tests = append(tests, []struct{ got, want pref.Descriptor }{{
Joe Tsai21ade492019-05-22 13:42:54 -0400216 got: impl.LegacyLoadEnumDesc(reflect.TypeOf(proto3_20180125.SiblingEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800217 want: fileDescP3_20180125.Enums().ByName("SiblingEnum"),
218 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400219 got: impl.LegacyLoadEnumDesc(reflect.TypeOf(proto3_20180125.Message_ChildEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800220 want: fileDescP3_20180125.Messages().ByName("Message").Enums().ByName("ChildEnum"),
221 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400222 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto3_20180125.SiblingMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800223 want: fileDescP3_20180125.Messages().ByName("SiblingMessage"),
224 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400225 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto3_20180125.Message_ChildMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800226 want: fileDescP3_20180125.Messages().ByName("Message").Messages().ByName("ChildMessage"),
227 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400228 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto3_20180125.Message))),
Joe Tsai08e00302018-11-26 22:32:06 -0800229 want: fileDescP3_20180125.Messages().ByName("Message"),
230 }}...)
231
232 fileDescP2_20180430 := mustLoadFileDesc(new(proto2_20180430.Message).Descriptor())
233 tests = append(tests, []struct{ got, want pref.Descriptor }{{
Joe Tsai21ade492019-05-22 13:42:54 -0400234 got: impl.LegacyLoadEnumDesc(reflect.TypeOf(proto2_20180430.SiblingEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800235 want: fileDescP2_20180430.Enums().ByName("SiblingEnum"),
236 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400237 got: impl.LegacyLoadEnumDesc(reflect.TypeOf(proto2_20180430.Message_ChildEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800238 want: fileDescP2_20180430.Messages().ByName("Message").Enums().ByName("ChildEnum"),
239 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400240 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180430.SiblingMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800241 want: fileDescP2_20180430.Messages().ByName("SiblingMessage"),
242 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400243 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180430.Message_ChildMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800244 want: fileDescP2_20180430.Messages().ByName("Message").Messages().ByName("ChildMessage"),
245 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400246 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180430.Message))),
Joe Tsai08e00302018-11-26 22:32:06 -0800247 want: fileDescP2_20180430.Messages().ByName("Message"),
248 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400249 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180430.Message_NamedGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800250 want: fileDescP2_20180430.Messages().ByName("Message").Messages().ByName("NamedGroup"),
251 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400252 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180430.Message_OptionalGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800253 want: fileDescP2_20180430.Messages().ByName("Message").Messages().ByName("OptionalGroup"),
254 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400255 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180430.Message_RequiredGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800256 want: fileDescP2_20180430.Messages().ByName("Message").Messages().ByName("RequiredGroup"),
257 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400258 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180430.Message_RepeatedGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800259 want: fileDescP2_20180430.Messages().ByName("Message").Messages().ByName("RepeatedGroup"),
260 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400261 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180430.Message_OneofGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800262 want: fileDescP2_20180430.Messages().ByName("Message").Messages().ByName("OneofGroup"),
263 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400264 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180430.Message_ExtensionOptionalGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800265 want: fileDescP2_20180430.Messages().ByName("Message").Messages().ByName("ExtensionOptionalGroup"),
266 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400267 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180430.Message_ExtensionRepeatedGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800268 want: fileDescP2_20180430.Messages().ByName("Message").Messages().ByName("ExtensionRepeatedGroup"),
269 }}...)
270
271 fileDescP3_20180430 := mustLoadFileDesc(new(proto3_20180430.Message).Descriptor())
272 tests = append(tests, []struct{ got, want pref.Descriptor }{{
Joe Tsai21ade492019-05-22 13:42:54 -0400273 got: impl.LegacyLoadEnumDesc(reflect.TypeOf(proto3_20180430.SiblingEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800274 want: fileDescP3_20180430.Enums().ByName("SiblingEnum"),
275 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400276 got: impl.LegacyLoadEnumDesc(reflect.TypeOf(proto3_20180430.Message_ChildEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800277 want: fileDescP3_20180430.Messages().ByName("Message").Enums().ByName("ChildEnum"),
278 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400279 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto3_20180430.SiblingMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800280 want: fileDescP3_20180430.Messages().ByName("SiblingMessage"),
281 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400282 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto3_20180430.Message_ChildMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800283 want: fileDescP3_20180430.Messages().ByName("Message").Messages().ByName("ChildMessage"),
284 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400285 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto3_20180430.Message))),
Joe Tsai08e00302018-11-26 22:32:06 -0800286 want: fileDescP3_20180430.Messages().ByName("Message"),
287 }}...)
288
289 fileDescP2_20180814 := mustLoadFileDesc(new(proto2_20180814.Message).Descriptor())
290 tests = append(tests, []struct{ got, want pref.Descriptor }{{
Joe Tsai21ade492019-05-22 13:42:54 -0400291 got: impl.LegacyLoadEnumDesc(reflect.TypeOf(proto2_20180814.SiblingEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800292 want: fileDescP2_20180814.Enums().ByName("SiblingEnum"),
293 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400294 got: impl.LegacyLoadEnumDesc(reflect.TypeOf(proto2_20180814.Message_ChildEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800295 want: fileDescP2_20180814.Messages().ByName("Message").Enums().ByName("ChildEnum"),
296 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400297 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180814.SiblingMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800298 want: fileDescP2_20180814.Messages().ByName("SiblingMessage"),
299 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400300 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180814.Message_ChildMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800301 want: fileDescP2_20180814.Messages().ByName("Message").Messages().ByName("ChildMessage"),
302 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400303 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180814.Message))),
Joe Tsai08e00302018-11-26 22:32:06 -0800304 want: fileDescP2_20180814.Messages().ByName("Message"),
305 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400306 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180814.Message_NamedGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800307 want: fileDescP2_20180814.Messages().ByName("Message").Messages().ByName("NamedGroup"),
308 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400309 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180814.Message_OptionalGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800310 want: fileDescP2_20180814.Messages().ByName("Message").Messages().ByName("OptionalGroup"),
311 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400312 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180814.Message_RequiredGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800313 want: fileDescP2_20180814.Messages().ByName("Message").Messages().ByName("RequiredGroup"),
314 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400315 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180814.Message_RepeatedGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800316 want: fileDescP2_20180814.Messages().ByName("Message").Messages().ByName("RepeatedGroup"),
317 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400318 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180814.Message_OneofGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800319 want: fileDescP2_20180814.Messages().ByName("Message").Messages().ByName("OneofGroup"),
320 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400321 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180814.Message_ExtensionOptionalGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800322 want: fileDescP2_20180814.Messages().ByName("Message").Messages().ByName("ExtensionOptionalGroup"),
323 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400324 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180814.Message_ExtensionRepeatedGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800325 want: fileDescP2_20180814.Messages().ByName("Message").Messages().ByName("ExtensionRepeatedGroup"),
326 }}...)
327
328 fileDescP3_20180814 := mustLoadFileDesc(new(proto3_20180814.Message).Descriptor())
329 tests = append(tests, []struct{ got, want pref.Descriptor }{{
Joe Tsai21ade492019-05-22 13:42:54 -0400330 got: impl.LegacyLoadEnumDesc(reflect.TypeOf(proto3_20180814.SiblingEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800331 want: fileDescP3_20180814.Enums().ByName("SiblingEnum"),
332 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400333 got: impl.LegacyLoadEnumDesc(reflect.TypeOf(proto3_20180814.Message_ChildEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800334 want: fileDescP3_20180814.Messages().ByName("Message").Enums().ByName("ChildEnum"),
335 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400336 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto3_20180814.SiblingMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800337 want: fileDescP3_20180814.Messages().ByName("SiblingMessage"),
338 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400339 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto3_20180814.Message_ChildMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800340 want: fileDescP3_20180814.Messages().ByName("Message").Messages().ByName("ChildMessage"),
341 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400342 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto3_20180814.Message))),
Joe Tsai08e00302018-11-26 22:32:06 -0800343 want: fileDescP3_20180814.Messages().ByName("Message"),
344 }}...)
345
Joe Tsai55f18252020-01-11 00:25:01 -0800346 fileDescP2_20190205 := mustLoadFileDesc(new(proto2_20190205.Message).Descriptor())
Joe Tsai08e00302018-11-26 22:32:06 -0800347 tests = append(tests, []struct{ got, want pref.Descriptor }{{
Joe Tsai55f18252020-01-11 00:25:01 -0800348 got: impl.LegacyLoadEnumDesc(reflect.TypeOf(proto2_20190205.SiblingEnum(0))),
349 want: fileDescP2_20190205.Enums().ByName("SiblingEnum"),
Joe Tsai08e00302018-11-26 22:32:06 -0800350 }, {
Joe Tsai55f18252020-01-11 00:25:01 -0800351 got: impl.LegacyLoadEnumDesc(reflect.TypeOf(proto2_20190205.Message_ChildEnum(0))),
352 want: fileDescP2_20190205.Messages().ByName("Message").Enums().ByName("ChildEnum"),
Joe Tsai08e00302018-11-26 22:32:06 -0800353 }, {
Joe Tsai55f18252020-01-11 00:25:01 -0800354 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20190205.SiblingMessage))),
355 want: fileDescP2_20190205.Messages().ByName("SiblingMessage"),
Joe Tsai08e00302018-11-26 22:32:06 -0800356 }, {
Joe Tsai55f18252020-01-11 00:25:01 -0800357 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20190205.Message_ChildMessage))),
358 want: fileDescP2_20190205.Messages().ByName("Message").Messages().ByName("ChildMessage"),
Joe Tsai08e00302018-11-26 22:32:06 -0800359 }, {
Joe Tsai55f18252020-01-11 00:25:01 -0800360 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20190205.Message))),
361 want: fileDescP2_20190205.Messages().ByName("Message"),
Joe Tsai08e00302018-11-26 22:32:06 -0800362 }, {
Joe Tsai55f18252020-01-11 00:25:01 -0800363 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20190205.Message_NamedGroup))),
364 want: fileDescP2_20190205.Messages().ByName("Message").Messages().ByName("NamedGroup"),
Joe Tsai08e00302018-11-26 22:32:06 -0800365 }, {
Joe Tsai55f18252020-01-11 00:25:01 -0800366 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20190205.Message_OptionalGroup))),
367 want: fileDescP2_20190205.Messages().ByName("Message").Messages().ByName("OptionalGroup"),
Joe Tsai08e00302018-11-26 22:32:06 -0800368 }, {
Joe Tsai55f18252020-01-11 00:25:01 -0800369 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20190205.Message_RequiredGroup))),
370 want: fileDescP2_20190205.Messages().ByName("Message").Messages().ByName("RequiredGroup"),
Joe Tsai08e00302018-11-26 22:32:06 -0800371 }, {
Joe Tsai55f18252020-01-11 00:25:01 -0800372 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20190205.Message_RepeatedGroup))),
373 want: fileDescP2_20190205.Messages().ByName("Message").Messages().ByName("RepeatedGroup"),
Joe Tsai08e00302018-11-26 22:32:06 -0800374 }, {
Joe Tsai55f18252020-01-11 00:25:01 -0800375 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20190205.Message_OneofGroup))),
376 want: fileDescP2_20190205.Messages().ByName("Message").Messages().ByName("OneofGroup"),
Joe Tsai08e00302018-11-26 22:32:06 -0800377 }, {
Joe Tsai55f18252020-01-11 00:25:01 -0800378 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20190205.Message_ExtensionOptionalGroup))),
379 want: fileDescP2_20190205.Messages().ByName("Message").Messages().ByName("ExtensionOptionalGroup"),
Joe Tsai08e00302018-11-26 22:32:06 -0800380 }, {
Joe Tsai55f18252020-01-11 00:25:01 -0800381 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20190205.Message_ExtensionRepeatedGroup))),
382 want: fileDescP2_20190205.Messages().ByName("Message").Messages().ByName("ExtensionRepeatedGroup"),
Joe Tsai08e00302018-11-26 22:32:06 -0800383 }}...)
384
Joe Tsai55f18252020-01-11 00:25:01 -0800385 fileDescP3_20190205 := mustLoadFileDesc(new(proto3_20190205.Message).Descriptor())
Joe Tsai08e00302018-11-26 22:32:06 -0800386 tests = append(tests, []struct{ got, want pref.Descriptor }{{
Joe Tsai55f18252020-01-11 00:25:01 -0800387 got: impl.LegacyLoadEnumDesc(reflect.TypeOf(proto3_20190205.SiblingEnum(0))),
388 want: fileDescP3_20190205.Enums().ByName("SiblingEnum"),
Joe Tsai08e00302018-11-26 22:32:06 -0800389 }, {
Joe Tsai55f18252020-01-11 00:25:01 -0800390 got: impl.LegacyLoadEnumDesc(reflect.TypeOf(proto3_20190205.Message_ChildEnum(0))),
391 want: fileDescP3_20190205.Messages().ByName("Message").Enums().ByName("ChildEnum"),
Joe Tsai08e00302018-11-26 22:32:06 -0800392 }, {
Joe Tsai55f18252020-01-11 00:25:01 -0800393 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto3_20190205.SiblingMessage))),
394 want: fileDescP3_20190205.Messages().ByName("SiblingMessage"),
Joe Tsai08e00302018-11-26 22:32:06 -0800395 }, {
Joe Tsai55f18252020-01-11 00:25:01 -0800396 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto3_20190205.Message_ChildMessage))),
397 want: fileDescP3_20190205.Messages().ByName("Message").Messages().ByName("ChildMessage"),
Joe Tsai08e00302018-11-26 22:32:06 -0800398 }, {
Joe Tsai55f18252020-01-11 00:25:01 -0800399 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto3_20190205.Message))),
400 want: fileDescP3_20190205.Messages().ByName("Message"),
Joe Tsai08e00302018-11-26 22:32:06 -0800401 }}...)
402
403 // TODO: We need a test package to compare descriptors.
404 type list interface {
405 Len() int
406 pragma.DoNotImplement
407 }
408 opts := cmp.Options{
409 cmp.Transformer("", func(x list) []interface{} {
410 out := make([]interface{}, x.Len())
411 v := reflect.ValueOf(x)
412 for i := 0; i < x.Len(); i++ {
413 m := v.MethodByName("Get")
414 out[i] = m.Call([]reflect.Value{reflect.ValueOf(i)})[0].Interface()
415 }
416 return out
417 }),
418 cmp.Transformer("", func(x pref.Descriptor) map[string]interface{} {
419 out := make(map[string]interface{})
420 v := reflect.ValueOf(x)
421 for i := 0; i < v.NumMethod(); i++ {
422 name := v.Type().Method(i).Name
423 if m := v.Method(i); m.Type().NumIn() == 0 && m.Type().NumOut() == 1 {
424 switch name {
Joe Tsaia93fdf52019-05-08 18:50:41 -0700425 case "ParentFile", "Parent":
426 // Ignore parents to avoid recursive cycle.
Joe Tsai08e00302018-11-26 22:32:06 -0800427 case "Index":
428 // Ignore index since legacy descriptors have no parent.
429 case "Options":
430 // Ignore descriptor options since protos are not cmperable.
431 case "Enums", "Messages", "Extensions":
432 // Ignore nested message and enum declarations since
433 // legacy descriptors are all created standalone.
Joe Tsaibce82b82018-12-06 09:39:03 -0800434 case "HasJSONName":
435 // Ignore this since the semantics of the field has
436 // changed across protoc and protoc-gen-go releases.
Joe Tsaiac31a352019-05-13 14:32:56 -0700437 case "ContainingOneof", "ContainingMessage", "Enum", "Message":
Joe Tsai08e00302018-11-26 22:32:06 -0800438 // Avoid descending into a dependency to avoid a cycle.
439 // Just record the full name if available.
440 //
441 // TODO: Cycle support in cmp would be useful here.
442 v := m.Call(nil)[0]
443 if !v.IsNil() {
444 out[name] = v.Interface().(pref.Descriptor).FullName()
445 }
Joe Tsai08e00302018-11-26 22:32:06 -0800446 default:
447 out[name] = m.Call(nil)[0].Interface()
448 }
449 }
450 }
451 return out
452 }),
453 cmp.Transformer("", func(v pref.Value) interface{} {
454 return v.Interface()
455 }),
456 }
457
458 for _, tt := range tests {
459 t.Run(string(tt.want.FullName()), func(t *testing.T) {
460 if diff := cmp.Diff(&tt.want, &tt.got, opts); diff != "" {
461 t.Errorf("descriptor mismatch (-want, +got):\n%s", diff)
462 }
463 })
464 }
465}