cli/getopt/flag_test.go

74 lines
2 KiB
Go

package getopt
import (
"testing"
"time"
"github.com/stretchr/testify/assert"
)
func TestInt(t *testing.T) {
assert := assert.New(t)
p := NewFlagSet("", 0)
var k int
p.IntVar(&k, "k", 16, "set k")
i := p.Int64("i", -1, "set i")
j := p.Uint("j", 64, "set j")
err := p.parse([]string{"bin", "-i", "32", "normal arg"})
assert.Nil(err, "Expected err to be nil")
assert.Equal(3, p.optindex, "Expected to only parse two arguments")
assert.Equal(int64(32), *i, "Expected -i argument to equal 32")
assert.Equal(uint(64), *j, "Expected -j argument to equal 64, since unset")
assert.Equal(16, k, "Expected -k argument to equal 16, since unset")
}
func TestBool(t *testing.T) {
assert := assert.New(t)
p := NewFlagSet("", 0)
var a bool
p.BoolVar(&a, "a", false, "set a")
b := p.Bool("b", false, "set b")
err := p.parse([]string{"bin", "-a", "normal arg"})
assert.Nil(err, "Expected err to be nil")
assert.Equal(2, p.optindex, "Expected to only parse two arguments")
assert.Equal(true, a, "Expected -a argument to be set")
assert.Equal(false, *b, "Expected -b argument to not be set")
}
func TestString(t *testing.T) {
assert := assert.New(t)
p := NewFlagSet("", 0)
get := p.String("c", "default", "get -c")
opt := "some options"
err := p.parse([]string{"bin", "-c", opt, "normal arg"})
assert.Nil(err, "Expected err to be nil")
assert.Equal(opt, *get, "Expected argument to be parsed")
}
func TestFloat64(t *testing.T) {
assert := assert.New(t)
p := NewFlagSet("", 0)
f := p.Float64("f", -3.14, "get -f")
err := p.parse([]string{"bin", "-f", "3.14", "normal arg"})
assert.Nil(err, "Expected err to be nil")
assert.Equal(3.14, *f, "Expected -f to equal 3.14")
}
func TestDuration(t *testing.T) {
assert := assert.New(t)
p := NewFlagSet("", 0)
d := p.Duration("d", 0, "get -d")
err := p.parse([]string{"bin", "-d", "1h3m", "normal arg"})
assert.Nil(err, "Expected err to be nil")
assert.Equal(time.Hour+3*time.Minute, *d, "Expected -d to equal 1 hour and 3 minutes")
}