summaryrefslogtreecommitdiff
path: root/reflect_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'reflect_test.go')
-rw-r--r--reflect_test.go66
1 files changed, 42 insertions, 24 deletions
diff --git a/reflect_test.go b/reflect_test.go
index 07b459c..6a8af49 100644
--- a/reflect_test.go
+++ b/reflect_test.go
@@ -7,36 +7,51 @@ import (
"github.com/stretchr/testify/assert"
)
-func assertCanParse(t *testing.T, typ reflect.Type, parseable, boolean, multiple bool) {
- p, b, m := canParse(typ)
- assert.Equal(t, parseable, p, "expected %v to have parseable=%v but was %v", typ, parseable, p)
- assert.Equal(t, boolean, b, "expected %v to have boolean=%v but was %v", typ, boolean, b)
- assert.Equal(t, multiple, m, "expected %v to have multiple=%v but was %v", typ, multiple, m)
+func assertKind(t *testing.T, typ reflect.Type, expected kind) {
+ actual, err := kindOf(typ)
+ assert.Equal(t, expected, actual, "expected %v to have kind %v but got %v", typ, expected, actual)
+ if expected == unsupported {
+ assert.Error(t, err)
+ }
}
-func TestCanParse(t *testing.T) {
+func TestKindOf(t *testing.T) {
var b bool
var i int
var s string
var f float64
var bs []bool
var is []int
+ var m map[string]int
+ var unsupported1 struct{}
+ var unsupported2 []struct{}
+ var unsupported3 map[string]struct{}
- assertCanParse(t, reflect.TypeOf(b), true, true, false)
- assertCanParse(t, reflect.TypeOf(i), true, false, false)
- assertCanParse(t, reflect.TypeOf(s), true, false, false)
- assertCanParse(t, reflect.TypeOf(f), true, false, false)
+ assertKind(t, reflect.TypeOf(b), binary)
+ assertKind(t, reflect.TypeOf(i), regular)
+ assertKind(t, reflect.TypeOf(s), regular)
+ assertKind(t, reflect.TypeOf(f), regular)
- assertCanParse(t, reflect.TypeOf(&b), true, true, false)
- assertCanParse(t, reflect.TypeOf(&s), true, false, false)
- assertCanParse(t, reflect.TypeOf(&i), true, false, false)
- assertCanParse(t, reflect.TypeOf(&f), true, false, false)
+ assertKind(t, reflect.TypeOf(&b), binary)
+ assertKind(t, reflect.TypeOf(&s), regular)
+ assertKind(t, reflect.TypeOf(&i), regular)
+ assertKind(t, reflect.TypeOf(&f), regular)
- assertCanParse(t, reflect.TypeOf(bs), true, true, true)
- assertCanParse(t, reflect.TypeOf(&bs), true, true, true)
+ assertKind(t, reflect.TypeOf(bs), sequence)
+ assertKind(t, reflect.TypeOf(is), sequence)
- assertCanParse(t, reflect.TypeOf(is), true, false, true)
- assertCanParse(t, reflect.TypeOf(&is), true, false, true)
+ assertKind(t, reflect.TypeOf(&bs), sequence)
+ assertKind(t, reflect.TypeOf(&is), sequence)
+
+ assertKind(t, reflect.TypeOf(m), mapping)
+ assertKind(t, reflect.TypeOf(&m), mapping)
+
+ assertKind(t, reflect.TypeOf(unsupported1), unsupported)
+ assertKind(t, reflect.TypeOf(&unsupported1), unsupported)
+ assertKind(t, reflect.TypeOf(unsupported2), unsupported)
+ assertKind(t, reflect.TypeOf(&unsupported2), unsupported)
+ assertKind(t, reflect.TypeOf(unsupported3), unsupported)
+ assertKind(t, reflect.TypeOf(&unsupported3), unsupported)
}
type implementsTextUnmarshaler struct{}
@@ -46,12 +61,15 @@ func (*implementsTextUnmarshaler) UnmarshalText(text []byte) error {
}
func TestCanParseTextUnmarshaler(t *testing.T) {
- var u implementsTextUnmarshaler
- var su []implementsTextUnmarshaler
- assertCanParse(t, reflect.TypeOf(u), true, false, false)
- assertCanParse(t, reflect.TypeOf(&u), true, false, false)
- assertCanParse(t, reflect.TypeOf(su), true, false, true)
- assertCanParse(t, reflect.TypeOf(&su), true, false, true)
+ var x implementsTextUnmarshaler
+ var s []implementsTextUnmarshaler
+ var m []implementsTextUnmarshaler
+ assertKind(t, reflect.TypeOf(x), regular)
+ assertKind(t, reflect.TypeOf(&x), regular)
+ assertKind(t, reflect.TypeOf(s), sequence)
+ assertKind(t, reflect.TypeOf(&s), sequence)
+ assertKind(t, reflect.TypeOf(m), mapping)
+ assertKind(t, reflect.TypeOf(&m), mapping)
}
func TestIsExported(t *testing.T) {