Set Categories as a read-only method and fix tests

main
Soulou 9 years ago committed by Jesse Szwedko
parent 994a7028e2
commit d0997e8f99

@ -37,8 +37,8 @@ type App struct {
HideVersion bool
// Display commands by category
CategorizedHelp bool
// Populate when displaying AppHelp
Categories CommandCategories
// Populate on app startup, only gettable throught method Categories()
categories CommandCategories
// An action to execute when the bash-completion flag is set
BashComplete func(context *Context)
// An action to execute before any subcommands are run, but after the context is ready
@ -101,12 +101,12 @@ func (a *App) Run(arguments []string) (err error) {
}
if a.CategorizedHelp {
a.Categories = CommandCategories{}
a.categories = CommandCategories{}
for _, command := range a.Commands {
a.Categories = a.Categories.AddCommand(command.Category, command)
a.categories = a.categories.AddCommand(command.Category, command)
}
}
sort.Sort(a.Categories)
sort.Sort(a.categories)
newCmds := []Command{}
for _, c := range a.Commands {
@ -329,6 +329,11 @@ func (a *App) Command(name string) *Command {
return nil
}
// Returnes the array containing all the categories with the commands they contain
func (a *App) Categories() CommandCategories {
return a.categories
}
func (a *App) hasFlag(flag Flag) bool {
for _, f := range a.Flags {
if flag == f {

@ -8,6 +8,7 @@ import (
"io"
"io/ioutil"
"os"
"reflect"
"strings"
"testing"
)
@ -939,6 +940,49 @@ func TestApp_Run_Version(t *testing.T) {
}
}
func TestApp_Run_Categories(t *testing.T) {
app := NewApp()
app.Name = "categories"
app.CategorizedHelp = true
app.Commands = []Command{
Command{
Name: "command1",
Category: "1",
},
Command{
Name: "command2",
Category: "1",
},
Command{
Name: "command3",
Category: "2",
},
}
buf := new(bytes.Buffer)
app.Writer = buf
app.Run([]string{"categories"})
expect := CommandCategories{
&CommandCategory{
Name: "1",
Commands: []Command{
app.Commands[0],
app.Commands[1],
},
},
&CommandCategory{
Name: "2",
Commands: []Command{
app.Commands[2],
},
},
}
if !reflect.DeepEqual(app.Categories(), expect) {
t.Fatalf("expected categories %#v, to equal %#v", app.Categories(), expect)
}
}
func TestApp_Run_DoesNotOverwriteErrorFromBefore(t *testing.T) {
app := NewApp()
app.Action = func(c *Context) {}

@ -48,8 +48,7 @@ USAGE:
{{if .Category}}CATEGORY:
{{.Category}}
{{end}}
DESCRIPTION:
{{end}}DESCRIPTION:
{{.Description}}{{end}}{{if .Flags}}
OPTIONS:

Loading…
Cancel
Save