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 5package dynamicpb_test 6 7import ( 8 "testing" 9 10 "google.golang.org/protobuf/proto" 11 pref "google.golang.org/protobuf/reflect/protoreflect" 12 preg "google.golang.org/protobuf/reflect/protoregistry" 13 "google.golang.org/protobuf/testing/prototest" 14 "google.golang.org/protobuf/types/dynamicpb" 15 16 testpb "google.golang.org/protobuf/internal/testprotos/test" 17 test3pb "google.golang.org/protobuf/internal/testprotos/test3" 18) 19 20func 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 31func 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 42func TestDynamicEnums(t *testing.T) { 43 for _, enum := range []pref.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 52type extResolver struct{} 53 54func (extResolver) FindExtensionByName(field pref.FullName) (pref.ExtensionType, error) { 55 xt, err := preg.GlobalTypes.FindExtensionByName(field) 56 if err != nil { 57 return nil, err 58 } 59 return dynamicpb.NewExtensionType(xt.TypeDescriptor().Descriptor()), nil 60} 61 62func (extResolver) FindExtensionByNumber(message pref.FullName, field pref.FieldNumber) (pref.ExtensionType, error) { 63 xt, err := preg.GlobalTypes.FindExtensionByNumber(message, field) 64 if err != nil { 65 return nil, err 66 } 67 return dynamicpb.NewExtensionType(xt.TypeDescriptor().Descriptor()), nil 68} 69 70func (extResolver) RangeExtensionsByMessage(message pref.FullName, f func(pref.ExtensionType) bool) { 71 preg.GlobalTypes.RangeExtensionsByMessage(message, func(xt pref.ExtensionType) bool { 72 return f(dynamicpb.NewExtensionType(xt.TypeDescriptor().Descriptor())) 73 }) 74} 75