123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- package flags
- import (
- "testing"
- )
- func TestPositional(t *testing.T) {
- var opts = struct {
- Value bool `short:"v"`
- Positional struct {
- Command int
- Filename string
- Rest []string
- } `positional-args:"yes" required:"yes"`
- }{}
- p := NewParser(&opts, Default)
- ret, err := p.ParseArgs([]string{"10", "arg_test.go", "a", "b"})
- if err != nil {
- t.Fatalf("Unexpected error: %v", err)
- return
- }
- if opts.Positional.Command != 10 {
- t.Fatalf("Expected opts.Positional.Command to be 10, but got %v", opts.Positional.Command)
- }
- if opts.Positional.Filename != "arg_test.go" {
- t.Fatalf("Expected opts.Positional.Filename to be \"arg_test.go\", but got %v", opts.Positional.Filename)
- }
- assertStringArray(t, opts.Positional.Rest, []string{"a", "b"})
- assertStringArray(t, ret, []string{})
- }
- func TestPositionalRequired(t *testing.T) {
- var opts = struct {
- Value bool `short:"v"`
- Positional struct {
- Command int
- Filename string
- Rest []string
- } `positional-args:"yes" required:"yes"`
- }{}
- p := NewParser(&opts, None)
- _, err := p.ParseArgs([]string{"10"})
- assertError(t, err, ErrRequired, "the required argument `Filename` was not provided")
- }
- func TestPositionalRequiredRest1Fail(t *testing.T) {
- var opts = struct {
- Value bool `short:"v"`
- Positional struct {
- Rest []string `required:"yes"`
- } `positional-args:"yes"`
- }{}
- p := NewParser(&opts, None)
- _, err := p.ParseArgs([]string{})
- assertError(t, err, ErrRequired, "the required argument `Rest (at least 1 argument)` was not provided")
- }
- func TestPositionalRequiredRest1Pass(t *testing.T) {
- var opts = struct {
- Value bool `short:"v"`
- Positional struct {
- Rest []string `required:"yes"`
- } `positional-args:"yes"`
- }{}
- p := NewParser(&opts, None)
- _, err := p.ParseArgs([]string{"rest1"})
- if err != nil {
- t.Fatalf("Unexpected error: %v", err)
- return
- }
- if len(opts.Positional.Rest) != 1 {
- t.Fatalf("Expected 1 positional rest argument")
- }
- assertString(t, opts.Positional.Rest[0], "rest1")
- }
- func TestPositionalRequiredRest2Fail(t *testing.T) {
- var opts = struct {
- Value bool `short:"v"`
- Positional struct {
- Rest []string `required:"2"`
- } `positional-args:"yes"`
- }{}
- p := NewParser(&opts, None)
- _, err := p.ParseArgs([]string{"rest1"})
- assertError(t, err, ErrRequired, "the required argument `Rest (at least 2 arguments, but got only 1)` was not provided")
- }
- func TestPositionalRequiredRest2Pass(t *testing.T) {
- var opts = struct {
- Value bool `short:"v"`
- Positional struct {
- Rest []string `required:"2"`
- } `positional-args:"yes"`
- }{}
- p := NewParser(&opts, None)
- _, err := p.ParseArgs([]string{"rest1", "rest2", "rest3"})
- if err != nil {
- t.Fatalf("Unexpected error: %v", err)
- return
- }
- if len(opts.Positional.Rest) != 3 {
- t.Fatalf("Expected 3 positional rest argument")
- }
- assertString(t, opts.Positional.Rest[0], "rest1")
- assertString(t, opts.Positional.Rest[1], "rest2")
- assertString(t, opts.Positional.Rest[2], "rest3")
- }
- func TestPositionalRequiredRestRangeFail(t *testing.T) {
- var opts = struct {
- Value bool `short:"v"`
- Positional struct {
- Rest []string `required:"1-2"`
- } `positional-args:"yes"`
- }{}
- p := NewParser(&opts, None)
- _, err := p.ParseArgs([]string{"rest1", "rest2", "rest3"})
- assertError(t, err, ErrRequired, "the required argument `Rest (at most 2 arguments, but got 3)` was not provided")
- }
- func TestPositionalRequiredRestRangeEmptyFail(t *testing.T) {
- var opts = struct {
- Value bool `short:"v"`
- Positional struct {
- Rest []string `required:"0-0"`
- } `positional-args:"yes"`
- }{}
- p := NewParser(&opts, None)
- _, err := p.ParseArgs([]string{"some", "thing"})
- assertError(t, err, ErrRequired, "the required argument `Rest (zero arguments)` was not provided")
- }
|