blob: dad814f25896b4446943d725231b6458f33193d3 [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"
15 "google.golang.org/protobuf/internal/impl"
16 "google.golang.org/protobuf/internal/pragma"
Damien Neile89e6242019-05-13 23:55:40 -070017 "google.golang.org/protobuf/proto"
18 pdesc "google.golang.org/protobuf/reflect/protodesc"
19 pref "google.golang.org/protobuf/reflect/protoreflect"
Joe Tsai08e00302018-11-26 22:32:06 -080020
Damien Neile89e6242019-05-13 23:55:40 -070021 proto2_20160225 "google.golang.org/protobuf/internal/testprotos/legacy/proto2.v0.0.0-20160225-2fc053c5"
22 proto2_20160519 "google.golang.org/protobuf/internal/testprotos/legacy/proto2.v0.0.0-20160519-a4ab9ec5"
23 proto2_20180125 "google.golang.org/protobuf/internal/testprotos/legacy/proto2.v1.0.0-20180125-92554152"
24 proto2_20180430 "google.golang.org/protobuf/internal/testprotos/legacy/proto2.v1.1.0-20180430-b4deda09"
25 proto2_20180814 "google.golang.org/protobuf/internal/testprotos/legacy/proto2.v1.2.0-20180814-aa810b61"
26 proto2_20181126 "google.golang.org/protobuf/internal/testprotos/legacy/proto2.v1.2.1-20181126-8d0c54c1"
27 proto3_20160225 "google.golang.org/protobuf/internal/testprotos/legacy/proto3.v0.0.0-20160225-2fc053c5"
28 proto3_20160519 "google.golang.org/protobuf/internal/testprotos/legacy/proto3.v0.0.0-20160519-a4ab9ec5"
29 proto3_20180125 "google.golang.org/protobuf/internal/testprotos/legacy/proto3.v1.0.0-20180125-92554152"
30 proto3_20180430 "google.golang.org/protobuf/internal/testprotos/legacy/proto3.v1.1.0-20180430-b4deda09"
31 proto3_20180814 "google.golang.org/protobuf/internal/testprotos/legacy/proto3.v1.2.0-20180814-aa810b61"
32 proto3_20181126 "google.golang.org/protobuf/internal/testprotos/legacy/proto3.v1.2.1-20181126-8d0c54c1"
Joe Tsaia95b29f2019-05-16 12:47:20 -070033 "google.golang.org/protobuf/types/descriptorpb"
Joe Tsai08e00302018-11-26 22:32:06 -080034)
35
36func mustLoadFileDesc(b []byte, _ []int) pref.FileDescriptor {
Damien Neil987d5702019-04-10 11:06:53 -070037 zr, err := gzip.NewReader(bytes.NewReader(b))
38 if err != nil {
39 panic(err)
40 }
41 b, err = ioutil.ReadAll(zr)
42 if err != nil {
43 panic(err)
44 }
45 p := new(descriptorpb.FileDescriptorProto)
46 err = proto.UnmarshalOptions{DiscardUnknown: true}.Unmarshal(b, p)
47 if err != nil {
48 panic(err)
49 }
50 fd, err := pdesc.NewFile(p, nil)
Joe Tsai08e00302018-11-26 22:32:06 -080051 if err != nil {
52 panic(err)
53 }
54 return fd
55}
56
57func TestDescriptor(t *testing.T) {
58 var tests []struct{ got, want pref.Descriptor }
59
60 fileDescP2_20160225 := mustLoadFileDesc(new(proto2_20160225.Message).Descriptor())
61 tests = append(tests, []struct{ got, want pref.Descriptor }{{
Joe Tsai21ade492019-05-22 13:42:54 -040062 got: impl.LegacyLoadEnumDesc(reflect.TypeOf(proto2_20160225.SiblingEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -080063 want: fileDescP2_20160225.Enums().ByName("SiblingEnum"),
64 }, {
Joe Tsai21ade492019-05-22 13:42:54 -040065 got: impl.LegacyLoadEnumDesc(reflect.TypeOf(proto2_20160225.Message_ChildEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -080066 want: fileDescP2_20160225.Messages().ByName("Message").Enums().ByName("ChildEnum"),
67 }, {
Joe Tsai21ade492019-05-22 13:42:54 -040068 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160225.SiblingMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -080069 want: fileDescP2_20160225.Messages().ByName("SiblingMessage"),
70 }, {
Joe Tsai21ade492019-05-22 13:42:54 -040071 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160225.Message_ChildMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -080072 want: fileDescP2_20160225.Messages().ByName("Message").Messages().ByName("ChildMessage"),
73 }, {
Joe Tsai21ade492019-05-22 13:42:54 -040074 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160225.Message))),
Joe Tsai08e00302018-11-26 22:32:06 -080075 want: fileDescP2_20160225.Messages().ByName("Message"),
76 }, {
Joe Tsai21ade492019-05-22 13:42:54 -040077 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160225.Message_NamedGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -080078 want: fileDescP2_20160225.Messages().ByName("Message").Messages().ByName("NamedGroup"),
79 }, {
Joe Tsai21ade492019-05-22 13:42:54 -040080 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160225.Message_OptionalGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -080081 want: fileDescP2_20160225.Messages().ByName("Message").Messages().ByName("OptionalGroup"),
82 }, {
Joe Tsai21ade492019-05-22 13:42:54 -040083 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160225.Message_RequiredGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -080084 want: fileDescP2_20160225.Messages().ByName("Message").Messages().ByName("RequiredGroup"),
85 }, {
Joe Tsai21ade492019-05-22 13:42:54 -040086 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160225.Message_RepeatedGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -080087 want: fileDescP2_20160225.Messages().ByName("Message").Messages().ByName("RepeatedGroup"),
88 }, {
Joe Tsai21ade492019-05-22 13:42:54 -040089 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160225.Message_OneofGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -080090 want: fileDescP2_20160225.Messages().ByName("Message").Messages().ByName("OneofGroup"),
91 }, {
Joe Tsai21ade492019-05-22 13:42:54 -040092 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160225.Message_ExtensionOptionalGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -080093 want: fileDescP2_20160225.Messages().ByName("Message").Messages().ByName("ExtensionOptionalGroup"),
94 }, {
Joe Tsai21ade492019-05-22 13:42:54 -040095 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160225.Message_ExtensionRepeatedGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -080096 want: fileDescP2_20160225.Messages().ByName("Message").Messages().ByName("ExtensionRepeatedGroup"),
97 }}...)
98
99 fileDescP3_20160225 := mustLoadFileDesc(new(proto3_20160225.Message).Descriptor())
100 tests = append(tests, []struct{ got, want pref.Descriptor }{{
Joe Tsai21ade492019-05-22 13:42:54 -0400101 got: impl.LegacyLoadEnumDesc(reflect.TypeOf(proto3_20160225.SiblingEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800102 want: fileDescP3_20160225.Enums().ByName("SiblingEnum"),
103 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400104 got: impl.LegacyLoadEnumDesc(reflect.TypeOf(proto3_20160225.Message_ChildEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800105 want: fileDescP3_20160225.Messages().ByName("Message").Enums().ByName("ChildEnum"),
106 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400107 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto3_20160225.SiblingMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800108 want: fileDescP3_20160225.Messages().ByName("SiblingMessage"),
109 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400110 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto3_20160225.Message_ChildMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800111 want: fileDescP3_20160225.Messages().ByName("Message").Messages().ByName("ChildMessage"),
112 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400113 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto3_20160225.Message))),
Joe Tsai08e00302018-11-26 22:32:06 -0800114 want: fileDescP3_20160225.Messages().ByName("Message"),
115 }}...)
116
117 fileDescP2_20160519 := mustLoadFileDesc(new(proto2_20160519.Message).Descriptor())
118 tests = append(tests, []struct{ got, want pref.Descriptor }{{
Joe Tsai21ade492019-05-22 13:42:54 -0400119 got: impl.LegacyLoadEnumDesc(reflect.TypeOf(proto2_20160519.SiblingEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800120 want: fileDescP2_20160519.Enums().ByName("SiblingEnum"),
121 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400122 got: impl.LegacyLoadEnumDesc(reflect.TypeOf(proto2_20160519.Message_ChildEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800123 want: fileDescP2_20160519.Messages().ByName("Message").Enums().ByName("ChildEnum"),
124 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400125 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160519.SiblingMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800126 want: fileDescP2_20160519.Messages().ByName("SiblingMessage"),
127 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400128 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160519.Message_ChildMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800129 want: fileDescP2_20160519.Messages().ByName("Message").Messages().ByName("ChildMessage"),
130 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400131 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160519.Message))),
Joe Tsai08e00302018-11-26 22:32:06 -0800132 want: fileDescP2_20160519.Messages().ByName("Message"),
133 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400134 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160519.Message_NamedGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800135 want: fileDescP2_20160519.Messages().ByName("Message").Messages().ByName("NamedGroup"),
136 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400137 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160519.Message_OptionalGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800138 want: fileDescP2_20160519.Messages().ByName("Message").Messages().ByName("OptionalGroup"),
139 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400140 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160519.Message_RequiredGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800141 want: fileDescP2_20160519.Messages().ByName("Message").Messages().ByName("RequiredGroup"),
142 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400143 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160519.Message_RepeatedGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800144 want: fileDescP2_20160519.Messages().ByName("Message").Messages().ByName("RepeatedGroup"),
145 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400146 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160519.Message_OneofGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800147 want: fileDescP2_20160519.Messages().ByName("Message").Messages().ByName("OneofGroup"),
148 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400149 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160519.Message_ExtensionOptionalGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800150 want: fileDescP2_20160519.Messages().ByName("Message").Messages().ByName("ExtensionOptionalGroup"),
151 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400152 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20160519.Message_ExtensionRepeatedGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800153 want: fileDescP2_20160519.Messages().ByName("Message").Messages().ByName("ExtensionRepeatedGroup"),
154 }}...)
155
156 fileDescP3_20160519 := mustLoadFileDesc(new(proto3_20160519.Message).Descriptor())
157 tests = append(tests, []struct{ got, want pref.Descriptor }{{
Joe Tsai21ade492019-05-22 13:42:54 -0400158 got: impl.LegacyLoadEnumDesc(reflect.TypeOf(proto3_20160519.SiblingEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800159 want: fileDescP3_20160519.Enums().ByName("SiblingEnum"),
160 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400161 got: impl.LegacyLoadEnumDesc(reflect.TypeOf(proto3_20160519.Message_ChildEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800162 want: fileDescP3_20160519.Messages().ByName("Message").Enums().ByName("ChildEnum"),
163 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400164 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto3_20160519.SiblingMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800165 want: fileDescP3_20160519.Messages().ByName("SiblingMessage"),
166 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400167 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto3_20160519.Message_ChildMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800168 want: fileDescP3_20160519.Messages().ByName("Message").Messages().ByName("ChildMessage"),
169 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400170 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto3_20160519.Message))),
Joe Tsai08e00302018-11-26 22:32:06 -0800171 want: fileDescP3_20160519.Messages().ByName("Message"),
172 }}...)
173
174 fileDescP2_20180125 := mustLoadFileDesc(new(proto2_20180125.Message).Descriptor())
175 tests = append(tests, []struct{ got, want pref.Descriptor }{{
Joe Tsai21ade492019-05-22 13:42:54 -0400176 got: impl.LegacyLoadEnumDesc(reflect.TypeOf(proto2_20180125.SiblingEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800177 want: fileDescP2_20180125.Enums().ByName("SiblingEnum"),
178 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400179 got: impl.LegacyLoadEnumDesc(reflect.TypeOf(proto2_20180125.Message_ChildEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800180 want: fileDescP2_20180125.Messages().ByName("Message").Enums().ByName("ChildEnum"),
181 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400182 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180125.SiblingMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800183 want: fileDescP2_20180125.Messages().ByName("SiblingMessage"),
184 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400185 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180125.Message_ChildMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800186 want: fileDescP2_20180125.Messages().ByName("Message").Messages().ByName("ChildMessage"),
187 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400188 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180125.Message))),
Joe Tsai08e00302018-11-26 22:32:06 -0800189 want: fileDescP2_20180125.Messages().ByName("Message"),
190 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400191 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180125.Message_NamedGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800192 want: fileDescP2_20180125.Messages().ByName("Message").Messages().ByName("NamedGroup"),
193 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400194 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180125.Message_OptionalGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800195 want: fileDescP2_20180125.Messages().ByName("Message").Messages().ByName("OptionalGroup"),
196 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400197 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180125.Message_RequiredGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800198 want: fileDescP2_20180125.Messages().ByName("Message").Messages().ByName("RequiredGroup"),
199 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400200 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180125.Message_RepeatedGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800201 want: fileDescP2_20180125.Messages().ByName("Message").Messages().ByName("RepeatedGroup"),
202 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400203 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180125.Message_OneofGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800204 want: fileDescP2_20180125.Messages().ByName("Message").Messages().ByName("OneofGroup"),
205 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400206 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180125.Message_ExtensionOptionalGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800207 want: fileDescP2_20180125.Messages().ByName("Message").Messages().ByName("ExtensionOptionalGroup"),
208 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400209 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180125.Message_ExtensionRepeatedGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800210 want: fileDescP2_20180125.Messages().ByName("Message").Messages().ByName("ExtensionRepeatedGroup"),
211 }}...)
212
213 fileDescP3_20180125 := mustLoadFileDesc(new(proto3_20180125.Message).Descriptor())
214 tests = append(tests, []struct{ got, want pref.Descriptor }{{
Joe Tsai21ade492019-05-22 13:42:54 -0400215 got: impl.LegacyLoadEnumDesc(reflect.TypeOf(proto3_20180125.SiblingEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800216 want: fileDescP3_20180125.Enums().ByName("SiblingEnum"),
217 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400218 got: impl.LegacyLoadEnumDesc(reflect.TypeOf(proto3_20180125.Message_ChildEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800219 want: fileDescP3_20180125.Messages().ByName("Message").Enums().ByName("ChildEnum"),
220 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400221 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto3_20180125.SiblingMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800222 want: fileDescP3_20180125.Messages().ByName("SiblingMessage"),
223 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400224 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto3_20180125.Message_ChildMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800225 want: fileDescP3_20180125.Messages().ByName("Message").Messages().ByName("ChildMessage"),
226 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400227 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto3_20180125.Message))),
Joe Tsai08e00302018-11-26 22:32:06 -0800228 want: fileDescP3_20180125.Messages().ByName("Message"),
229 }}...)
230
231 fileDescP2_20180430 := mustLoadFileDesc(new(proto2_20180430.Message).Descriptor())
232 tests = append(tests, []struct{ got, want pref.Descriptor }{{
Joe Tsai21ade492019-05-22 13:42:54 -0400233 got: impl.LegacyLoadEnumDesc(reflect.TypeOf(proto2_20180430.SiblingEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800234 want: fileDescP2_20180430.Enums().ByName("SiblingEnum"),
235 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400236 got: impl.LegacyLoadEnumDesc(reflect.TypeOf(proto2_20180430.Message_ChildEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800237 want: fileDescP2_20180430.Messages().ByName("Message").Enums().ByName("ChildEnum"),
238 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400239 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180430.SiblingMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800240 want: fileDescP2_20180430.Messages().ByName("SiblingMessage"),
241 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400242 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180430.Message_ChildMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800243 want: fileDescP2_20180430.Messages().ByName("Message").Messages().ByName("ChildMessage"),
244 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400245 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180430.Message))),
Joe Tsai08e00302018-11-26 22:32:06 -0800246 want: fileDescP2_20180430.Messages().ByName("Message"),
247 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400248 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180430.Message_NamedGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800249 want: fileDescP2_20180430.Messages().ByName("Message").Messages().ByName("NamedGroup"),
250 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400251 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180430.Message_OptionalGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800252 want: fileDescP2_20180430.Messages().ByName("Message").Messages().ByName("OptionalGroup"),
253 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400254 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180430.Message_RequiredGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800255 want: fileDescP2_20180430.Messages().ByName("Message").Messages().ByName("RequiredGroup"),
256 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400257 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180430.Message_RepeatedGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800258 want: fileDescP2_20180430.Messages().ByName("Message").Messages().ByName("RepeatedGroup"),
259 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400260 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180430.Message_OneofGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800261 want: fileDescP2_20180430.Messages().ByName("Message").Messages().ByName("OneofGroup"),
262 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400263 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180430.Message_ExtensionOptionalGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800264 want: fileDescP2_20180430.Messages().ByName("Message").Messages().ByName("ExtensionOptionalGroup"),
265 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400266 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180430.Message_ExtensionRepeatedGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800267 want: fileDescP2_20180430.Messages().ByName("Message").Messages().ByName("ExtensionRepeatedGroup"),
268 }}...)
269
270 fileDescP3_20180430 := mustLoadFileDesc(new(proto3_20180430.Message).Descriptor())
271 tests = append(tests, []struct{ got, want pref.Descriptor }{{
Joe Tsai21ade492019-05-22 13:42:54 -0400272 got: impl.LegacyLoadEnumDesc(reflect.TypeOf(proto3_20180430.SiblingEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800273 want: fileDescP3_20180430.Enums().ByName("SiblingEnum"),
274 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400275 got: impl.LegacyLoadEnumDesc(reflect.TypeOf(proto3_20180430.Message_ChildEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800276 want: fileDescP3_20180430.Messages().ByName("Message").Enums().ByName("ChildEnum"),
277 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400278 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto3_20180430.SiblingMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800279 want: fileDescP3_20180430.Messages().ByName("SiblingMessage"),
280 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400281 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto3_20180430.Message_ChildMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800282 want: fileDescP3_20180430.Messages().ByName("Message").Messages().ByName("ChildMessage"),
283 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400284 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto3_20180430.Message))),
Joe Tsai08e00302018-11-26 22:32:06 -0800285 want: fileDescP3_20180430.Messages().ByName("Message"),
286 }}...)
287
288 fileDescP2_20180814 := mustLoadFileDesc(new(proto2_20180814.Message).Descriptor())
289 tests = append(tests, []struct{ got, want pref.Descriptor }{{
Joe Tsai21ade492019-05-22 13:42:54 -0400290 got: impl.LegacyLoadEnumDesc(reflect.TypeOf(proto2_20180814.SiblingEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800291 want: fileDescP2_20180814.Enums().ByName("SiblingEnum"),
292 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400293 got: impl.LegacyLoadEnumDesc(reflect.TypeOf(proto2_20180814.Message_ChildEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800294 want: fileDescP2_20180814.Messages().ByName("Message").Enums().ByName("ChildEnum"),
295 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400296 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180814.SiblingMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800297 want: fileDescP2_20180814.Messages().ByName("SiblingMessage"),
298 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400299 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180814.Message_ChildMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800300 want: fileDescP2_20180814.Messages().ByName("Message").Messages().ByName("ChildMessage"),
301 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400302 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180814.Message))),
Joe Tsai08e00302018-11-26 22:32:06 -0800303 want: fileDescP2_20180814.Messages().ByName("Message"),
304 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400305 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180814.Message_NamedGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800306 want: fileDescP2_20180814.Messages().ByName("Message").Messages().ByName("NamedGroup"),
307 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400308 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180814.Message_OptionalGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800309 want: fileDescP2_20180814.Messages().ByName("Message").Messages().ByName("OptionalGroup"),
310 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400311 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180814.Message_RequiredGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800312 want: fileDescP2_20180814.Messages().ByName("Message").Messages().ByName("RequiredGroup"),
313 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400314 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180814.Message_RepeatedGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800315 want: fileDescP2_20180814.Messages().ByName("Message").Messages().ByName("RepeatedGroup"),
316 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400317 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180814.Message_OneofGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800318 want: fileDescP2_20180814.Messages().ByName("Message").Messages().ByName("OneofGroup"),
319 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400320 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180814.Message_ExtensionOptionalGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800321 want: fileDescP2_20180814.Messages().ByName("Message").Messages().ByName("ExtensionOptionalGroup"),
322 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400323 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20180814.Message_ExtensionRepeatedGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800324 want: fileDescP2_20180814.Messages().ByName("Message").Messages().ByName("ExtensionRepeatedGroup"),
325 }}...)
326
327 fileDescP3_20180814 := mustLoadFileDesc(new(proto3_20180814.Message).Descriptor())
328 tests = append(tests, []struct{ got, want pref.Descriptor }{{
Joe Tsai21ade492019-05-22 13:42:54 -0400329 got: impl.LegacyLoadEnumDesc(reflect.TypeOf(proto3_20180814.SiblingEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800330 want: fileDescP3_20180814.Enums().ByName("SiblingEnum"),
331 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400332 got: impl.LegacyLoadEnumDesc(reflect.TypeOf(proto3_20180814.Message_ChildEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800333 want: fileDescP3_20180814.Messages().ByName("Message").Enums().ByName("ChildEnum"),
334 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400335 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto3_20180814.SiblingMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800336 want: fileDescP3_20180814.Messages().ByName("SiblingMessage"),
337 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400338 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto3_20180814.Message_ChildMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800339 want: fileDescP3_20180814.Messages().ByName("Message").Messages().ByName("ChildMessage"),
340 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400341 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto3_20180814.Message))),
Joe Tsai08e00302018-11-26 22:32:06 -0800342 want: fileDescP3_20180814.Messages().ByName("Message"),
343 }}...)
344
345 fileDescP2_20181126 := mustLoadFileDesc(new(proto2_20181126.Message).Descriptor())
346 tests = append(tests, []struct{ got, want pref.Descriptor }{{
Joe Tsai21ade492019-05-22 13:42:54 -0400347 got: impl.LegacyLoadEnumDesc(reflect.TypeOf(proto2_20181126.SiblingEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800348 want: fileDescP2_20181126.Enums().ByName("SiblingEnum"),
349 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400350 got: impl.LegacyLoadEnumDesc(reflect.TypeOf(proto2_20181126.Message_ChildEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800351 want: fileDescP2_20181126.Messages().ByName("Message").Enums().ByName("ChildEnum"),
352 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400353 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20181126.SiblingMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800354 want: fileDescP2_20181126.Messages().ByName("SiblingMessage"),
355 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400356 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20181126.Message_ChildMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800357 want: fileDescP2_20181126.Messages().ByName("Message").Messages().ByName("ChildMessage"),
358 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400359 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20181126.Message))),
Joe Tsai08e00302018-11-26 22:32:06 -0800360 want: fileDescP2_20181126.Messages().ByName("Message"),
361 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400362 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20181126.Message_NamedGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800363 want: fileDescP2_20181126.Messages().ByName("Message").Messages().ByName("NamedGroup"),
364 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400365 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20181126.Message_OptionalGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800366 want: fileDescP2_20181126.Messages().ByName("Message").Messages().ByName("OptionalGroup"),
367 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400368 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20181126.Message_RequiredGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800369 want: fileDescP2_20181126.Messages().ByName("Message").Messages().ByName("RequiredGroup"),
370 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400371 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20181126.Message_RepeatedGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800372 want: fileDescP2_20181126.Messages().ByName("Message").Messages().ByName("RepeatedGroup"),
373 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400374 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20181126.Message_OneofGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800375 want: fileDescP2_20181126.Messages().ByName("Message").Messages().ByName("OneofGroup"),
376 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400377 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20181126.Message_ExtensionOptionalGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800378 want: fileDescP2_20181126.Messages().ByName("Message").Messages().ByName("ExtensionOptionalGroup"),
379 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400380 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto2_20181126.Message_ExtensionRepeatedGroup))),
Joe Tsai08e00302018-11-26 22:32:06 -0800381 want: fileDescP2_20181126.Messages().ByName("Message").Messages().ByName("ExtensionRepeatedGroup"),
382 }}...)
383
384 fileDescP3_20181126 := mustLoadFileDesc(new(proto3_20181126.Message).Descriptor())
385 tests = append(tests, []struct{ got, want pref.Descriptor }{{
Joe Tsai21ade492019-05-22 13:42:54 -0400386 got: impl.LegacyLoadEnumDesc(reflect.TypeOf(proto3_20181126.SiblingEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800387 want: fileDescP3_20181126.Enums().ByName("SiblingEnum"),
388 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400389 got: impl.LegacyLoadEnumDesc(reflect.TypeOf(proto3_20181126.Message_ChildEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800390 want: fileDescP3_20181126.Messages().ByName("Message").Enums().ByName("ChildEnum"),
391 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400392 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto3_20181126.SiblingMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800393 want: fileDescP3_20181126.Messages().ByName("SiblingMessage"),
394 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400395 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto3_20181126.Message_ChildMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800396 want: fileDescP3_20181126.Messages().ByName("Message").Messages().ByName("ChildMessage"),
397 }, {
Joe Tsai21ade492019-05-22 13:42:54 -0400398 got: impl.LegacyLoadMessageDesc(reflect.TypeOf(new(proto3_20181126.Message))),
Joe Tsai08e00302018-11-26 22:32:06 -0800399 want: fileDescP3_20181126.Messages().ByName("Message"),
400 }}...)
401
402 // TODO: We need a test package to compare descriptors.
403 type list interface {
404 Len() int
405 pragma.DoNotImplement
406 }
407 opts := cmp.Options{
408 cmp.Transformer("", func(x list) []interface{} {
409 out := make([]interface{}, x.Len())
410 v := reflect.ValueOf(x)
411 for i := 0; i < x.Len(); i++ {
412 m := v.MethodByName("Get")
413 out[i] = m.Call([]reflect.Value{reflect.ValueOf(i)})[0].Interface()
414 }
415 return out
416 }),
417 cmp.Transformer("", func(x pref.Descriptor) map[string]interface{} {
418 out := make(map[string]interface{})
419 v := reflect.ValueOf(x)
420 for i := 0; i < v.NumMethod(); i++ {
421 name := v.Type().Method(i).Name
422 if m := v.Method(i); m.Type().NumIn() == 0 && m.Type().NumOut() == 1 {
423 switch name {
Joe Tsaia93fdf52019-05-08 18:50:41 -0700424 case "ParentFile", "Parent":
425 // Ignore parents to avoid recursive cycle.
Joe Tsai08e00302018-11-26 22:32:06 -0800426 case "Index":
427 // Ignore index since legacy descriptors have no parent.
428 case "Options":
429 // Ignore descriptor options since protos are not cmperable.
430 case "Enums", "Messages", "Extensions":
431 // Ignore nested message and enum declarations since
432 // legacy descriptors are all created standalone.
Joe Tsaibce82b82018-12-06 09:39:03 -0800433 case "HasJSONName":
434 // Ignore this since the semantics of the field has
435 // changed across protoc and protoc-gen-go releases.
Joe Tsaiac31a352019-05-13 14:32:56 -0700436 case "ContainingOneof", "ContainingMessage", "Enum", "Message":
Joe Tsai08e00302018-11-26 22:32:06 -0800437 // Avoid descending into a dependency to avoid a cycle.
438 // Just record the full name if available.
439 //
440 // TODO: Cycle support in cmp would be useful here.
441 v := m.Call(nil)[0]
442 if !v.IsNil() {
443 out[name] = v.Interface().(pref.Descriptor).FullName()
444 }
Joe Tsaiac31a352019-05-13 14:32:56 -0700445 case "Oneof", "Extendee":
446 // TODO: Remove this.
Joe Tsai08e00302018-11-26 22:32:06 -0800447 default:
448 out[name] = m.Call(nil)[0].Interface()
449 }
450 }
451 }
452 return out
453 }),
454 cmp.Transformer("", func(v pref.Value) interface{} {
455 return v.Interface()
456 }),
457 }
458
459 for _, tt := range tests {
460 t.Run(string(tt.want.FullName()), func(t *testing.T) {
461 if diff := cmp.Diff(&tt.want, &tt.got, opts); diff != "" {
462 t.Errorf("descriptor mismatch (-want, +got):\n%s", diff)
463 }
464 })
465 }
466}