blob: c8d9af56b57bd0ca06cca6548a67afbf99829a29 [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 Tsai35ec98f2019-03-25 14:41:32 -07005package legacy_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 Tsai35ec98f2019-03-25 14:41:32 -070014 legacy "github.com/golang/protobuf/v2/internal/legacy"
Joe Tsai08e00302018-11-26 22:32:06 -080015 pragma "github.com/golang/protobuf/v2/internal/pragma"
Damien Neil987d5702019-04-10 11:06:53 -070016 "github.com/golang/protobuf/v2/proto"
Joe Tsaie1f8d502018-11-26 18:55:29 -080017 pdesc "github.com/golang/protobuf/v2/reflect/protodesc"
Joe Tsai08e00302018-11-26 22:32:06 -080018 pref "github.com/golang/protobuf/v2/reflect/protoreflect"
Damien Neil987d5702019-04-10 11:06:53 -070019 descriptorpb "github.com/golang/protobuf/v2/types/descriptor"
Joe Tsai08e00302018-11-26 22:32:06 -080020 cmp "github.com/google/go-cmp/cmp"
21
22 proto2_20160225 "github.com/golang/protobuf/v2/internal/testprotos/legacy/proto2.v0.0.0-20160225-2fc053c5"
23 proto2_20160519 "github.com/golang/protobuf/v2/internal/testprotos/legacy/proto2.v0.0.0-20160519-a4ab9ec5"
24 proto2_20180125 "github.com/golang/protobuf/v2/internal/testprotos/legacy/proto2.v1.0.0-20180125-92554152"
25 proto2_20180430 "github.com/golang/protobuf/v2/internal/testprotos/legacy/proto2.v1.1.0-20180430-b4deda09"
26 proto2_20180814 "github.com/golang/protobuf/v2/internal/testprotos/legacy/proto2.v1.2.0-20180814-aa810b61"
27 proto2_20181126 "github.com/golang/protobuf/v2/internal/testprotos/legacy/proto2.v1.2.1-20181126-8d0c54c1"
28 proto3_20160225 "github.com/golang/protobuf/v2/internal/testprotos/legacy/proto3.v0.0.0-20160225-2fc053c5"
29 proto3_20160519 "github.com/golang/protobuf/v2/internal/testprotos/legacy/proto3.v0.0.0-20160519-a4ab9ec5"
30 proto3_20180125 "github.com/golang/protobuf/v2/internal/testprotos/legacy/proto3.v1.0.0-20180125-92554152"
31 proto3_20180430 "github.com/golang/protobuf/v2/internal/testprotos/legacy/proto3.v1.1.0-20180430-b4deda09"
32 proto3_20180814 "github.com/golang/protobuf/v2/internal/testprotos/legacy/proto3.v1.2.0-20180814-aa810b61"
33 proto3_20181126 "github.com/golang/protobuf/v2/internal/testprotos/legacy/proto3.v1.2.1-20181126-8d0c54c1"
34)
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 Tsai35ec98f2019-03-25 14:41:32 -070062 got: legacy.LoadEnumDesc(reflect.TypeOf(proto2_20160225.SiblingEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -080063 want: fileDescP2_20160225.Enums().ByName("SiblingEnum"),
64 }, {
Joe Tsai35ec98f2019-03-25 14:41:32 -070065 got: legacy.LoadEnumDesc(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 Tsai35ec98f2019-03-25 14:41:32 -070068 got: legacy.LoadMessageDesc(reflect.TypeOf(new(proto2_20160225.SiblingMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -080069 want: fileDescP2_20160225.Messages().ByName("SiblingMessage"),
70 }, {
Joe Tsai35ec98f2019-03-25 14:41:32 -070071 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -070074 got: legacy.LoadMessageDesc(reflect.TypeOf(new(proto2_20160225.Message))),
Joe Tsai08e00302018-11-26 22:32:06 -080075 want: fileDescP2_20160225.Messages().ByName("Message"),
76 }, {
Joe Tsai35ec98f2019-03-25 14:41:32 -070077 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -070080 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -070083 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -070086 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -070089 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -070092 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -070095 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700101 got: legacy.LoadEnumDesc(reflect.TypeOf(proto3_20160225.SiblingEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800102 want: fileDescP3_20160225.Enums().ByName("SiblingEnum"),
103 }, {
Joe Tsai35ec98f2019-03-25 14:41:32 -0700104 got: legacy.LoadEnumDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700107 got: legacy.LoadMessageDesc(reflect.TypeOf(new(proto3_20160225.SiblingMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800108 want: fileDescP3_20160225.Messages().ByName("SiblingMessage"),
109 }, {
Joe Tsai35ec98f2019-03-25 14:41:32 -0700110 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700113 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700119 got: legacy.LoadEnumDesc(reflect.TypeOf(proto2_20160519.SiblingEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800120 want: fileDescP2_20160519.Enums().ByName("SiblingEnum"),
121 }, {
Joe Tsai35ec98f2019-03-25 14:41:32 -0700122 got: legacy.LoadEnumDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700125 got: legacy.LoadMessageDesc(reflect.TypeOf(new(proto2_20160519.SiblingMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800126 want: fileDescP2_20160519.Messages().ByName("SiblingMessage"),
127 }, {
Joe Tsai35ec98f2019-03-25 14:41:32 -0700128 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700131 got: legacy.LoadMessageDesc(reflect.TypeOf(new(proto2_20160519.Message))),
Joe Tsai08e00302018-11-26 22:32:06 -0800132 want: fileDescP2_20160519.Messages().ByName("Message"),
133 }, {
Joe Tsai35ec98f2019-03-25 14:41:32 -0700134 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700137 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700140 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700143 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700146 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700149 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700152 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700158 got: legacy.LoadEnumDesc(reflect.TypeOf(proto3_20160519.SiblingEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800159 want: fileDescP3_20160519.Enums().ByName("SiblingEnum"),
160 }, {
Joe Tsai35ec98f2019-03-25 14:41:32 -0700161 got: legacy.LoadEnumDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700164 got: legacy.LoadMessageDesc(reflect.TypeOf(new(proto3_20160519.SiblingMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800165 want: fileDescP3_20160519.Messages().ByName("SiblingMessage"),
166 }, {
Joe Tsai35ec98f2019-03-25 14:41:32 -0700167 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700170 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700176 got: legacy.LoadEnumDesc(reflect.TypeOf(proto2_20180125.SiblingEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800177 want: fileDescP2_20180125.Enums().ByName("SiblingEnum"),
178 }, {
Joe Tsai35ec98f2019-03-25 14:41:32 -0700179 got: legacy.LoadEnumDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700182 got: legacy.LoadMessageDesc(reflect.TypeOf(new(proto2_20180125.SiblingMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800183 want: fileDescP2_20180125.Messages().ByName("SiblingMessage"),
184 }, {
Joe Tsai35ec98f2019-03-25 14:41:32 -0700185 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700188 got: legacy.LoadMessageDesc(reflect.TypeOf(new(proto2_20180125.Message))),
Joe Tsai08e00302018-11-26 22:32:06 -0800189 want: fileDescP2_20180125.Messages().ByName("Message"),
190 }, {
Joe Tsai35ec98f2019-03-25 14:41:32 -0700191 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700194 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700197 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700200 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700203 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700206 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700209 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700215 got: legacy.LoadEnumDesc(reflect.TypeOf(proto3_20180125.SiblingEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800216 want: fileDescP3_20180125.Enums().ByName("SiblingEnum"),
217 }, {
Joe Tsai35ec98f2019-03-25 14:41:32 -0700218 got: legacy.LoadEnumDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700221 got: legacy.LoadMessageDesc(reflect.TypeOf(new(proto3_20180125.SiblingMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800222 want: fileDescP3_20180125.Messages().ByName("SiblingMessage"),
223 }, {
Joe Tsai35ec98f2019-03-25 14:41:32 -0700224 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700227 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700233 got: legacy.LoadEnumDesc(reflect.TypeOf(proto2_20180430.SiblingEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800234 want: fileDescP2_20180430.Enums().ByName("SiblingEnum"),
235 }, {
Joe Tsai35ec98f2019-03-25 14:41:32 -0700236 got: legacy.LoadEnumDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700239 got: legacy.LoadMessageDesc(reflect.TypeOf(new(proto2_20180430.SiblingMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800240 want: fileDescP2_20180430.Messages().ByName("SiblingMessage"),
241 }, {
Joe Tsai35ec98f2019-03-25 14:41:32 -0700242 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700245 got: legacy.LoadMessageDesc(reflect.TypeOf(new(proto2_20180430.Message))),
Joe Tsai08e00302018-11-26 22:32:06 -0800246 want: fileDescP2_20180430.Messages().ByName("Message"),
247 }, {
Joe Tsai35ec98f2019-03-25 14:41:32 -0700248 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700251 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700254 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700257 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700260 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700263 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700266 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700272 got: legacy.LoadEnumDesc(reflect.TypeOf(proto3_20180430.SiblingEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800273 want: fileDescP3_20180430.Enums().ByName("SiblingEnum"),
274 }, {
Joe Tsai35ec98f2019-03-25 14:41:32 -0700275 got: legacy.LoadEnumDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700278 got: legacy.LoadMessageDesc(reflect.TypeOf(new(proto3_20180430.SiblingMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800279 want: fileDescP3_20180430.Messages().ByName("SiblingMessage"),
280 }, {
Joe Tsai35ec98f2019-03-25 14:41:32 -0700281 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700284 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700290 got: legacy.LoadEnumDesc(reflect.TypeOf(proto2_20180814.SiblingEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800291 want: fileDescP2_20180814.Enums().ByName("SiblingEnum"),
292 }, {
Joe Tsai35ec98f2019-03-25 14:41:32 -0700293 got: legacy.LoadEnumDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700296 got: legacy.LoadMessageDesc(reflect.TypeOf(new(proto2_20180814.SiblingMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800297 want: fileDescP2_20180814.Messages().ByName("SiblingMessage"),
298 }, {
Joe Tsai35ec98f2019-03-25 14:41:32 -0700299 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700302 got: legacy.LoadMessageDesc(reflect.TypeOf(new(proto2_20180814.Message))),
Joe Tsai08e00302018-11-26 22:32:06 -0800303 want: fileDescP2_20180814.Messages().ByName("Message"),
304 }, {
Joe Tsai35ec98f2019-03-25 14:41:32 -0700305 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700308 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700311 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700314 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700317 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700320 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700323 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700329 got: legacy.LoadEnumDesc(reflect.TypeOf(proto3_20180814.SiblingEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800330 want: fileDescP3_20180814.Enums().ByName("SiblingEnum"),
331 }, {
Joe Tsai35ec98f2019-03-25 14:41:32 -0700332 got: legacy.LoadEnumDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700335 got: legacy.LoadMessageDesc(reflect.TypeOf(new(proto3_20180814.SiblingMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800336 want: fileDescP3_20180814.Messages().ByName("SiblingMessage"),
337 }, {
Joe Tsai35ec98f2019-03-25 14:41:32 -0700338 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700341 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700347 got: legacy.LoadEnumDesc(reflect.TypeOf(proto2_20181126.SiblingEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800348 want: fileDescP2_20181126.Enums().ByName("SiblingEnum"),
349 }, {
Joe Tsai35ec98f2019-03-25 14:41:32 -0700350 got: legacy.LoadEnumDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700353 got: legacy.LoadMessageDesc(reflect.TypeOf(new(proto2_20181126.SiblingMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800354 want: fileDescP2_20181126.Messages().ByName("SiblingMessage"),
355 }, {
Joe Tsai35ec98f2019-03-25 14:41:32 -0700356 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700359 got: legacy.LoadMessageDesc(reflect.TypeOf(new(proto2_20181126.Message))),
Joe Tsai08e00302018-11-26 22:32:06 -0800360 want: fileDescP2_20181126.Messages().ByName("Message"),
361 }, {
Joe Tsai35ec98f2019-03-25 14:41:32 -0700362 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700365 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700368 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700371 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700374 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700377 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700380 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700386 got: legacy.LoadEnumDesc(reflect.TypeOf(proto3_20181126.SiblingEnum(0))),
Joe Tsai08e00302018-11-26 22:32:06 -0800387 want: fileDescP3_20181126.Enums().ByName("SiblingEnum"),
388 }, {
Joe Tsai35ec98f2019-03-25 14:41:32 -0700389 got: legacy.LoadEnumDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700392 got: legacy.LoadMessageDesc(reflect.TypeOf(new(proto3_20181126.SiblingMessage))),
Joe Tsai08e00302018-11-26 22:32:06 -0800393 want: fileDescP3_20181126.Messages().ByName("SiblingMessage"),
394 }, {
Joe Tsai35ec98f2019-03-25 14:41:32 -0700395 got: legacy.LoadMessageDesc(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 Tsai35ec98f2019-03-25 14:41:32 -0700398 got: legacy.LoadMessageDesc(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 Tsai67c1d9b2019-05-12 02:27:46 -0700424 case "ParentFile":
425 // Ignore parent file 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}