package xreflect import ( "reflect" "testing" "github.com/magiconair/properties/assert" "github.com/stretchr/testify/require" ) type TestStruct struct { StringVal string IntVal int Int8Val int8 Int16Val int16 Int32Val int32 Int64Val int64 UintVal uint Uint8Val uint8 Uint16Val uint16 Uint32Val uint32 Uint64Val uint64 Float32Val float32 Float64Val float64 } type UnknownTypeStruct struct { UnknownType struct{} } func TestSetString(t *testing.T) { t.Run("set success", func(t *testing.T) { stringValues := []string{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11.123", "12.567"} v := &TestStruct{} refV := reflect.ValueOf(v).Elem() for i := 0; i < refV.NumField(); i++ { err := SetString(refV.Field(i), stringValues[i]) require.NoError(t, err) } assert.Equal(t, "0", v.StringVal) assert.Equal(t, 1, v.IntVal) assert.Equal(t, int8(2), v.Int8Val) assert.Equal(t, int16(3), v.Int16Val) assert.Equal(t, int32(4), v.Int32Val) assert.Equal(t, int64(5), v.Int64Val) assert.Equal(t, uint(6), v.UintVal) assert.Equal(t, uint8(7), v.Uint8Val) assert.Equal(t, uint16(8), v.Uint16Val) assert.Equal(t, uint32(9), v.Uint32Val) assert.Equal(t, uint64(10), v.Uint64Val) assert.Equal(t, float32(11.123), v.Float32Val) assert.Equal(t, 12.567, v.Float64Val) }) t.Run("format error", func(t *testing.T) { stringValues := []string{"0", "1.5", "2.5", "3.5", "4.5", "5.5", "6.5", "7.5", "8.5", "9.5", "10.5", "xxx", "xxx"} v := &TestStruct{} refV := reflect.ValueOf(v).Elem() for i := 1; i < refV.NumField(); i++ { err := SetString(refV.Field(i), stringValues[i]) assert.Equal(t, true, err != nil) } }) t.Run("unknown type", func(t *testing.T) { stringValues := []string{"0"} v := &UnknownTypeStruct{} refV := reflect.ValueOf(v).Elem() for i := 1; i < refV.NumField(); i++ { err := SetString(refV.Field(i), stringValues[i]) assert.Equal(t, true, err != nil) } }) } func TestToString(t *testing.T) { t.Run("format success", func(t *testing.T) { stringValues := []string{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11.123", "12.567"} v := &TestStruct{ StringVal: "0", IntVal: 1, Int8Val: 2, Int16Val: 3, Int32Val: 4, Int64Val: 5, UintVal: 6, Uint8Val: 7, Uint16Val: 8, Uint32Val: 9, Uint64Val: 10, Float32Val: 11.123, Float64Val: 12.567, } refV := reflect.ValueOf(v).Elem() for i := 1; i < refV.NumField(); i++ { str, err := ToString(refV.Field(i)) require.NoError(t, err) assert.Equal(t, stringValues[i], str) } }) t.Run("unknown type", func(t *testing.T) { v := &UnknownTypeStruct{} refV := reflect.ValueOf(v).Elem() for i := 1; i < refV.NumField(); i++ { _, err := ToString(refV.Field(i)) assert.Equal(t, ErrUnkownType, err) } }) }