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  }