Set Categories as a read-only method and fix tests
This commit is contained in:
parent
994a7028e2
commit
d0997e8f99
15
app.go
15
app.go
@ -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 {
|
||||||
|
44
app_test.go
44
app_test.go
@ -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) {}
|
||||||
|
Loading…
Reference in New Issue
Block a user