xref: /aosp_15_r20/external/golang-protobuf/internal/encoding/defval/default_test.go (revision 1c12ee1efe575feb122dbf939ff15148a3b3e8f2)
1*1c12ee1eSDan Willemsen// Copyright 2018 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 defval_test
6*1c12ee1eSDan Willemsen
7*1c12ee1eSDan Willemsenimport (
8*1c12ee1eSDan Willemsen	"math"
9*1c12ee1eSDan Willemsen	"reflect"
10*1c12ee1eSDan Willemsen	"testing"
11*1c12ee1eSDan Willemsen
12*1c12ee1eSDan Willemsen	"google.golang.org/protobuf/internal/encoding/defval"
13*1c12ee1eSDan Willemsen	"google.golang.org/protobuf/internal/filedesc"
14*1c12ee1eSDan Willemsen	"google.golang.org/protobuf/reflect/protoreflect"
15*1c12ee1eSDan Willemsen)
16*1c12ee1eSDan Willemsen
17*1c12ee1eSDan Willemsenfunc Test(t *testing.T) {
18*1c12ee1eSDan Willemsen	evs := filedesc.EnumValues{List: []filedesc.EnumValue{{}}}
19*1c12ee1eSDan Willemsen	evs.List[0].L0.ParentFile = filedesc.SurrogateProto2
20*1c12ee1eSDan Willemsen	evs.List[0].L0.FullName = "ALPHA"
21*1c12ee1eSDan Willemsen	evs.List[0].L1.Number = 1
22*1c12ee1eSDan Willemsen
23*1c12ee1eSDan Willemsen	V := protoreflect.ValueOf
24*1c12ee1eSDan Willemsen	tests := []struct {
25*1c12ee1eSDan Willemsen		val   protoreflect.Value
26*1c12ee1eSDan Willemsen		enum  protoreflect.EnumValueDescriptor
27*1c12ee1eSDan Willemsen		enums protoreflect.EnumValueDescriptors
28*1c12ee1eSDan Willemsen		kind  protoreflect.Kind
29*1c12ee1eSDan Willemsen		strPB string
30*1c12ee1eSDan Willemsen		strGo string
31*1c12ee1eSDan Willemsen	}{{
32*1c12ee1eSDan Willemsen		val:   V(bool(true)),
33*1c12ee1eSDan Willemsen		enum:  nil,
34*1c12ee1eSDan Willemsen		enums: nil,
35*1c12ee1eSDan Willemsen		kind:  protoreflect.BoolKind,
36*1c12ee1eSDan Willemsen		strPB: "true",
37*1c12ee1eSDan Willemsen		strGo: "1",
38*1c12ee1eSDan Willemsen	}, {
39*1c12ee1eSDan Willemsen		val:   V(int32(-0x1234)),
40*1c12ee1eSDan Willemsen		enum:  nil,
41*1c12ee1eSDan Willemsen		enums: nil,
42*1c12ee1eSDan Willemsen		kind:  protoreflect.Int32Kind,
43*1c12ee1eSDan Willemsen		strPB: "-4660",
44*1c12ee1eSDan Willemsen		strGo: "-4660",
45*1c12ee1eSDan Willemsen	}, {
46*1c12ee1eSDan Willemsen		val:   V(float32(math.Pi)),
47*1c12ee1eSDan Willemsen		enum:  nil,
48*1c12ee1eSDan Willemsen		enums: nil,
49*1c12ee1eSDan Willemsen		kind:  protoreflect.FloatKind,
50*1c12ee1eSDan Willemsen		strPB: "3.1415927",
51*1c12ee1eSDan Willemsen		strGo: "3.1415927",
52*1c12ee1eSDan Willemsen	}, {
53*1c12ee1eSDan Willemsen		val:   V(float64(math.Pi)),
54*1c12ee1eSDan Willemsen		enum:  nil,
55*1c12ee1eSDan Willemsen		enums: nil,
56*1c12ee1eSDan Willemsen		kind:  protoreflect.DoubleKind,
57*1c12ee1eSDan Willemsen		strPB: "3.141592653589793",
58*1c12ee1eSDan Willemsen		strGo: "3.141592653589793",
59*1c12ee1eSDan Willemsen	}, {
60*1c12ee1eSDan Willemsen		val:   V(string("hello, \xde\xad\xbe\xef\n")),
61*1c12ee1eSDan Willemsen		enum:  nil,
62*1c12ee1eSDan Willemsen		enums: nil,
63*1c12ee1eSDan Willemsen		kind:  protoreflect.StringKind,
64*1c12ee1eSDan Willemsen		strPB: "hello, \xde\xad\xbe\xef\n",
65*1c12ee1eSDan Willemsen		strGo: "hello, \xde\xad\xbe\xef\n",
66*1c12ee1eSDan Willemsen	}, {
67*1c12ee1eSDan Willemsen		val:   V([]byte("hello, \xde\xad\xbe\xef\n")),
68*1c12ee1eSDan Willemsen		enum:  nil,
69*1c12ee1eSDan Willemsen		enums: nil,
70*1c12ee1eSDan Willemsen		kind:  protoreflect.BytesKind,
71*1c12ee1eSDan Willemsen		strPB: "hello, \\336\\255\\276\\357\\n",
72*1c12ee1eSDan Willemsen		strGo: "hello, \\336\\255\\276\\357\\n",
73*1c12ee1eSDan Willemsen	}, {
74*1c12ee1eSDan Willemsen		val:   V(protoreflect.EnumNumber(1)),
75*1c12ee1eSDan Willemsen		enum:  &evs.List[0],
76*1c12ee1eSDan Willemsen		enums: &evs,
77*1c12ee1eSDan Willemsen		kind:  protoreflect.EnumKind,
78*1c12ee1eSDan Willemsen		strPB: "ALPHA",
79*1c12ee1eSDan Willemsen		strGo: "1",
80*1c12ee1eSDan Willemsen	}}
81*1c12ee1eSDan Willemsen
82*1c12ee1eSDan Willemsen	for _, tt := range tests {
83*1c12ee1eSDan Willemsen		t.Run("", func(t *testing.T) {
84*1c12ee1eSDan Willemsen			gotStr, _ := defval.Marshal(tt.val, tt.enum, tt.kind, defval.Descriptor)
85*1c12ee1eSDan Willemsen			if gotStr != tt.strPB {
86*1c12ee1eSDan Willemsen				t.Errorf("Marshal(%v, %v, Descriptor) = %q, want %q", tt.val, tt.kind, gotStr, tt.strPB)
87*1c12ee1eSDan Willemsen			}
88*1c12ee1eSDan Willemsen
89*1c12ee1eSDan Willemsen			gotStr, _ = defval.Marshal(tt.val, tt.enum, tt.kind, defval.GoTag)
90*1c12ee1eSDan Willemsen			if gotStr != tt.strGo {
91*1c12ee1eSDan Willemsen				t.Errorf("Marshal(%v, %v, GoTag) = %q, want %q", tt.val, tt.kind, gotStr, tt.strGo)
92*1c12ee1eSDan Willemsen			}
93*1c12ee1eSDan Willemsen
94*1c12ee1eSDan Willemsen			gotVal, gotEnum, _ := defval.Unmarshal(tt.strPB, tt.kind, tt.enums, defval.Descriptor)
95*1c12ee1eSDan Willemsen			if !reflect.DeepEqual(gotVal.Interface(), tt.val.Interface()) || gotEnum != tt.enum {
96*1c12ee1eSDan Willemsen				t.Errorf("Unmarshal(%v, %v, Descriptor) = (%q, %v), want (%q, %v)", tt.strPB, tt.kind, gotVal, gotEnum, tt.val, tt.enum)
97*1c12ee1eSDan Willemsen			}
98*1c12ee1eSDan Willemsen
99*1c12ee1eSDan Willemsen			gotVal, gotEnum, _ = defval.Unmarshal(tt.strGo, tt.kind, tt.enums, defval.GoTag)
100*1c12ee1eSDan Willemsen			if !reflect.DeepEqual(gotVal.Interface(), tt.val.Interface()) || gotEnum != tt.enum {
101*1c12ee1eSDan Willemsen				t.Errorf("Unmarshal(%v, %v, GoTag) = (%q, %v), want (%q, %v)", tt.strGo, tt.kind, gotVal, gotEnum, tt.val, tt.enum)
102*1c12ee1eSDan Willemsen			}
103*1c12ee1eSDan Willemsen		})
104*1c12ee1eSDan Willemsen	}
105*1c12ee1eSDan Willemsen}
106