Skip to content

Commit

Permalink
update: IsArray - check slice type will return true
Browse files Browse the repository at this point in the history
  • Loading branch information
inhere committed May 6, 2022
1 parent 22df26f commit 4378d5f
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 19 deletions.
14 changes: 10 additions & 4 deletions validators.go
Original file line number Diff line number Diff line change
Expand Up @@ -537,8 +537,8 @@ func IsFloat(val interface{}) bool {
return false
}

// IsArray check
func IsArray(val interface{}) (ok bool) {
// IsArray check value is array or slice.
func IsArray(val interface{}, strict ...bool) (ok bool) {
if val == nil {
return false
}
Expand All @@ -548,10 +548,16 @@ func IsArray(val interface{}) (ok bool) {
rv = rv.Elem()
}

return rv.Kind() == reflect.Array
// strict: must go array type.
if len(strict) > 0 && strict[0] {
return rv.Kind() == reflect.Array
}

// allow array, slice
return rv.Kind() == reflect.Array || rv.Kind() == reflect.Slice
}

// IsSlice check
// IsSlice check value is slice type
func IsSlice(val interface{}) (ok bool) {
if val == nil {
return false
Expand Down
39 changes: 24 additions & 15 deletions validators_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -130,12 +130,34 @@ func TestTypeCheck(t *testing.T) {
is.False(IsMap(nil))
is.False(IsMap([]string{}))

// IsInts
is.True(IsInts([]int{}))
is.True(IsInts([]int{1}))
is.True(IsInts([]int8{}))
is.False(IsInts(nil))
is.False(IsInts(map[string]int{}))

// IsStrings
is.True(IsStrings([]string{}))
is.True(IsStrings([]string{"a"}))
is.False(IsStrings(nil))
is.False(IsStrings([]int{}))
is.False(IsStrings(map[string]int{}))
}

// ------------------ value compare ------------------

func TestIsArray_IsSlice(t *testing.T) {
is := assert.New(t)

// IsArray
is.True(IsArray([1]int{}))
is.True(IsArray([1]string{}))
is.False(IsArray(nil))
is.False(IsArray([]string{}))
is.False(IsArray(new([]string)))
is.True(IsArray([]string{}))
is.True(IsArray(new([]string)))
is.False(IsArray([]string{}, true))
is.False(IsArray(new([]string), true))

// IsSlice
is.True(IsSlice([]byte{'a'}))
Expand All @@ -147,19 +169,6 @@ func TestTypeCheck(t *testing.T) {
is.False(IsSlice([1]string{}))
is.False(IsSlice(new(map[string]int)))

// IsInts
is.True(IsInts([]int{}))
is.True(IsInts([]int{1}))
is.True(IsInts([]int8{}))
is.False(IsInts(nil))
is.False(IsInts(map[string]int{}))

// IsStrings
is.True(IsStrings([]string{}))
is.True(IsStrings([]string{"a"}))
is.False(IsStrings(nil))
is.False(IsStrings([]int{}))
is.False(IsStrings(map[string]int{}))
}

// ------------------ value compare ------------------
Expand Down

0 comments on commit 4378d5f

Please sign in to comment.