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