blob: 440863f4f6a4738f3c1e7f134a9bf39430081dae [file] [log] [blame]
Joe Tsai62517cc2018-12-04 14:00:01 -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
5package legacy_test
6
7import (
8 "testing"
9
10 papi "github.com/golang/protobuf/protoapi"
11 pimpl "github.com/golang/protobuf/v2/internal/impl"
Joe Tsai990b9f52019-03-13 12:56:39 -070012 ptype "github.com/golang/protobuf/v2/internal/prototype"
Joe Tsai62517cc2018-12-04 14:00:01 -080013 pref "github.com/golang/protobuf/v2/reflect/protoreflect"
Joe Tsai62517cc2018-12-04 14:00:01 -080014
15 // The legacy package must be imported prior to use of any legacy messages.
16 // TODO: Remove this when protoV1 registers these hooks for you.
17 plegacy "github.com/golang/protobuf/v2/internal/legacy"
18
19 proto2_20180125 "github.com/golang/protobuf/v2/internal/testprotos/legacy/proto2.v1.0.0-20180125-92554152"
20)
21
22type legacyTestMessage struct {
23 XXX_unrecognized []byte
24 papi.XXX_InternalExtensions
25}
26
27func (*legacyTestMessage) Reset() {}
28func (*legacyTestMessage) String() string { return "" }
29func (*legacyTestMessage) ProtoMessage() {}
30func (*legacyTestMessage) ExtensionRangeArray() []papi.ExtensionRange {
31 return []papi.ExtensionRange{{Start: 10000, End: 20000}}
32}
33
34func mustMakeExtensionType(x *ptype.StandaloneExtension, v interface{}) pref.ExtensionType {
35 xd, err := ptype.NewExtension(x)
36 if err != nil {
37 panic(xd)
38 }
39 return pimpl.Export{}.ExtensionTypeOf(xd, v)
40}
41
42var (
43 parentType = pimpl.Export{}.MessageTypeOf((*legacyTestMessage)(nil))
44 messageV1Type = pimpl.Export{}.MessageTypeOf((*proto2_20180125.Message_ChildMessage)(nil))
45
46 wantType = mustMakeExtensionType(&ptype.StandaloneExtension{
47 FullName: "fizz.buzz.optional_message_v1",
48 Number: 10007,
49 Cardinality: pref.Optional,
50 Kind: pref.MessageKind,
51 MessageType: messageV1Type,
52 ExtendedType: parentType,
53 }, (*proto2_20180125.Message_ChildMessage)(nil))
54 wantDesc = &papi.ExtensionDesc{
55 ExtendedType: (*legacyTestMessage)(nil),
56 ExtensionType: (*proto2_20180125.Message_ChildMessage)(nil),
57 Field: 10007,
58 Name: "fizz.buzz.optional_message_v1",
59 Tag: "bytes,10007,opt,name=optional_message_v1",
60 }
61)
62
63func BenchmarkConvert(b *testing.B) {
64 b.ReportAllocs()
65 for i := 0; i < b.N; i++ {
66 xd := plegacy.Export{}.ExtensionDescFromType(wantType)
67 gotType := plegacy.Export{}.ExtensionTypeFromDesc(xd)
68 if gotType != wantType {
69 b.Fatalf("ExtensionType mismatch: got %p, want %p", gotType, wantType)
70 }
71
72 xt := plegacy.Export{}.ExtensionTypeFromDesc(wantDesc)
73 gotDesc := plegacy.Export{}.ExtensionDescFromType(xt)
74 if gotDesc != wantDesc {
75 b.Fatalf("ExtensionDesc mismatch: got %p, want %p", gotDesc, wantDesc)
76 }
77 }
78}