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  }