Set Categories as a read-only method and fix tests

This commit is contained in:
Soulou 2015-08-21 13:25:37 +02:00 committed by Jesse Szwedko
parent 994a7028e2
commit d0997e8f99
3 changed files with 55 additions and 7 deletions

15
app.go
View File

@ -37,8 +37,8 @@ type App struct {
HideVersion bool HideVersion bool
// Display commands by category // Display commands by category
CategorizedHelp bool CategorizedHelp bool
// Populate when displaying AppHelp // Populate on app startup, only gettable throught method Categories()
Categories CommandCategories categories CommandCategories
// An action to execute when the bash-completion flag is set // An action to execute when the bash-completion flag is set
BashComplete func(context *Context) BashComplete func(context *Context)
// An action to execute before any subcommands are run, but after the context is ready // 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 { if a.CategorizedHelp {
a.Categories = CommandCategories{} a.categories = CommandCategories{}
for _, command := range a.Commands { 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{} newCmds := []Command{}
for _, c := range a.Commands { for _, c := range a.Commands {
@ -329,6 +329,11 @@ func (a *App) Command(name string) *Command {
return nil 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 { func (a *App) hasFlag(flag Flag) bool {
for _, f := range a.Flags { for _, f := range a.Flags {
if flag == f { if flag == f {

View File

@ -8,6 +8,7 @@ import (
"io" "io"
"io/ioutil" "io/ioutil"
"os" "os"
"reflect"
"strings" "strings"
"testing" "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) { func TestApp_Run_DoesNotOverwriteErrorFromBefore(t *testing.T) {
app := NewApp() app := NewApp()
app.Action = func(c *Context) {} app.Action = func(c *Context) {}

View File

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