diff options
| author | Alex Flint <[email protected]> | 2019-08-06 16:58:46 -0700 |
|---|---|---|
| committer | GitHub <[email protected]> | 2019-08-06 16:58:46 -0700 |
| commit | 8baf7040d76473dd1d78c17b490d9d8cf6b1c584 (patch) | |
| tree | f3adbffc0cfcd02f559bbb1b1729e7f0a5b3ae35 /reflect_test.go | |
| parent | 6de9e789a982b5708c535308315c3d1d54217612 (diff) | |
| parent | 11a27074fcbbcce6d5b2129c9d33328152cd56be (diff) | |
Merge pull request #82 from alexflint/subcommand-implv1.1.0
Add support for subcommands
Diffstat (limited to 'reflect_test.go')
| -rw-r--r-- | reflect_test.go | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/reflect_test.go b/reflect_test.go new file mode 100644 index 0000000..47e68b5 --- /dev/null +++ b/reflect_test.go @@ -0,0 +1,55 @@ +package arg + +import ( + "reflect" + "testing" + + "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 TestCanParse(t *testing.T) { + var b bool + var i int + var s string + var f float64 + var bs []bool + var is []int + + 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) + + 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) + + assertCanParse(t, reflect.TypeOf(bs), true, true, true) + assertCanParse(t, reflect.TypeOf(&bs), true, true, true) + + assertCanParse(t, reflect.TypeOf(is), true, false, true) + assertCanParse(t, reflect.TypeOf(&is), true, false, true) +} + +type implementsTextUnmarshaler struct{} + +func (*implementsTextUnmarshaler) UnmarshalText(text []byte) error { + return nil +} + +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) +} |
