1package flags
2
3import (
4	"testing"
5)
6
7func TestPositional(t *testing.T) {
8	var opts = struct {
9		Value bool `short:"v"`
10
11		Positional struct {
12			Command  int
13			Filename string
14			Rest     []string
15		} `positional-args:"yes" required:"yes"`
16	}{}
17
18	p := NewParser(&opts, Default)
19	ret, err := p.ParseArgs([]string{"10", "arg_test.go", "a", "b"})
20
21	if err != nil {
22		t.Fatalf("Unexpected error: %v", err)
23		return
24	}
25
26	if opts.Positional.Command != 10 {
27		t.Fatalf("Expected opts.Positional.Command to be 10, but got %v", opts.Positional.Command)
28	}
29
30	if opts.Positional.Filename != "arg_test.go" {
31		t.Fatalf("Expected opts.Positional.Filename to be \"arg_test.go\", but got %v", opts.Positional.Filename)
32	}
33
34	assertStringArray(t, opts.Positional.Rest, []string{"a", "b"})
35	assertStringArray(t, ret, []string{})
36}
37
38func TestPositionalRequired(t *testing.T) {
39	var opts = struct {
40		Value bool `short:"v"`
41
42		Positional struct {
43			Command  int
44			Filename string
45			Rest     []string
46		} `positional-args:"yes" required:"yes"`
47	}{}
48
49	p := NewParser(&opts, None)
50	_, err := p.ParseArgs([]string{"10"})
51
52	assertError(t, err, ErrRequired, "the required argument `Filename` was not provided")
53}
54