func TestTooManyArgsAfterCommand(t *testing.T) { a := New("test", "test") a.Command("a", "") assert.NoError(t, a.init()) _, err := a.Parse([]string{"a", "b"}) assert.Error(t, err) }
func TestTopLevelArgCantBeUsedWithCommands(t *testing.T) { c := New("test", "test") c.Arg("arg", "help").String() c.Command("cmd", "help") _, err := c.Parse([]string{}) assert.Error(t, err) }
func TestSubCommandRequired(t *testing.T) { app := New("test", "help") c0 := app.Command("c0", "") c0.Command("c1", "") _, err := app.Parse([]string{"c0"}) assert.Error(t, err) }
func TestInvalidDefaultArgValueErrors(t *testing.T) { c := New("test", "test") cmd := c.Command("cmd", "cmd") cmd.Arg("arg", "arg").Default("one").Int() _, err := c.Parse([]string{"cmd"}) assert.Error(t, err) }
func TestNestedCommandWithDuplicateFlagErrors(t *testing.T) { app := New("app", "") app.Flag("test", "").Bool() app.Command("cmd0", "").Flag("test", "").Bool() err := app.init() assert.Error(t, err) }
func TestMultipleDefaultCommands(t *testing.T) { app := New("app", "").Terminate(nil) app.Command("c0", "").Default() app.Command("c1", "").Default() _, err := app.Parse([]string{}) assert.Error(t, err) }
func TestArgMultipleRequired(t *testing.T) { terminated := false app := New("test", "") app.Version("0.0.0").Writer(ioutil.Discard) app.Arg("a", "").Required().String() app.Arg("b", "").Required().String() app.Terminate(func(int) { terminated = true }) _, err := app.Parse([]string{}) assert.Error(t, err) _, err = app.Parse([]string{"A"}) assert.Error(t, err) _, err = app.Parse([]string{"A", "B"}) assert.NoError(t, err) _, err = app.Parse([]string{"--version"}) assert.True(t, terminated) }
func TestArgsRequiredAfterNonRequiredErrors(t *testing.T) { c := New("test", "test") cmd := c.Command("cmd", "") cmd.Arg("a", "a").String() cmd.Arg("b", "b").Required().String() _, err := c.Parse([]string{"cmd"}) assert.Error(t, err) }
func TestNegateNonBool(t *testing.T) { fg := newFlagGroup() f := fg.Flag("b", "") f.Int() fg.init() tokens := tokenize([]string{"--no-b"}) _, err := fg.parse(tokens) assert.Error(t, err) }
func TestEnum(t *testing.T) { app := New("", "") a := app.Arg("a", "").Enum("one", "two", "three") _, err := app.Parse([]string{"moo"}) assert.Error(t, err) _, err = app.Parse([]string{"one"}) assert.NoError(t, err) assert.Equal(t, "one", *a) }
func TestRequiredFlags(t *testing.T) { c := New("test", "test") c.Flag("a", "a").String() c.Flag("b", "b").Required().String() _, err := c.Parse([]string{"--a=foo"}) assert.Error(t, err) _, err = c.Parse([]string{"--b=foo"}) assert.NoError(t, err) }
func TestArgsMultipleRequiredThenNonRequired(t *testing.T) { c := New("test", "test").Terminate(nil).Writer(ioutil.Discard) cmd := c.Command("cmd", "") cmd.Arg("a", "a").Required().String() cmd.Arg("b", "b").Required().String() cmd.Arg("c", "c").String() cmd.Arg("d", "d").String() _, err := c.Parse([]string{"cmd", "a", "b"}) assert.NoError(t, err) _, err = c.Parse([]string{}) assert.Error(t, err) }
func TestDefaultSubcommandWithFlags(t *testing.T) { app := New("app", "").Terminate(nil) c0 := app.Command("c0", "").Default() _ = c0.Flag("f0", "").Int() c0c1 := c0.Command("c1", "").Default() c0c1f1 := c0c1.Flag("f1", "").Int() selected, err := app.Parse([]string{"--f1=2"}) assert.NoError(t, err) assert.Equal(t, "c0 c1", selected) assert.Equal(t, 2, *c0c1f1) _, err = app.Parse([]string{"--f2"}) assert.Error(t, err) }
func TestRequiredFlag(t *testing.T) { app := New("test", "") app.Version("0.0.0").Writer(ioutil.Discard) exits := 0 app.Terminate(func(int) { exits++ }) app.Flag("a", "").Required().Bool() _, err := app.Parse([]string{"--a"}) assert.NoError(t, err) _, err = app.Parse([]string{}) assert.Error(t, err) _, err = app.Parse([]string{"--version"}) assert.Equal(t, 1, exits) }
func TestParseExistingFile(t *testing.T) { f, err := ioutil.TempFile("", "") if err != nil { t.Fatal(err) } defer f.Close() defer os.Remove(f.Name()) p := parserMixin{} v := p.ExistingFile() err = p.value.Set(f.Name()) assert.NoError(t, err) assert.Equal(t, f.Name(), *v) err = p.value.Set("/etc/hostsDEFINITELYMISSING") assert.Error(t, err) }
func TestArgRemainderErrorsWhenNotLast(t *testing.T) { a := newArgGroup() a.Arg("test", "").Strings() a.Arg("test2", "").String() assert.Error(t, a.init()) }
func TestArgsLooksLikeFlagsWithConsumeRemainder(t *testing.T) { a := New("test", "") a.Arg("opts", "").Required().Strings() _, err := a.Parse([]string{"hello", "-world"}) assert.Error(t, err) }
func TestRequiredWithEnvarMissingErrors(t *testing.T) { app := New("test", "") app.Flag("t", "").OverrideDefaultFromEnvar("TEST_ENVAR").Required().Int() _, err := app.Parse([]string{}) assert.Error(t, err) }
func TestEmptyShortFlagIsAnError(t *testing.T) { _, err := New("test", "").Parse([]string{"-"}) assert.Error(t, err) }
func TestInvalidDefaultFlagValueErrors(t *testing.T) { c := New("test", "test") c.Flag("foo", "foo").Default("a").Int() _, err := c.Parse([]string{}) assert.Error(t, err) }
func TestInvalidArgsDefaultCanBeOverridden(t *testing.T) { app := New("test", "") app.Arg("a", "").Default("invalid").Bool() _, err := app.Parse([]string{}) assert.Error(t, err) }
func TestTooManyArgs(t *testing.T) { a := New("test", "test") a.Arg("a", "").String() _, err := a.Parse([]string{"a", "b"}) assert.Error(t, err) }