160 lines
2.5 KiB
Go
160 lines
2.5 KiB
Go
package flags
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func expectConvert(t *testing.T, o *Option, expected string) {
|
|
s, err := convertToString(o.value, o.tag)
|
|
|
|
if err != nil {
|
|
t.Errorf("Unexpected error: %v", err)
|
|
return
|
|
}
|
|
|
|
assertString(t, s, expected)
|
|
}
|
|
|
|
func TestConvertToString(t *testing.T) {
|
|
d, _ := time.ParseDuration("1h2m4s")
|
|
|
|
var opts = struct {
|
|
String string `long:"string"`
|
|
|
|
Int int `long:"int"`
|
|
Int8 int8 `long:"int8"`
|
|
Int16 int16 `long:"int16"`
|
|
Int32 int32 `long:"int32"`
|
|
Int64 int64 `long:"int64"`
|
|
|
|
Uint uint `long:"uint"`
|
|
Uint8 uint8 `long:"uint8"`
|
|
Uint16 uint16 `long:"uint16"`
|
|
Uint32 uint32 `long:"uint32"`
|
|
Uint64 uint64 `long:"uint64"`
|
|
|
|
Float32 float32 `long:"float32"`
|
|
Float64 float64 `long:"float64"`
|
|
|
|
Duration time.Duration `long:"duration"`
|
|
|
|
Bool bool `long:"bool"`
|
|
|
|
IntSlice []int `long:"int-slice"`
|
|
IntFloatMap map[int]float64 `long:"int-float-map"`
|
|
|
|
PtrBool *bool `long:"ptr-bool"`
|
|
Interface interface{} `long:"interface"`
|
|
|
|
Int32Base int32 `long:"int32-base" base:"16"`
|
|
Uint32Base uint32 `long:"uint32-base" base:"16"`
|
|
}{
|
|
"string",
|
|
|
|
-2,
|
|
-1,
|
|
0,
|
|
1,
|
|
2,
|
|
|
|
1,
|
|
2,
|
|
3,
|
|
4,
|
|
5,
|
|
|
|
1.2,
|
|
-3.4,
|
|
|
|
d,
|
|
true,
|
|
|
|
[]int{-3, 4, -2},
|
|
map[int]float64{-2: 4.5},
|
|
|
|
new(bool),
|
|
float32(5.2),
|
|
|
|
-5823,
|
|
4232,
|
|
}
|
|
|
|
p := NewNamedParser("test", Default)
|
|
grp, _ := p.AddGroup("test group", "", &opts)
|
|
|
|
expects := []string{
|
|
"string",
|
|
"-2",
|
|
"-1",
|
|
"0",
|
|
"1",
|
|
"2",
|
|
|
|
"1",
|
|
"2",
|
|
"3",
|
|
"4",
|
|
"5",
|
|
|
|
"1.2",
|
|
"-3.4",
|
|
|
|
"1h2m4s",
|
|
"true",
|
|
|
|
"[-3, 4, -2]",
|
|
"{-2:4.5}",
|
|
|
|
"false",
|
|
"5.2",
|
|
|
|
"-16bf",
|
|
"1088",
|
|
}
|
|
|
|
for i, v := range grp.Options() {
|
|
expectConvert(t, v, expects[i])
|
|
}
|
|
}
|
|
|
|
func TestConvertToStringInvalidIntBase(t *testing.T) {
|
|
var opts = struct {
|
|
Int int `long:"int" base:"no"`
|
|
}{
|
|
2,
|
|
}
|
|
|
|
p := NewNamedParser("test", Default)
|
|
grp, _ := p.AddGroup("test group", "", &opts)
|
|
o := grp.Options()[0]
|
|
|
|
_, err := convertToString(o.value, o.tag)
|
|
|
|
if err != nil {
|
|
err = newErrorf(ErrMarshal, "%v", err)
|
|
}
|
|
|
|
assertError(t, err, ErrMarshal, "strconv.ParseInt: parsing \"no\": invalid syntax")
|
|
}
|
|
|
|
func TestConvertToStringInvalidUintBase(t *testing.T) {
|
|
var opts = struct {
|
|
Uint uint `long:"uint" base:"no"`
|
|
}{
|
|
2,
|
|
}
|
|
|
|
p := NewNamedParser("test", Default)
|
|
grp, _ := p.AddGroup("test group", "", &opts)
|
|
o := grp.Options()[0]
|
|
|
|
_, err := convertToString(o.value, o.tag)
|
|
|
|
if err != nil {
|
|
err = newErrorf(ErrMarshal, "%v", err)
|
|
}
|
|
|
|
assertError(t, err, ErrMarshal, "strconv.ParseInt: parsing \"no\": invalid syntax")
|
|
}
|