From 8339b595541e76820ea6873f9eeb660f4c2e6eac Mon Sep 17 00:00:00 2001 From: Naveen Gogineni Date: Sun, 11 Sep 2022 10:21:56 -0400 Subject: [PATCH] Fix: Help name consistency among app/commands and subcommands --- app.go | 1 - help_test.go | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/app.go b/app.go index 1d2f6e89a5..2ffacd512c 100644 --- a/app.go +++ b/app.go @@ -133,7 +133,6 @@ func compileTime() time.Time { func NewApp() *App { return &App{ Name: filepath.Base(os.Args[0]), - HelpName: filepath.Base(os.Args[0]), Usage: "A new cli application", UsageText: "", BashComplete: DefaultAppComplete, diff --git a/help_test.go b/help_test.go index 9422b4a105..ade6f3dd6d 100644 --- a/help_test.go +++ b/help_test.go @@ -428,6 +428,58 @@ func TestShowCommandHelp_CommandAliases(t *testing.T) { } } +func TestHelpNameConsistency(t *testing.T) { + // Setup some very basic templates based on actual AppHelp, CommandHelp + // and SubcommandHelp templates to display the help name + // The inconsistency shows up when users use NewApp() as opposed to + // using App{...} directly + SubcommandHelpTemplate = `{{.HelpName}}` + app := NewApp() + app.Name = "bar" + app.CustomAppHelpTemplate = `{{.HelpName}}` + app.Commands = []*Command{ + { + Name: "command1", + CustomHelpTemplate: `{{.HelpName}}`, + Subcommands: []*Command{ + { + Name: "subcommand1", + CustomHelpTemplate: `{{.HelpName}}`, + }, + }, + }, + } + + tests := []struct { + name string + args []string + }{ + { + name: "App help", + args: []string{"foo"}, + }, + { + name: "Command help", + args: []string{"foo", "command1"}, + }, + { + name: "Subcommand help", + args: []string{"foo", "command1", "subcommand1"}, + }, + } + + for _, tt := range tests { + output := &bytes.Buffer{} + app.Writer = output + if err := app.Run(tt.args); err != nil { + t.Error(err) + } + if !strings.Contains(output.String(), "bar") { + t.Errorf("expected output to contain bar; got: %q", output.String()) + } + } +} + func TestShowSubcommandHelp_CommandAliases(t *testing.T) { app := &App{ Commands: []*Command{