github.com/whiteCcinn/protobuf-go@v1.0.9/types/dynamicpb/dynamic_test.go (about) 1 // Copyright 2019 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 5 package dynamicpb_test 6 7 import ( 8 "testing" 9 10 "github.com/whiteCcinn/protobuf-go/proto" 11 "github.com/whiteCcinn/protobuf-go/reflect/protoreflect" 12 "github.com/whiteCcinn/protobuf-go/reflect/protoregistry" 13 "github.com/whiteCcinn/protobuf-go/testing/prototest" 14 "github.com/whiteCcinn/protobuf-go/types/dynamicpb" 15 16 testpb "github.com/whiteCcinn/protobuf-go/internal/testprotos/test" 17 test3pb "github.com/whiteCcinn/protobuf-go/internal/testprotos/test3" 18 ) 19 20 func TestConformance(t *testing.T) { 21 for _, message := range []proto.Message{ 22 (*testpb.TestAllTypes)(nil), 23 (*test3pb.TestAllTypes)(nil), 24 (*testpb.TestAllExtensions)(nil), 25 } { 26 mt := dynamicpb.NewMessageType(message.ProtoReflect().Descriptor()) 27 prototest.Message{}.Test(t, mt) 28 } 29 } 30 31 func TestDynamicExtensions(t *testing.T) { 32 for _, message := range []proto.Message{ 33 (*testpb.TestAllExtensions)(nil), 34 } { 35 mt := dynamicpb.NewMessageType(message.ProtoReflect().Descriptor()) 36 prototest.Message{ 37 Resolver: extResolver{}, 38 }.Test(t, mt) 39 } 40 } 41 42 func TestDynamicEnums(t *testing.T) { 43 for _, enum := range []protoreflect.Enum{ 44 testpb.TestAllTypes_FOO, 45 test3pb.TestAllTypes_FOO, 46 } { 47 et := dynamicpb.NewEnumType(enum.Descriptor()) 48 prototest.Enum{}.Test(t, et) 49 } 50 } 51 52 type extResolver struct{} 53 54 func (extResolver) FindExtensionByName(field protoreflect.FullName) (protoreflect.ExtensionType, error) { 55 xt, err := protoregistry.GlobalTypes.FindExtensionByName(field) 56 if err != nil { 57 return nil, err 58 } 59 return dynamicpb.NewExtensionType(xt.TypeDescriptor().Descriptor()), nil 60 } 61 62 func (extResolver) FindExtensionByNumber(message protoreflect.FullName, field protoreflect.FieldNumber) (protoreflect.ExtensionType, error) { 63 xt, err := protoregistry.GlobalTypes.FindExtensionByNumber(message, field) 64 if err != nil { 65 return nil, err 66 } 67 return dynamicpb.NewExtensionType(xt.TypeDescriptor().Descriptor()), nil 68 } 69 70 func (extResolver) RangeExtensionsByMessage(message protoreflect.FullName, f func(protoreflect.ExtensionType) bool) { 71 protoregistry.GlobalTypes.RangeExtensionsByMessage(message, func(xt protoreflect.ExtensionType) bool { 72 return f(dynamicpb.NewExtensionType(xt.TypeDescriptor().Descriptor())) 73 }) 74 }