blob: 6d994ac769c5e9e9ddd4f52718b578e0ea56d38b [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
5package legacy
6
7import (
8 "reflect"
9 "testing"
10
11 pragma "github.com/golang/protobuf/v2/internal/pragma"
12 pref "github.com/golang/protobuf/v2/reflect/protoreflect"
13 ptype "github.com/golang/protobuf/v2/reflect/prototype"
14 cmp "github.com/google/go-cmp/cmp"
15
16 proto2_20160225 "github.com/golang/protobuf/v2/internal/testprotos/legacy/proto2.v0.0.0-20160225-2fc053c5"
17 proto2_20160519 "github.com/golang/protobuf/v2/internal/testprotos/legacy/proto2.v0.0.0-20160519-a4ab9ec5"
18 proto2_20180125 "github.com/golang/protobuf/v2/internal/testprotos/legacy/proto2.v1.0.0-20180125-92554152"
19 proto2_20180430 "github.com/golang/protobuf/v2/internal/testprotos/legacy/proto2.v1.1.0-20180430-b4deda09"
20 proto2_20180814 "github.com/golang/protobuf/v2/internal/testprotos/legacy/proto2.v1.2.0-20180814-aa810b61"
21 proto2_20181126 "github.com/golang/protobuf/v2/internal/testprotos/legacy/proto2.v1.2.1-20181126-8d0c54c1"
22 proto3_20160225 "github.com/golang/protobuf/v2/internal/testprotos/legacy/proto3.v0.0.0-20160225-2fc053c5"
23 proto3_20160519 "github.com/golang/protobuf/v2/internal/testprotos/legacy/proto3.v0.0.0-20160519-a4ab9ec5"
24 proto3_20180125 "github.com/golang/protobuf/v2/internal/testprotos/legacy/proto3.v1.0.0-20180125-92554152"
25 proto3_20180430 "github.com/golang/protobuf/v2/internal/testprotos/legacy/proto3.v1.1.0-20180430-b4deda09"
26 proto3_20180814 "github.com/golang/protobuf/v2/internal/testprotos/legacy/proto3.v1.2.0-20180814-aa810b61"
27 proto3_20181126 "github.com/golang/protobuf/v2/internal/testprotos/legacy/proto3.v1.2.1-20181126-8d0c54c1"
28)
29
30func mustLoadFileDesc(b []byte, _ []int) pref.FileDescriptor {
31 fd, err := ptype.NewFileFromDescriptorProto(legacyLoadFileDesc(b), nil)
32 if err != nil {
33 panic(err)
34 }
35 return fd
36}
37
38func TestDescriptor(t *testing.T) {
39 var tests []struct{ got, want pref.Descriptor }
40
41 fileDescP2_20160225 := mustLoadFileDesc(new(proto2_20160225.Message).Descriptor())
42 tests = append(tests, []struct{ got, want pref.Descriptor }{{
43 got: legacyLoadEnumDesc(reflect.TypeOf(proto2_20160225.SiblingEnum(0))),
44 want: fileDescP2_20160225.Enums().ByName("SiblingEnum"),
45 }, {
46 got: legacyLoadEnumDesc(reflect.TypeOf(proto2_20160225.Message_ChildEnum(0))),
47 want: fileDescP2_20160225.Messages().ByName("Message").Enums().ByName("ChildEnum"),
48 }, {
49 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160225.SiblingMessage))),
50 want: fileDescP2_20160225.Messages().ByName("SiblingMessage"),
51 }, {
52 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160225.Message_ChildMessage))),
53 want: fileDescP2_20160225.Messages().ByName("Message").Messages().ByName("ChildMessage"),
54 }, {
55 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160225.Message))),
56 want: fileDescP2_20160225.Messages().ByName("Message"),
57 }, {
58 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160225.Message_NamedGroup))),
59 want: fileDescP2_20160225.Messages().ByName("Message").Messages().ByName("NamedGroup"),
60 }, {
61 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160225.Message_OptionalGroup))),
62 want: fileDescP2_20160225.Messages().ByName("Message").Messages().ByName("OptionalGroup"),
63 }, {
64 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160225.Message_RequiredGroup))),
65 want: fileDescP2_20160225.Messages().ByName("Message").Messages().ByName("RequiredGroup"),
66 }, {
67 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160225.Message_RepeatedGroup))),
68 want: fileDescP2_20160225.Messages().ByName("Message").Messages().ByName("RepeatedGroup"),
69 }, {
70 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160225.Message_OneofGroup))),
71 want: fileDescP2_20160225.Messages().ByName("Message").Messages().ByName("OneofGroup"),
72 }, {
73 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160225.Message_ExtensionOptionalGroup))),
74 want: fileDescP2_20160225.Messages().ByName("Message").Messages().ByName("ExtensionOptionalGroup"),
75 }, {
76 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160225.Message_ExtensionRepeatedGroup))),
77 want: fileDescP2_20160225.Messages().ByName("Message").Messages().ByName("ExtensionRepeatedGroup"),
78 }}...)
79
80 fileDescP3_20160225 := mustLoadFileDesc(new(proto3_20160225.Message).Descriptor())
81 tests = append(tests, []struct{ got, want pref.Descriptor }{{
82 got: legacyLoadEnumDesc(reflect.TypeOf(proto3_20160225.SiblingEnum(0))),
83 want: fileDescP3_20160225.Enums().ByName("SiblingEnum"),
84 }, {
85 got: legacyLoadEnumDesc(reflect.TypeOf(proto3_20160225.Message_ChildEnum(0))),
86 want: fileDescP3_20160225.Messages().ByName("Message").Enums().ByName("ChildEnum"),
87 }, {
88 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto3_20160225.SiblingMessage))),
89 want: fileDescP3_20160225.Messages().ByName("SiblingMessage"),
90 }, {
91 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto3_20160225.Message_ChildMessage))),
92 want: fileDescP3_20160225.Messages().ByName("Message").Messages().ByName("ChildMessage"),
93 }, {
94 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto3_20160225.Message))),
95 want: fileDescP3_20160225.Messages().ByName("Message"),
96 }}...)
97
98 fileDescP2_20160519 := mustLoadFileDesc(new(proto2_20160519.Message).Descriptor())
99 tests = append(tests, []struct{ got, want pref.Descriptor }{{
100 got: legacyLoadEnumDesc(reflect.TypeOf(proto2_20160519.SiblingEnum(0))),
101 want: fileDescP2_20160519.Enums().ByName("SiblingEnum"),
102 }, {
103 got: legacyLoadEnumDesc(reflect.TypeOf(proto2_20160519.Message_ChildEnum(0))),
104 want: fileDescP2_20160519.Messages().ByName("Message").Enums().ByName("ChildEnum"),
105 }, {
106 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160519.SiblingMessage))),
107 want: fileDescP2_20160519.Messages().ByName("SiblingMessage"),
108 }, {
109 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160519.Message_ChildMessage))),
110 want: fileDescP2_20160519.Messages().ByName("Message").Messages().ByName("ChildMessage"),
111 }, {
112 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160519.Message))),
113 want: fileDescP2_20160519.Messages().ByName("Message"),
114 }, {
115 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160519.Message_NamedGroup))),
116 want: fileDescP2_20160519.Messages().ByName("Message").Messages().ByName("NamedGroup"),
117 }, {
118 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160519.Message_OptionalGroup))),
119 want: fileDescP2_20160519.Messages().ByName("Message").Messages().ByName("OptionalGroup"),
120 }, {
121 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160519.Message_RequiredGroup))),
122 want: fileDescP2_20160519.Messages().ByName("Message").Messages().ByName("RequiredGroup"),
123 }, {
124 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160519.Message_RepeatedGroup))),
125 want: fileDescP2_20160519.Messages().ByName("Message").Messages().ByName("RepeatedGroup"),
126 }, {
127 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160519.Message_OneofGroup))),
128 want: fileDescP2_20160519.Messages().ByName("Message").Messages().ByName("OneofGroup"),
129 }, {
130 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160519.Message_ExtensionOptionalGroup))),
131 want: fileDescP2_20160519.Messages().ByName("Message").Messages().ByName("ExtensionOptionalGroup"),
132 }, {
133 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160519.Message_ExtensionRepeatedGroup))),
134 want: fileDescP2_20160519.Messages().ByName("Message").Messages().ByName("ExtensionRepeatedGroup"),
135 }}...)
136
137 fileDescP3_20160519 := mustLoadFileDesc(new(proto3_20160519.Message).Descriptor())
138 tests = append(tests, []struct{ got, want pref.Descriptor }{{
139 got: legacyLoadEnumDesc(reflect.TypeOf(proto3_20160519.SiblingEnum(0))),
140 want: fileDescP3_20160519.Enums().ByName("SiblingEnum"),
141 }, {
142 got: legacyLoadEnumDesc(reflect.TypeOf(proto3_20160519.Message_ChildEnum(0))),
143 want: fileDescP3_20160519.Messages().ByName("Message").Enums().ByName("ChildEnum"),
144 }, {
145 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto3_20160519.SiblingMessage))),
146 want: fileDescP3_20160519.Messages().ByName("SiblingMessage"),
147 }, {
148 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto3_20160519.Message_ChildMessage))),
149 want: fileDescP3_20160519.Messages().ByName("Message").Messages().ByName("ChildMessage"),
150 }, {
151 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto3_20160519.Message))),
152 want: fileDescP3_20160519.Messages().ByName("Message"),
153 }}...)
154
155 fileDescP2_20180125 := mustLoadFileDesc(new(proto2_20180125.Message).Descriptor())
156 tests = append(tests, []struct{ got, want pref.Descriptor }{{
157 got: legacyLoadEnumDesc(reflect.TypeOf(proto2_20180125.SiblingEnum(0))),
158 want: fileDescP2_20180125.Enums().ByName("SiblingEnum"),
159 }, {
160 got: legacyLoadEnumDesc(reflect.TypeOf(proto2_20180125.Message_ChildEnum(0))),
161 want: fileDescP2_20180125.Messages().ByName("Message").Enums().ByName("ChildEnum"),
162 }, {
163 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180125.SiblingMessage))),
164 want: fileDescP2_20180125.Messages().ByName("SiblingMessage"),
165 }, {
166 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180125.Message_ChildMessage))),
167 want: fileDescP2_20180125.Messages().ByName("Message").Messages().ByName("ChildMessage"),
168 }, {
169 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180125.Message))),
170 want: fileDescP2_20180125.Messages().ByName("Message"),
171 }, {
172 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180125.Message_NamedGroup))),
173 want: fileDescP2_20180125.Messages().ByName("Message").Messages().ByName("NamedGroup"),
174 }, {
175 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180125.Message_OptionalGroup))),
176 want: fileDescP2_20180125.Messages().ByName("Message").Messages().ByName("OptionalGroup"),
177 }, {
178 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180125.Message_RequiredGroup))),
179 want: fileDescP2_20180125.Messages().ByName("Message").Messages().ByName("RequiredGroup"),
180 }, {
181 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180125.Message_RepeatedGroup))),
182 want: fileDescP2_20180125.Messages().ByName("Message").Messages().ByName("RepeatedGroup"),
183 }, {
184 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180125.Message_OneofGroup))),
185 want: fileDescP2_20180125.Messages().ByName("Message").Messages().ByName("OneofGroup"),
186 }, {
187 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180125.Message_ExtensionOptionalGroup))),
188 want: fileDescP2_20180125.Messages().ByName("Message").Messages().ByName("ExtensionOptionalGroup"),
189 }, {
190 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180125.Message_ExtensionRepeatedGroup))),
191 want: fileDescP2_20180125.Messages().ByName("Message").Messages().ByName("ExtensionRepeatedGroup"),
192 }}...)
193
194 fileDescP3_20180125 := mustLoadFileDesc(new(proto3_20180125.Message).Descriptor())
195 tests = append(tests, []struct{ got, want pref.Descriptor }{{
196 got: legacyLoadEnumDesc(reflect.TypeOf(proto3_20180125.SiblingEnum(0))),
197 want: fileDescP3_20180125.Enums().ByName("SiblingEnum"),
198 }, {
199 got: legacyLoadEnumDesc(reflect.TypeOf(proto3_20180125.Message_ChildEnum(0))),
200 want: fileDescP3_20180125.Messages().ByName("Message").Enums().ByName("ChildEnum"),
201 }, {
202 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto3_20180125.SiblingMessage))),
203 want: fileDescP3_20180125.Messages().ByName("SiblingMessage"),
204 }, {
205 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto3_20180125.Message_ChildMessage))),
206 want: fileDescP3_20180125.Messages().ByName("Message").Messages().ByName("ChildMessage"),
207 }, {
208 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto3_20180125.Message))),
209 want: fileDescP3_20180125.Messages().ByName("Message"),
210 }}...)
211
212 fileDescP2_20180430 := mustLoadFileDesc(new(proto2_20180430.Message).Descriptor())
213 tests = append(tests, []struct{ got, want pref.Descriptor }{{
214 got: legacyLoadEnumDesc(reflect.TypeOf(proto2_20180430.SiblingEnum(0))),
215 want: fileDescP2_20180430.Enums().ByName("SiblingEnum"),
216 }, {
217 got: legacyLoadEnumDesc(reflect.TypeOf(proto2_20180430.Message_ChildEnum(0))),
218 want: fileDescP2_20180430.Messages().ByName("Message").Enums().ByName("ChildEnum"),
219 }, {
220 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180430.SiblingMessage))),
221 want: fileDescP2_20180430.Messages().ByName("SiblingMessage"),
222 }, {
223 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180430.Message_ChildMessage))),
224 want: fileDescP2_20180430.Messages().ByName("Message").Messages().ByName("ChildMessage"),
225 }, {
226 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180430.Message))),
227 want: fileDescP2_20180430.Messages().ByName("Message"),
228 }, {
229 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180430.Message_NamedGroup))),
230 want: fileDescP2_20180430.Messages().ByName("Message").Messages().ByName("NamedGroup"),
231 }, {
232 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180430.Message_OptionalGroup))),
233 want: fileDescP2_20180430.Messages().ByName("Message").Messages().ByName("OptionalGroup"),
234 }, {
235 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180430.Message_RequiredGroup))),
236 want: fileDescP2_20180430.Messages().ByName("Message").Messages().ByName("RequiredGroup"),
237 }, {
238 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180430.Message_RepeatedGroup))),
239 want: fileDescP2_20180430.Messages().ByName("Message").Messages().ByName("RepeatedGroup"),
240 }, {
241 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180430.Message_OneofGroup))),
242 want: fileDescP2_20180430.Messages().ByName("Message").Messages().ByName("OneofGroup"),
243 }, {
244 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180430.Message_ExtensionOptionalGroup))),
245 want: fileDescP2_20180430.Messages().ByName("Message").Messages().ByName("ExtensionOptionalGroup"),
246 }, {
247 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180430.Message_ExtensionRepeatedGroup))),
248 want: fileDescP2_20180430.Messages().ByName("Message").Messages().ByName("ExtensionRepeatedGroup"),
249 }}...)
250
251 fileDescP3_20180430 := mustLoadFileDesc(new(proto3_20180430.Message).Descriptor())
252 tests = append(tests, []struct{ got, want pref.Descriptor }{{
253 got: legacyLoadEnumDesc(reflect.TypeOf(proto3_20180430.SiblingEnum(0))),
254 want: fileDescP3_20180430.Enums().ByName("SiblingEnum"),
255 }, {
256 got: legacyLoadEnumDesc(reflect.TypeOf(proto3_20180430.Message_ChildEnum(0))),
257 want: fileDescP3_20180430.Messages().ByName("Message").Enums().ByName("ChildEnum"),
258 }, {
259 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto3_20180430.SiblingMessage))),
260 want: fileDescP3_20180430.Messages().ByName("SiblingMessage"),
261 }, {
262 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto3_20180430.Message_ChildMessage))),
263 want: fileDescP3_20180430.Messages().ByName("Message").Messages().ByName("ChildMessage"),
264 }, {
265 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto3_20180430.Message))),
266 want: fileDescP3_20180430.Messages().ByName("Message"),
267 }}...)
268
269 fileDescP2_20180814 := mustLoadFileDesc(new(proto2_20180814.Message).Descriptor())
270 tests = append(tests, []struct{ got, want pref.Descriptor }{{
271 got: legacyLoadEnumDesc(reflect.TypeOf(proto2_20180814.SiblingEnum(0))),
272 want: fileDescP2_20180814.Enums().ByName("SiblingEnum"),
273 }, {
274 got: legacyLoadEnumDesc(reflect.TypeOf(proto2_20180814.Message_ChildEnum(0))),
275 want: fileDescP2_20180814.Messages().ByName("Message").Enums().ByName("ChildEnum"),
276 }, {
277 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180814.SiblingMessage))),
278 want: fileDescP2_20180814.Messages().ByName("SiblingMessage"),
279 }, {
280 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180814.Message_ChildMessage))),
281 want: fileDescP2_20180814.Messages().ByName("Message").Messages().ByName("ChildMessage"),
282 }, {
283 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180814.Message))),
284 want: fileDescP2_20180814.Messages().ByName("Message"),
285 }, {
286 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180814.Message_NamedGroup))),
287 want: fileDescP2_20180814.Messages().ByName("Message").Messages().ByName("NamedGroup"),
288 }, {
289 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180814.Message_OptionalGroup))),
290 want: fileDescP2_20180814.Messages().ByName("Message").Messages().ByName("OptionalGroup"),
291 }, {
292 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180814.Message_RequiredGroup))),
293 want: fileDescP2_20180814.Messages().ByName("Message").Messages().ByName("RequiredGroup"),
294 }, {
295 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180814.Message_RepeatedGroup))),
296 want: fileDescP2_20180814.Messages().ByName("Message").Messages().ByName("RepeatedGroup"),
297 }, {
298 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180814.Message_OneofGroup))),
299 want: fileDescP2_20180814.Messages().ByName("Message").Messages().ByName("OneofGroup"),
300 }, {
301 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180814.Message_ExtensionOptionalGroup))),
302 want: fileDescP2_20180814.Messages().ByName("Message").Messages().ByName("ExtensionOptionalGroup"),
303 }, {
304 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180814.Message_ExtensionRepeatedGroup))),
305 want: fileDescP2_20180814.Messages().ByName("Message").Messages().ByName("ExtensionRepeatedGroup"),
306 }}...)
307
308 fileDescP3_20180814 := mustLoadFileDesc(new(proto3_20180814.Message).Descriptor())
309 tests = append(tests, []struct{ got, want pref.Descriptor }{{
310 got: legacyLoadEnumDesc(reflect.TypeOf(proto3_20180814.SiblingEnum(0))),
311 want: fileDescP3_20180814.Enums().ByName("SiblingEnum"),
312 }, {
313 got: legacyLoadEnumDesc(reflect.TypeOf(proto3_20180814.Message_ChildEnum(0))),
314 want: fileDescP3_20180814.Messages().ByName("Message").Enums().ByName("ChildEnum"),
315 }, {
316 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto3_20180814.SiblingMessage))),
317 want: fileDescP3_20180814.Messages().ByName("SiblingMessage"),
318 }, {
319 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto3_20180814.Message_ChildMessage))),
320 want: fileDescP3_20180814.Messages().ByName("Message").Messages().ByName("ChildMessage"),
321 }, {
322 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto3_20180814.Message))),
323 want: fileDescP3_20180814.Messages().ByName("Message"),
324 }}...)
325
326 fileDescP2_20181126 := mustLoadFileDesc(new(proto2_20181126.Message).Descriptor())
327 tests = append(tests, []struct{ got, want pref.Descriptor }{{
328 got: legacyLoadEnumDesc(reflect.TypeOf(proto2_20181126.SiblingEnum(0))),
329 want: fileDescP2_20181126.Enums().ByName("SiblingEnum"),
330 }, {
331 got: legacyLoadEnumDesc(reflect.TypeOf(proto2_20181126.Message_ChildEnum(0))),
332 want: fileDescP2_20181126.Messages().ByName("Message").Enums().ByName("ChildEnum"),
333 }, {
334 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20181126.SiblingMessage))),
335 want: fileDescP2_20181126.Messages().ByName("SiblingMessage"),
336 }, {
337 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20181126.Message_ChildMessage))),
338 want: fileDescP2_20181126.Messages().ByName("Message").Messages().ByName("ChildMessage"),
339 }, {
340 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20181126.Message))),
341 want: fileDescP2_20181126.Messages().ByName("Message"),
342 }, {
343 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20181126.Message_NamedGroup))),
344 want: fileDescP2_20181126.Messages().ByName("Message").Messages().ByName("NamedGroup"),
345 }, {
346 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20181126.Message_OptionalGroup))),
347 want: fileDescP2_20181126.Messages().ByName("Message").Messages().ByName("OptionalGroup"),
348 }, {
349 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20181126.Message_RequiredGroup))),
350 want: fileDescP2_20181126.Messages().ByName("Message").Messages().ByName("RequiredGroup"),
351 }, {
352 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20181126.Message_RepeatedGroup))),
353 want: fileDescP2_20181126.Messages().ByName("Message").Messages().ByName("RepeatedGroup"),
354 }, {
355 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20181126.Message_OneofGroup))),
356 want: fileDescP2_20181126.Messages().ByName("Message").Messages().ByName("OneofGroup"),
357 }, {
358 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20181126.Message_ExtensionOptionalGroup))),
359 want: fileDescP2_20181126.Messages().ByName("Message").Messages().ByName("ExtensionOptionalGroup"),
360 }, {
361 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto2_20181126.Message_ExtensionRepeatedGroup))),
362 want: fileDescP2_20181126.Messages().ByName("Message").Messages().ByName("ExtensionRepeatedGroup"),
363 }}...)
364
365 fileDescP3_20181126 := mustLoadFileDesc(new(proto3_20181126.Message).Descriptor())
366 tests = append(tests, []struct{ got, want pref.Descriptor }{{
367 got: legacyLoadEnumDesc(reflect.TypeOf(proto3_20181126.SiblingEnum(0))),
368 want: fileDescP3_20181126.Enums().ByName("SiblingEnum"),
369 }, {
370 got: legacyLoadEnumDesc(reflect.TypeOf(proto3_20181126.Message_ChildEnum(0))),
371 want: fileDescP3_20181126.Messages().ByName("Message").Enums().ByName("ChildEnum"),
372 }, {
373 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto3_20181126.SiblingMessage))),
374 want: fileDescP3_20181126.Messages().ByName("SiblingMessage"),
375 }, {
376 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto3_20181126.Message_ChildMessage))),
377 want: fileDescP3_20181126.Messages().ByName("Message").Messages().ByName("ChildMessage"),
378 }, {
379 got: legacyLoadMessageDesc(reflect.TypeOf(new(proto3_20181126.Message))),
380 want: fileDescP3_20181126.Messages().ByName("Message"),
381 }}...)
382
383 // TODO: We need a test package to compare descriptors.
384 type list interface {
385 Len() int
386 pragma.DoNotImplement
387 }
388 opts := cmp.Options{
389 cmp.Transformer("", func(x list) []interface{} {
390 out := make([]interface{}, x.Len())
391 v := reflect.ValueOf(x)
392 for i := 0; i < x.Len(); i++ {
393 m := v.MethodByName("Get")
394 out[i] = m.Call([]reflect.Value{reflect.ValueOf(i)})[0].Interface()
395 }
396 return out
397 }),
398 cmp.Transformer("", func(x pref.Descriptor) map[string]interface{} {
399 out := make(map[string]interface{})
400 v := reflect.ValueOf(x)
401 for i := 0; i < v.NumMethod(); i++ {
402 name := v.Type().Method(i).Name
403 if m := v.Method(i); m.Type().NumIn() == 0 && m.Type().NumOut() == 1 {
404 switch name {
405 case "Index":
406 // Ignore index since legacy descriptors have no parent.
407 case "Options":
408 // Ignore descriptor options since protos are not cmperable.
409 case "Enums", "Messages", "Extensions":
410 // Ignore nested message and enum declarations since
411 // legacy descriptors are all created standalone.
412 case "OneofType", "ExtendedType", "EnumType", "MessageType":
413 // Avoid descending into a dependency to avoid a cycle.
414 // Just record the full name if available.
415 //
416 // TODO: Cycle support in cmp would be useful here.
417 v := m.Call(nil)[0]
418 if !v.IsNil() {
419 out[name] = v.Interface().(pref.Descriptor).FullName()
420 }
421 default:
422 out[name] = m.Call(nil)[0].Interface()
423 }
424 }
425 }
426 return out
427 }),
428 cmp.Transformer("", func(v pref.Value) interface{} {
429 return v.Interface()
430 }),
431 }
432
433 for _, tt := range tests {
434 t.Run(string(tt.want.FullName()), func(t *testing.T) {
435 if diff := cmp.Diff(&tt.want, &tt.got, opts); diff != "" {
436 t.Errorf("descriptor mismatch (-want, +got):\n%s", diff)
437 }
438 })
439 }
440}