github.com/voedger/voedger@v0.0.0-20240520144910-273e84102129/pkg/utils/maps_test.go (about) 1 /* 2 * Copyright (c) 2020-present unTill Pro, Ltd. 3 * @author Denis Gribanov 4 */ 5 6 package coreutils 7 8 import ( 9 "testing" 10 11 "github.com/stretchr/testify/require" 12 "github.com/voedger/voedger/pkg/istructs" 13 ) 14 15 func TestBasicUsage_PairsToMap(t *testing.T) { 16 require := require.New(t) 17 cases := []struct { 18 pairs []string 19 expectedMap map[string]string 20 }{ 21 {nil, map[string]string{}}, 22 {[]string{}, map[string]string{}}, 23 {[]string{"="}, map[string]string{"": ""}}, 24 {[]string{"=v"}, map[string]string{"": "v"}}, 25 {[]string{"k="}, map[string]string{"k": ""}}, 26 {[]string{"k=v"}, map[string]string{"k": "v"}}, 27 {[]string{"k1=v1", "k2=v2"}, map[string]string{"k1": "v1", "k2": "v2"}}, 28 {[]string{"k=v", "k=v"}, map[string]string{"k": "v"}}, 29 } 30 31 for _, c := range cases { 32 m := map[string]string{} 33 require.NoError(PairsToMap(c.pairs, m)) 34 require.Equal(c.expectedMap, m) 35 } 36 } 37 38 func TestPairsToMapErrors(t *testing.T) { 39 require := require.New(t) 40 cases := [][]string{ 41 {""}, 42 {"k"}, 43 {"=="}, 44 {"k=v="}, 45 } 46 47 for _, c := range cases { 48 m := map[string]string{} 49 require.Error(PairsToMap(c, m)) 50 } 51 } 52 53 func TestMapToObject(t *testing.T) { 54 o := &TestObject{ 55 Data: map[string]interface{}{}, 56 } 57 require := require.New(t) 58 require.NoError(MapToObject(map[string]interface{}{ 59 "float64": float64(42), 60 "float32": float32(43), 61 "int32": int32(44), 62 "int64": int64(45), 63 "recordID": istructs.RecordID(46), 64 "str": "str1", 65 "bool": true, 66 "any": nil, // will be ignored 67 }, o)) 68 require.Len(o.Data, 7) 69 require.Equal(float64(42), o.Data["float64"]) 70 require.Equal(float64(43), o.Data["float32"]) 71 require.Equal(float64(44), o.Data["int32"]) 72 require.Equal(float64(45), o.Data["int64"]) 73 require.Equal(float64(46), o.Data["recordID"]) 74 75 require.Equal("str1", o.Data["str"]) 76 v, ok := o.Data["bool"].(bool) 77 require.True(ok) 78 require.True(v) 79 80 require.Error(MapToObject(map[string]interface{}{"fld": 42}, o)) 81 }