diff --git a/app.go b/app.go index b16f991..d1b3a67 100644 --- a/app.go +++ b/app.go @@ -113,13 +113,6 @@ func (a *App) Setup() { } a.Commands = newCmds - a.Categories = newCommandCategories() - for _, command := range a.Commands { - a.Categories.AddCommand(command.Category, command) - } - sort.Sort(a.Categories.(*commandCategories)) - - // append help to commands if a.Command(helpCommand.Name) == nil && !a.HideHelp { a.appendCommand(helpCommand) @@ -128,7 +121,6 @@ func (a *App) Setup() { } } - //append version/help flags if a.EnableBashCompletion { a.appendFlag(BashCompletionFlag) } @@ -136,6 +128,12 @@ func (a *App) Setup() { if !a.HideVersion { a.appendFlag(VersionFlag) } + + a.Categories = newCommandCategories() + for _, command := range a.Commands { + a.Categories.AddCommand(command.Category, command) + } + sort.Sort(a.Categories.(*commandCategories)) } // Run is the entry point to the cli app. Parses the arguments slice and routes diff --git a/app_test.go b/app_test.go index 99bd6a3..2ddbb70 100644 --- a/app_test.go +++ b/app_test.go @@ -1123,6 +1123,7 @@ func TestApp_Run_Version(t *testing.T) { func TestApp_Run_Categories(t *testing.T) { app := NewApp() app.Name = "categories" + app.HideHelp = true app.Commands = []*Command{ { Name: "command1", @@ -1173,6 +1174,7 @@ func TestApp_Run_Categories(t *testing.T) { func TestApp_VisibleCategories(t *testing.T) { app := NewApp() app.Name = "visible-categories" + app.HideHelp = true app.Commands = []*Command{ { Name: "command1", @@ -1212,6 +1214,7 @@ func TestApp_VisibleCategories(t *testing.T) { app = NewApp() app.Name = "visible-categories" + app.HideHelp = true app.Commands = []*Command{ { Name: "command1", @@ -1246,6 +1249,7 @@ func TestApp_VisibleCategories(t *testing.T) { app = NewApp() app.Name = "visible-categories" + app.HideHelp = true app.Commands = []*Command{ { Name: "command1", diff --git a/help_test.go b/help_test.go index b81701c..302c38e 100644 --- a/help_test.go +++ b/help_test.go @@ -143,6 +143,23 @@ func Test_helpCommand_Action_ErrorIfNoTopic(t *testing.T) { } } +func Test_helpCommand_InHelpOutput(t *testing.T) { + app := NewApp() + output := &bytes.Buffer{} + app.Writer = output + app.Run([]string{"test", "--help"}) + + s := output.String() + + if strings.Contains(s, "\nCOMMANDS:\nGLOBAL OPTIONS:\n") { + t.Fatalf("empty COMMANDS section detected: %q", s) + } + + if !strings.Contains(s, "help, h") { + t.Fatalf("missing \"help, h\": %q", s) + } +} + func Test_helpSubcommand_Action_ErrorIfNoTopic(t *testing.T) { app := NewApp()