63 lines
1.9 KiB
Go
63 lines
1.9 KiB
Go
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)
|
|
}
|
|
|
|
func TestIsExported(t *testing.T) {
|
|
assert.True(t, isExported("Exported"))
|
|
assert.False(t, isExported("notExported"))
|
|
assert.False(t, isExported(""))
|
|
assert.False(t, isExported(string([]byte{255})))
|
|
}
|