| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255 |
- package flags
- import (
- "testing"
- )
- func TestCommandInline(t *testing.T) {
- var opts = struct {
- Value bool `short:"v"`
- Command struct {
- G bool `short:"g"`
- } `command:"cmd"`
- }{}
- p, ret := assertParserSuccess(t, &opts, "-v", "cmd", "-g")
- assertStringArray(t, ret, []string{})
- if p.Active == nil {
- t.Errorf("Expected active command")
- }
- if !opts.Value {
- t.Errorf("Expected Value to be true")
- }
- if !opts.Command.G {
- t.Errorf("Expected Command.G to be true")
- }
- if p.Command.Find("cmd") != p.Active {
- t.Errorf("Expected to find command `cmd' to be active")
- }
- }
- func TestCommandInlineMulti(t *testing.T) {
- var opts = struct {
- Value bool `short:"v"`
- C1 struct {
- } `command:"c1"`
- C2 struct {
- G bool `short:"g"`
- } `command:"c2"`
- }{}
- p, ret := assertParserSuccess(t, &opts, "-v", "c2", "-g")
- assertStringArray(t, ret, []string{})
- if p.Active == nil {
- t.Errorf("Expected active command")
- }
- if !opts.Value {
- t.Errorf("Expected Value to be true")
- }
- if !opts.C2.G {
- t.Errorf("Expected C2.G to be true")
- }
- if p.Command.Find("c1") == nil {
- t.Errorf("Expected to find command `c1'")
- }
- if c2 := p.Command.Find("c2"); c2 == nil {
- t.Errorf("Expected to find command `c2'")
- } else if c2 != p.Active {
- t.Errorf("Expected to find command `c2' to be active")
- }
- }
- func TestCommandFlagOrder1(t *testing.T) {
- var opts = struct {
- Value bool `short:"v"`
- Command struct {
- G bool `short:"g"`
- } `command:"cmd"`
- }{}
- assertParseFail(t, ErrUnknownFlag, "unknown flag `g'", &opts, "-v", "-g", "cmd")
- }
- func TestCommandFlagOrder2(t *testing.T) {
- var opts = struct {
- Value bool `short:"v"`
- Command struct {
- G bool `short:"g"`
- } `command:"cmd"`
- }{}
- assertParseFail(t, ErrUnknownFlag, "unknown flag `v'", &opts, "cmd", "-v", "-g")
- }
- func TestCommandEstimate(t *testing.T) {
- var opts = struct {
- Value bool `short:"v"`
- Cmd1 struct {
- } `command:"remove"`
- Cmd2 struct {
- } `command:"add"`
- }{}
- p := NewParser(&opts, None)
- _, err := p.ParseArgs([]string{})
- assertError(t, err, ErrRequired, "Please specify one command of: add or remove")
- }
- type testCommand struct {
- G bool `short:"g"`
- Executed bool
- EArgs []string
- }
- func (c *testCommand) Execute(args []string) error {
- c.Executed = true
- c.EArgs = args
- return nil
- }
- func TestCommandExecute(t *testing.T) {
- var opts = struct {
- Value bool `short:"v"`
- Command testCommand `command:"cmd"`
- }{}
- assertParseSuccess(t, &opts, "-v", "cmd", "-g", "a", "b")
- if !opts.Value {
- t.Errorf("Expected Value to be true")
- }
- if !opts.Command.Executed {
- t.Errorf("Did not execute command")
- }
- if !opts.Command.G {
- t.Errorf("Expected Command.C to be true")
- }
- assertStringArray(t, opts.Command.EArgs, []string{"a", "b"})
- }
- func TestCommandClosest(t *testing.T) {
- var opts = struct {
- Value bool `short:"v"`
- Cmd1 struct {
- } `command:"remove"`
- Cmd2 struct {
- } `command:"add"`
- }{}
- assertParseFail(t, ErrRequired, "Unknown command `addd', did you mean `add'?", &opts, "-v", "addd")
- }
- func TestCommandAdd(t *testing.T) {
- var opts = struct {
- Value bool `short:"v"`
- }{}
- var cmd = struct {
- G bool `short:"g"`
- }{}
- p := NewParser(&opts, Default)
- c, err := p.AddCommand("cmd", "", "", &cmd)
- if err != nil {
- t.Fatalf("Unexpected error: %v", err)
- return
- }
- ret, err := p.ParseArgs([]string{"-v", "cmd", "-g", "rest"})
- if err != nil {
- t.Fatalf("Unexpected error: %v", err)
- return
- }
- assertStringArray(t, ret, []string{"rest"})
- if !opts.Value {
- t.Errorf("Expected Value to be true")
- }
- if !cmd.G {
- t.Errorf("Expected Command.G to be true")
- }
- if p.Command.Find("cmd") != c {
- t.Errorf("Expected to find command `cmd'")
- }
- if p.Commands()[0] != c {
- t.Errorf("Espected command #v, but got #v", c, p.Commands()[0])
- }
- if c.Options()[0].ShortName != 'g' {
- t.Errorf("Expected short name `g' but got %v", c.Options()[0].ShortName)
- }
- }
- func TestCommandNestedInline(t *testing.T) {
- var opts = struct {
- Value bool `short:"v"`
- Command struct {
- G bool `short:"g"`
- Nested struct {
- N string `long:"n"`
- } `command:"nested"`
- } `command:"cmd"`
- }{}
- p, ret := assertParserSuccess(t, &opts, "-v", "cmd", "-g", "nested", "--n", "n", "rest")
- assertStringArray(t, ret, []string{"rest"})
- if !opts.Value {
- t.Errorf("Expected Value to be true")
- }
- if !opts.Command.G {
- t.Errorf("Expected Command.G to be true")
- }
- assertString(t, opts.Command.Nested.N, "n")
- if c := p.Command.Find("cmd"); c == nil {
- t.Errorf("Expected to find command `cmd'")
- } else {
- if c != p.Active {
- t.Errorf("Expected `cmd' to be the active parser command")
- }
- if nested := c.Find("nested"); nested == nil {
- t.Errorf("Expected to find command `nested'")
- } else if nested != c.Active {
- t.Errorf("Expected to find command `nested' to be the active `cmd' command")
- }
- }
- }
|