Skip to content

Commit

Permalink
Merge branch 'master' into extra-info
Browse files Browse the repository at this point in the history
  • Loading branch information
jszwedko authored Jun 11, 2017
2 parents dd3849a + db0ff44 commit 74811fa
Show file tree
Hide file tree
Showing 3 changed files with 70 additions and 13 deletions.
61 changes: 59 additions & 2 deletions app_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1520,6 +1520,63 @@ func TestApp_OnUsageError_WithWrongFlagValue_ForSubcommand(t *testing.T) {
}
}

// A custom flag that conforms to the relevant interfaces, but has none of the
// fields that the other flag types do.
type customBoolFlag struct {
Nombre string
}

// Don't use the normal FlagStringer
func (c *customBoolFlag) String() string {
return "***" + c.Nombre + "***"
}

func (c *customBoolFlag) GetName() string {
return c.Nombre
}

func (c *customBoolFlag) Apply(set *flag.FlagSet) {
set.String(c.Nombre, c.Nombre, "")
}

func TestCustomFlagsUnused(t *testing.T) {
app := NewApp()
app.Flags = []Flag{&customBoolFlag{"custom"}}

err := app.Run([]string{"foo"})
if err != nil {
t.Errorf("Run returned unexpected error: %v", err)
}
}

func TestCustomFlagsUsed(t *testing.T) {
app := NewApp()
app.Flags = []Flag{&customBoolFlag{"custom"}}

err := app.Run([]string{"foo", "--custom=bar"})
if err != nil {
t.Errorf("Run returned unexpected error: %v", err)
}
}

func TestCustomHelpVersionFlags(t *testing.T) {
app := NewApp()

// Be sure to reset the global flags
defer func(helpFlag Flag, versionFlag Flag) {
HelpFlag = helpFlag
VersionFlag = versionFlag
}(HelpFlag, VersionFlag)

HelpFlag = &customBoolFlag{"help-custom"}
VersionFlag = &customBoolFlag{"version-custom"}

err := app.Run([]string{"foo", "--help-custom=bar"})
if err != nil {
t.Errorf("Run returned unexpected error: %v", err)
}
}

func TestHandleAction_WithNonFuncAction(t *testing.T) {
app := NewApp()
app.Action = 42
Expand Down Expand Up @@ -1642,7 +1699,7 @@ func TestShellCompletionForIncompleteFlags(t *testing.T) {

for _, flag := range ctx.App.Flags {
for _, name := range strings.Split(flag.GetName(), ",") {
if name == BashCompletionFlag.Name {
if name == BashCompletionFlag.GetName() {
continue
}

Expand All @@ -1659,7 +1716,7 @@ func TestShellCompletionForIncompleteFlags(t *testing.T) {
app.Action = func(ctx *Context) error {
return fmt.Errorf("should not get here")
}
err := app.Run([]string{"", "--test-completion", "--" + BashCompletionFlag.Name})
err := app.Run([]string{"", "--test-completion", "--" + BashCompletionFlag.GetName()})
if err != nil {
t.Errorf("app should not return an error: %s", err)
}
Expand Down
12 changes: 6 additions & 6 deletions flag.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,21 +14,21 @@ import (
const defaultPlaceholder = "value"

// BashCompletionFlag enables bash-completion for all commands and subcommands
var BashCompletionFlag = BoolFlag{
var BashCompletionFlag Flag = BoolFlag{
Name: "generate-bash-completion",
Hidden: true,
}

// VersionFlag prints the version for the application
var VersionFlag = BoolFlag{
var VersionFlag Flag = BoolFlag{
Name: "version, v",
Usage: "print the version",
}

// HelpFlag prints the help for all commands and subcommands
// Set to the zero value (BoolFlag{}) to disable flag -- keeps subcommand
// unless HideHelp is set to true)
var HelpFlag = BoolFlag{
var HelpFlag Flag = BoolFlag{
Name: "help, h",
Usage: "show help",
}
Expand Down Expand Up @@ -630,7 +630,8 @@ func (f Float64Flag) ApplyWithError(set *flag.FlagSet) error {
func visibleFlags(fl []Flag) []Flag {
visible := []Flag{}
for _, flag := range fl {
if !flagValue(flag).FieldByName("Hidden").Bool() {
field := flagValue(flag).FieldByName("Hidden")
if !field.IsValid() || !field.Bool() {
visible = append(visible, flag)
}
}
Expand Down Expand Up @@ -723,9 +724,8 @@ func stringifyFlag(f Flag) string {

needsPlaceholder := false
defaultValueString := ""
val := fv.FieldByName("Value")

if val.IsValid() {
if val := fv.FieldByName("Value"); val.IsValid() {
needsPlaceholder = true
defaultValueString = fmt.Sprintf(" (default: %v)", val.Interface())

Expand Down
10 changes: 5 additions & 5 deletions help.go
Original file line number Diff line number Diff line change
Expand Up @@ -256,8 +256,8 @@ func printHelp(out io.Writer, templ string, data interface{}) {

func checkVersion(c *Context) bool {
found := false
if VersionFlag.Name != "" {
eachName(VersionFlag.Name, func(name string) {
if VersionFlag.GetName() != "" {
eachName(VersionFlag.GetName(), func(name string) {
if c.GlobalBool(name) || c.Bool(name) {
found = true
}
Expand All @@ -268,8 +268,8 @@ func checkVersion(c *Context) bool {

func checkHelp(c *Context) bool {
found := false
if HelpFlag.Name != "" {
eachName(HelpFlag.Name, func(name string) {
if HelpFlag.GetName() != "" {
eachName(HelpFlag.GetName(), func(name string) {
if c.GlobalBool(name) || c.Bool(name) {
found = true
}
Expand Down Expand Up @@ -304,7 +304,7 @@ func checkShellCompleteFlag(a *App, arguments []string) (bool, []string) {
pos := len(arguments) - 1
lastArg := arguments[pos]

if lastArg != "--"+BashCompletionFlag.Name {
if lastArg != "--"+BashCompletionFlag.GetName() {
return false, arguments
}

Expand Down

0 comments on commit 74811fa

Please sign in to comment.