| // Copyright 2020 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package descriptor |
| |
| import ( |
| "testing" |
| |
| "github.com/google/go-cmp/cmp" |
| "google.golang.org/protobuf/reflect/protoreflect" |
| |
| descpb "github.com/golang/protobuf/protoc-gen-go/descriptor" |
| ) |
| |
| func TestEnumDescriptor(t *testing.T) { |
| tests := []struct { |
| enum protoreflect.Enum |
| idxs []int |
| name string |
| }{{ |
| enum: descpb.FieldDescriptorProto_Type(0), |
| idxs: []int{ |
| new(descpb.FieldDescriptorProto).ProtoReflect().Descriptor().Index(), |
| new(descpb.FieldDescriptorProto_Type).Descriptor().Index(), |
| }, |
| name: "Type", |
| }, { |
| enum: descpb.FieldOptions_CType(0), |
| idxs: []int{ |
| new(descpb.FieldOptions).ProtoReflect().Descriptor().Index(), |
| new(descpb.FieldOptions_CType).Descriptor().Index(), |
| }, |
| name: "CType", |
| }} |
| |
| for _, tt := range tests { |
| e := struct{ protoreflect.Enum }{tt.enum} // v2-only enum |
| |
| _, idxs := EnumRawDescriptor(e) |
| if diff := cmp.Diff(tt.idxs, idxs); diff != "" { |
| t.Errorf("path index mismatch (-want +got):\n%v", diff) |
| } |
| |
| _, ed := EnumDescriptorProto(e) |
| if ed.GetName() != tt.name { |
| t.Errorf("mismatching enum name: got %v, want %v", ed.GetName(), tt.name) |
| } |
| } |
| } |
| |
| func TestMessageDescriptor(t *testing.T) { |
| tests := []struct { |
| message protoreflect.ProtoMessage |
| idxs []int |
| name string |
| }{{ |
| message: (*descpb.SourceCodeInfo_Location)(nil), |
| idxs: []int{ |
| new(descpb.SourceCodeInfo).ProtoReflect().Descriptor().Index(), |
| new(descpb.SourceCodeInfo_Location).ProtoReflect().Descriptor().Index(), |
| }, |
| name: "Location", |
| }, { |
| message: (*descpb.FileDescriptorProto)(nil), |
| idxs: []int{ |
| new(descpb.FileDescriptorProto).ProtoReflect().Descriptor().Index(), |
| }, |
| name: "FileDescriptorProto", |
| }} |
| |
| for _, tt := range tests { |
| m := struct{ protoreflect.ProtoMessage }{tt.message} // v2-only message |
| |
| _, idxs := MessageRawDescriptor(m) |
| if diff := cmp.Diff(tt.idxs, idxs); diff != "" { |
| t.Errorf("path index mismatch (-want +got):\n%v", diff) |
| } |
| |
| _, md := MessageDescriptorProto(m) |
| if md.GetName() != tt.name { |
| t.Errorf("mismatching message name: got %v, want %v", md.GetName(), tt.name) |
| } |
| } |
| } |