xref: /aosp_15_r20/external/golang-protobuf/internal/impl/extension_test.go (revision 1c12ee1efe575feb122dbf939ff15148a3b3e8f2)
1*1c12ee1eSDan Willemsen// Copyright 2019 The Go Authors. All rights reserved.
2*1c12ee1eSDan Willemsen// Use of this source code is governed by a BSD-style
3*1c12ee1eSDan Willemsen// license that can be found in the LICENSE file.
4*1c12ee1eSDan Willemsen
5*1c12ee1eSDan Willemsenpackage impl_test
6*1c12ee1eSDan Willemsen
7*1c12ee1eSDan Willemsenimport (
8*1c12ee1eSDan Willemsen	"fmt"
9*1c12ee1eSDan Willemsen	"testing"
10*1c12ee1eSDan Willemsen
11*1c12ee1eSDan Willemsen	"github.com/google/go-cmp/cmp"
12*1c12ee1eSDan Willemsen
13*1c12ee1eSDan Willemsen	"google.golang.org/protobuf/proto"
14*1c12ee1eSDan Willemsen	"google.golang.org/protobuf/reflect/protoreflect"
15*1c12ee1eSDan Willemsen
16*1c12ee1eSDan Willemsen	testpb "google.golang.org/protobuf/internal/testprotos/test"
17*1c12ee1eSDan Willemsen)
18*1c12ee1eSDan Willemsen
19*1c12ee1eSDan Willemsenfunc TestExtensionType(t *testing.T) {
20*1c12ee1eSDan Willemsen	cmpOpts := cmp.Options{
21*1c12ee1eSDan Willemsen		cmp.Comparer(func(x, y proto.Message) bool {
22*1c12ee1eSDan Willemsen			return proto.Equal(x, y)
23*1c12ee1eSDan Willemsen		}),
24*1c12ee1eSDan Willemsen	}
25*1c12ee1eSDan Willemsen	for _, test := range []struct {
26*1c12ee1eSDan Willemsen		xt    protoreflect.ExtensionType
27*1c12ee1eSDan Willemsen		value interface{}
28*1c12ee1eSDan Willemsen	}{
29*1c12ee1eSDan Willemsen		{
30*1c12ee1eSDan Willemsen			xt:    testpb.E_OptionalInt32,
31*1c12ee1eSDan Willemsen			value: int32(0),
32*1c12ee1eSDan Willemsen		},
33*1c12ee1eSDan Willemsen		{
34*1c12ee1eSDan Willemsen			xt:    testpb.E_OptionalInt64,
35*1c12ee1eSDan Willemsen			value: int64(0),
36*1c12ee1eSDan Willemsen		},
37*1c12ee1eSDan Willemsen		{
38*1c12ee1eSDan Willemsen			xt:    testpb.E_OptionalUint32,
39*1c12ee1eSDan Willemsen			value: uint32(0),
40*1c12ee1eSDan Willemsen		},
41*1c12ee1eSDan Willemsen		{
42*1c12ee1eSDan Willemsen			xt:    testpb.E_OptionalUint64,
43*1c12ee1eSDan Willemsen			value: uint64(0),
44*1c12ee1eSDan Willemsen		},
45*1c12ee1eSDan Willemsen		{
46*1c12ee1eSDan Willemsen			xt:    testpb.E_OptionalFloat,
47*1c12ee1eSDan Willemsen			value: float32(0),
48*1c12ee1eSDan Willemsen		},
49*1c12ee1eSDan Willemsen		{
50*1c12ee1eSDan Willemsen			xt:    testpb.E_OptionalDouble,
51*1c12ee1eSDan Willemsen			value: float64(0),
52*1c12ee1eSDan Willemsen		},
53*1c12ee1eSDan Willemsen		{
54*1c12ee1eSDan Willemsen			xt:    testpb.E_OptionalBool,
55*1c12ee1eSDan Willemsen			value: true,
56*1c12ee1eSDan Willemsen		},
57*1c12ee1eSDan Willemsen		{
58*1c12ee1eSDan Willemsen			xt:    testpb.E_OptionalString,
59*1c12ee1eSDan Willemsen			value: "",
60*1c12ee1eSDan Willemsen		},
61*1c12ee1eSDan Willemsen		{
62*1c12ee1eSDan Willemsen			xt:    testpb.E_OptionalBytes,
63*1c12ee1eSDan Willemsen			value: []byte{},
64*1c12ee1eSDan Willemsen		},
65*1c12ee1eSDan Willemsen		{
66*1c12ee1eSDan Willemsen			xt:    testpb.E_OptionalNestedMessage,
67*1c12ee1eSDan Willemsen			value: &testpb.TestAllExtensions_NestedMessage{},
68*1c12ee1eSDan Willemsen		},
69*1c12ee1eSDan Willemsen		{
70*1c12ee1eSDan Willemsen			xt:    testpb.E_OptionalNestedEnum,
71*1c12ee1eSDan Willemsen			value: testpb.TestAllTypes_FOO,
72*1c12ee1eSDan Willemsen		},
73*1c12ee1eSDan Willemsen		{
74*1c12ee1eSDan Willemsen			xt:    testpb.E_RepeatedInt32,
75*1c12ee1eSDan Willemsen			value: []int32{0},
76*1c12ee1eSDan Willemsen		},
77*1c12ee1eSDan Willemsen		{
78*1c12ee1eSDan Willemsen			xt:    testpb.E_RepeatedInt64,
79*1c12ee1eSDan Willemsen			value: []int64{0},
80*1c12ee1eSDan Willemsen		},
81*1c12ee1eSDan Willemsen		{
82*1c12ee1eSDan Willemsen			xt:    testpb.E_RepeatedUint32,
83*1c12ee1eSDan Willemsen			value: []uint32{0},
84*1c12ee1eSDan Willemsen		},
85*1c12ee1eSDan Willemsen		{
86*1c12ee1eSDan Willemsen			xt:    testpb.E_RepeatedUint64,
87*1c12ee1eSDan Willemsen			value: []uint64{0},
88*1c12ee1eSDan Willemsen		},
89*1c12ee1eSDan Willemsen		{
90*1c12ee1eSDan Willemsen			xt:    testpb.E_RepeatedFloat,
91*1c12ee1eSDan Willemsen			value: []float32{0},
92*1c12ee1eSDan Willemsen		},
93*1c12ee1eSDan Willemsen		{
94*1c12ee1eSDan Willemsen			xt:    testpb.E_RepeatedDouble,
95*1c12ee1eSDan Willemsen			value: []float64{0},
96*1c12ee1eSDan Willemsen		},
97*1c12ee1eSDan Willemsen		{
98*1c12ee1eSDan Willemsen			xt:    testpb.E_RepeatedBool,
99*1c12ee1eSDan Willemsen			value: []bool{true},
100*1c12ee1eSDan Willemsen		},
101*1c12ee1eSDan Willemsen		{
102*1c12ee1eSDan Willemsen			xt:    testpb.E_RepeatedString,
103*1c12ee1eSDan Willemsen			value: []string{""},
104*1c12ee1eSDan Willemsen		},
105*1c12ee1eSDan Willemsen		{
106*1c12ee1eSDan Willemsen			xt:    testpb.E_RepeatedBytes,
107*1c12ee1eSDan Willemsen			value: [][]byte{nil},
108*1c12ee1eSDan Willemsen		},
109*1c12ee1eSDan Willemsen		{
110*1c12ee1eSDan Willemsen			xt:    testpb.E_RepeatedNestedMessage,
111*1c12ee1eSDan Willemsen			value: []*testpb.TestAllExtensions_NestedMessage{{}},
112*1c12ee1eSDan Willemsen		},
113*1c12ee1eSDan Willemsen		{
114*1c12ee1eSDan Willemsen			xt:    testpb.E_RepeatedNestedEnum,
115*1c12ee1eSDan Willemsen			value: []testpb.TestAllTypes_NestedEnum{testpb.TestAllTypes_FOO},
116*1c12ee1eSDan Willemsen		},
117*1c12ee1eSDan Willemsen	} {
118*1c12ee1eSDan Willemsen		name := test.xt.TypeDescriptor().FullName()
119*1c12ee1eSDan Willemsen		t.Run(fmt.Sprint(name), func(t *testing.T) {
120*1c12ee1eSDan Willemsen			if !test.xt.IsValidInterface(test.value) {
121*1c12ee1eSDan Willemsen				t.Fatalf("IsValidInterface(%[1]T(%[1]v)) = false, want true", test.value)
122*1c12ee1eSDan Willemsen			}
123*1c12ee1eSDan Willemsen			v := test.xt.ValueOf(test.value)
124*1c12ee1eSDan Willemsen			if !test.xt.IsValidValue(v) {
125*1c12ee1eSDan Willemsen				t.Fatalf("IsValidValue(%[1]T(%[1]v)) = false, want true", v)
126*1c12ee1eSDan Willemsen			}
127*1c12ee1eSDan Willemsen			if got, want := test.xt.InterfaceOf(v), test.value; !cmp.Equal(got, want, cmpOpts) {
128*1c12ee1eSDan Willemsen				t.Fatalf("round trip InterfaceOf(ValueOf(x)) = %v, want %v", got, want)
129*1c12ee1eSDan Willemsen			}
130*1c12ee1eSDan Willemsen		})
131*1c12ee1eSDan Willemsen	}
132*1c12ee1eSDan Willemsen}
133