// Copyright 2018 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package defval import ( "math" "reflect" "testing" pref "github.com/golang/protobuf/v2/reflect/protoreflect" ) func Test(t *testing.T) { V := pref.ValueOf tests := []struct { val pref.Value kind pref.Kind strPB string strGo string }{ {V(bool(true)), pref.BoolKind, "true", "1"}, {V(int32(-0x1234)), pref.Int32Kind, "-4660", "-4660"}, {V(float32(math.Pi)), pref.FloatKind, "3.1415927", "3.1415927"}, {V(float64(math.Pi)), pref.DoubleKind, "3.141592653589793", "3.141592653589793"}, {V(string("hello, \xde\xad\xbe\xef\n")), pref.StringKind, "hello, \xde\xad\xbe\xef\n", "hello, \xde\xad\xbe\xef\n"}, {V([]byte("hello, \xde\xad\xbe\xef\n")), pref.BytesKind, "hello, \\336\\255\\276\\357\\n", "hello, \\336\\255\\276\\357\\n"}, } for _, tt := range tests { t.Run("", func(t *testing.T) { gotStrPB, _ := Marshal(tt.val, tt.kind, Descriptor) if gotStrPB != tt.strPB { t.Errorf("Marshal(%v, %v, Descriptor) = %q, want %q", tt.val, tt.kind, gotStrPB, tt.strPB) } gotStrGo, _ := Marshal(tt.val, tt.kind, GoTag) if gotStrGo != tt.strGo { t.Errorf("Marshal(%v, %v, GoTag) = %q, want %q", tt.val, tt.kind, gotStrGo, tt.strGo) } gotValPB, _ := Unmarshal(tt.strPB, tt.kind, Descriptor) if !reflect.DeepEqual(gotValPB.Interface(), tt.val.Interface()) { t.Errorf("Unmarshal(%v, %v, Descriptor) = %q, want %q", tt.strPB, tt.kind, gotValPB, tt.val) } gotValGo, _ := Unmarshal(tt.strGo, tt.kind, GoTag) if !reflect.DeepEqual(gotValGo.Interface(), tt.val.Interface()) { t.Errorf("Unmarshal(%v, %v, GoTag) = %q, want %q", tt.strGo, tt.kind, gotValGo, tt.val) } }) } }