diff options
Diffstat (limited to 'reflect_test.go')
| -rw-r--r-- | reflect_test.go | 66 |
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) { |
