123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- 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")
- }
|