options: Add kong.ShortUsageOnError() option

Add kong.ShortUsageOnError() option similar to kong.UsageOnError().
Add tests for UsageOnError and ShortUsageOnError.

Remove the HelpOption summary reset at the beginning of DefaultHelpPrinter:

	 func DefaultHelpPrinter(options HelpOptions, ctx *Context) error {
	-       if ctx.Empty() {
	-               options.Summary = false
	-       }

⚠️ I'm not really sure what the implications of this are, tests still
seem to pass, but maybe this has unintended side effects.
This commit is contained in:
Julia Ogris
2021-02-13 18:37:59 +11:00
committed by Alec Thomas
parent f306ae1529
commit 1300b2a3bd
4 changed files with 137 additions and 6 deletions
+78
View File
@@ -2,6 +2,7 @@ package kong_test
import (
"bytes"
"fmt"
"strings"
"testing"
@@ -512,3 +513,80 @@ Group 2
require.Equal(t, expected, w.String())
})
}
func TestUsageOnError(t *testing.T) {
var cli struct {
Flag string `help:"A required flag." required`
}
w := &strings.Builder{}
p := mustNew(t, &cli,
kong.Writers(w, w),
kong.Description("Some description."),
kong.Exit(func(int) {}),
kong.UsageOnError(),
)
_, err := p.Parse([]string{})
p.FatalIfErrorf(err)
expected := `Usage: test --flag=STRING
Some description.
Flags:
-h, --help Show context-sensitive help.
--flag=STRING A required flag.
test: error: missing flags: --flag=STRING
`
require.Equal(t, expected, w.String())
}
func TestShortUsageOnError(t *testing.T) {
var cli struct {
Flag string `help:"A required flag." required`
}
w := &strings.Builder{}
p := mustNew(t, &cli,
kong.Writers(w, w),
kong.Description("Some description."),
kong.Exit(func(int) {}),
kong.ShortUsageOnError(),
)
_, err := p.Parse([]string{})
require.Error(t, err)
p.FatalIfErrorf(err)
expected := `Usage: test --flag=STRING
Run "test --help" for more information.
test: error: missing flags: --flag=STRING
`
require.Equal(t, expected, w.String())
}
func TestCustomShortUsageOnError(t *testing.T) {
var cli struct {
Flag string `help:"A required flag." required`
}
w := &strings.Builder{}
shortHelp := func(_ kong.HelpOptions, ctx *kong.Context) error {
fmt.Fprintln(ctx.Stdout, "🤷 wish I could help")
return nil
}
p := mustNew(t, &cli,
kong.Writers(w, w),
kong.Description("Some description."),
kong.Exit(func(int) {}),
kong.ShortHelp(shortHelp),
kong.ShortUsageOnError(),
)
_, err := p.Parse([]string{})
require.Error(t, err)
p.FatalIfErrorf(err)
expected := `🤷 wish I could help
test: error: missing flags: --flag=STRING
`
require.Equal(t, expected, w.String())
}