Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,5 @@ bin

.idea/
*.iml

.vscode
3 changes: 2 additions & 1 deletion command.go
Original file line number Diff line number Diff line change
Expand Up @@ -1120,7 +1120,8 @@ Simply type ` + c.Name() + ` help [path to command] for full details.`,
c.Printf("Unknown help topic %#q\n", args)
CheckErr(c.Root().Usage())
} else {
cmd.InitDefaultHelpFlag() // make possible 'help' flag to be shown
cmd.InitDefaultHelpFlag() // make possible 'help' flag to be shown
cmd.InitDefaultVersionFlag() // make possible 'version' flag to be shown
CheckErr(cmd.Help())
}
},
Expand Down
87 changes: 87 additions & 0 deletions command_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2161,3 +2161,90 @@ func TestSetContextPersistentPreRun(t *testing.T) {
t.Error(err)
}
}

const VERSION_FLAG = "--version"
const HELP_FLAG = "--help"

func TestNoRootRunCommandExecutedWithVersionSet(t *testing.T) {
rootCmd := &Command{Use: "root", Version: "1.0.0", Long: "Long description"}
rootCmd.AddCommand(&Command{Use: "child", Run: emptyRun})

output, err := executeCommand(rootCmd)
if err != nil {
t.Errorf("Unexpected error: %v", err)
}

checkStringContains(t, output, rootCmd.Long)
checkStringContains(t, output, HELP_FLAG)
checkStringContains(t, output, VERSION_FLAG)
}

func TestNoRootRunCommandExecutedWithoutVersionSet(t *testing.T) {
rootCmd := &Command{Use: "root", Long: "Long description"}
rootCmd.AddCommand(&Command{Use: "child", Run: emptyRun})

output, err := executeCommand(rootCmd)
if err != nil {
t.Errorf("Unexpected error: %v", err)
}

checkStringContains(t, output, rootCmd.Long)
checkStringContains(t, output, HELP_FLAG)
checkStringOmits(t, output, VERSION_FLAG)
}

func TestHelpCommandExecutedWithVersionSet(t *testing.T) {
rootCmd := &Command{Use: "root", Version: "1.0.0", Long: "Long description", Run: emptyRun}
rootCmd.AddCommand(&Command{Use: "child", Run: emptyRun})

output, err := executeCommand(rootCmd, "help")
if err != nil {
t.Errorf("Unexpected error: %v", err)
}

checkStringContains(t, output, rootCmd.Long)
checkStringContains(t, output, HELP_FLAG)
checkStringContains(t, output, VERSION_FLAG)
}

func TestHelpCommandExecutedWithoutVersionSet(t *testing.T) {
rootCmd := &Command{Use: "root", Long: "Long description", Run: emptyRun}
rootCmd.AddCommand(&Command{Use: "child", Run: emptyRun})

output, err := executeCommand(rootCmd, "help")
if err != nil {
t.Errorf("Unexpected error: %v", err)
}

checkStringContains(t, output, rootCmd.Long)
checkStringContains(t, output, HELP_FLAG)
checkStringOmits(t, output, VERSION_FLAG)
}

func TestHelpflagCommandExecutedWithVersionSet(t *testing.T) {
rootCmd := &Command{Use: "root", Version: "1.0.0", Long: "Long description", Run: emptyRun}
rootCmd.AddCommand(&Command{Use: "child", Run: emptyRun})

output, err := executeCommand(rootCmd, HELP_FLAG)
if err != nil {
t.Errorf("Unexpected error: %v", err)
}

checkStringContains(t, output, rootCmd.Long)
checkStringContains(t, output, HELP_FLAG)
checkStringContains(t, output, VERSION_FLAG)
}

func TestHelpflagCommandExecutedWithoutVersionSet(t *testing.T) {
rootCmd := &Command{Use: "root", Long: "Long description", Run: emptyRun}
rootCmd.AddCommand(&Command{Use: "child", Run: emptyRun})

output, err := executeCommand(rootCmd, HELP_FLAG)
if err != nil {
t.Errorf("Unexpected error: %v", err)
}

checkStringContains(t, output, rootCmd.Long)
checkStringContains(t, output, HELP_FLAG)
checkStringOmits(t, output, VERSION_FLAG)
}