github.com/viant/toolbox@v0.34.5/types_test.go (about) 1 package toolbox_test 2 3 import ( 4 "fmt" 5 "reflect" 6 "testing" 7 "time" 8 9 "github.com/stretchr/testify/assert" 10 "github.com/viant/toolbox" 11 ) 12 13 type User2 struct { 14 Name string `column:"name"` 15 DateOfBirth time.Time `column:"date" dateLayout:"2006-01-02 15:04:05.000000"` 16 Id int `autoincrement:"true"` 17 Other string `transient:"true"` 18 } 19 20 func TestAssertKind(t *testing.T) { 21 toolbox.AssertKind(User2{}, reflect.Struct, "user") 22 toolbox.AssertKind((*User2)(nil), reflect.Ptr, "user") 23 24 defer func() { 25 if err := recover(); err != nil { 26 expected := "failed to check: User - expected kind: ptr but found struct (toolbox_test.User2)" 27 actual := fmt.Sprintf("%v", err) 28 assert.Equal(t, actual, expected, "Assert Kind") 29 } 30 }() 31 toolbox.AssertKind(User2{}, reflect.Ptr, "User") 32 } 33 34 func TestAssertPointerKind(test *testing.T) { 35 toolbox.AssertPointerKind(&User2{}, reflect.Struct, "user") 36 toolbox.AssertPointerKind((*User2)(nil), reflect.Struct, "user") 37 } 38 39 func TestTypeDetection(t *testing.T) { 40 41 assert.False(t, toolbox.IsFloat(3)) 42 assert.True(t, toolbox.IsFloat(3.0)) 43 assert.True(t, toolbox.CanConvertToFloat(3.0)) 44 assert.True(t, toolbox.CanConvertToFloat("3")) 45 assert.True(t, toolbox.CanConvertToFloat(3)) 46 assert.False(t, toolbox.CanConvertToFloat(false)) 47 48 assert.False(t, toolbox.IsInt(3.0)) 49 assert.True(t, toolbox.IsInt(3)) 50 51 assert.True(t, toolbox.CanConvertToInt(3)) 52 assert.True(t, toolbox.CanConvertToInt("3")) 53 54 assert.False(t, toolbox.CanConvertToInt(true)) 55 assert.False(t, toolbox.CanConvertToInt(3.3)) 56 57 assert.False(t, toolbox.IsBool(3.0)) 58 assert.True(t, toolbox.IsBool(true)) 59 60 assert.False(t, toolbox.IsString(3.0)) 61 assert.True(t, toolbox.IsString("abc")) 62 63 assert.True(t, toolbox.CanConvertToString("abc")) 64 assert.False(t, toolbox.CanConvertToString(3.2)) 65 66 assert.False(t, toolbox.IsTime(3.0)) 67 assert.True(t, toolbox.IsTime(time.Now())) 68 var timeValues = make([]time.Time, 1) 69 assert.True(t, toolbox.IsZero(timeValues[0])) 70 assert.False(t, toolbox.IsZero(time.Now())) 71 72 assert.False(t, toolbox.IsZero("")) 73 74 aString := "" 75 assert.True(t, toolbox.IsPointer(&aString)) 76 assert.False(t, toolbox.IsPointer(reflect.TypeOf(aString))) 77 assert.True(t, toolbox.IsPointer(&aString)) 78 79 } 80 81 func TestIsValueOfKind(t *testing.T) { 82 text := "" 83 assert.True(t, toolbox.IsValueOfKind(&text, reflect.Ptr)) 84 assert.False(t, toolbox.IsValueOfKind(&text, reflect.Struct)) 85 assert.True(t, toolbox.IsValueOfKind(&text, reflect.String)) 86 87 values := make([]interface{}, 1) 88 values[0] = 1 89 assert.True(t, toolbox.IsValueOfKind(&values[0], reflect.Int)) 90 91 } 92 93 func TestIsFunc(t *testing.T) { 94 var f = func() {} 95 assert.True(t, toolbox.IsFunc(&f)) 96 assert.True(t, toolbox.IsFunc(f)) 97 assert.False(t, toolbox.IsFunc("")) 98 99 }