Tracing parser (#11)
* Add tracing to the parser. * Synthesize a --help flag. * Parsing now occurs in multiple phases. 1. Reset target. 2. Parse command-line into a "trace" (no values are written to target). 3. Apply traced, parsed values to the target fields. This is another step in facilitating context-sensitive help and completion. * Detect duplicate flags.
This commit is contained in:
committed by
Gerald Kaszuba
parent
3eb5e285ed
commit
ab5cf7e6ef
+46
-1
@@ -8,7 +8,9 @@ import (
|
||||
|
||||
func mustNew(t *testing.T, cli interface{}) *Kong {
|
||||
t.Helper()
|
||||
parser, err := New(cli)
|
||||
parser, err := New(cli, ExitFunction(func(int) {
|
||||
t.Fatalf("unexpected exit()")
|
||||
}))
|
||||
require.NoError(t, err)
|
||||
return parser
|
||||
}
|
||||
@@ -307,3 +309,46 @@ func TestEscapedQuote(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, "i don't know", cli.DoYouKnow)
|
||||
}
|
||||
|
||||
func TestInvalidDefaultErrors(t *testing.T) {
|
||||
var cli struct {
|
||||
Flag int `kong:"default='foo'"`
|
||||
}
|
||||
p := mustNew(t, &cli)
|
||||
_, err := p.Parse(nil)
|
||||
require.Error(t, err)
|
||||
}
|
||||
|
||||
func TestHelp(t *testing.T) {
|
||||
var cli struct {
|
||||
Flag string
|
||||
}
|
||||
p := mustNew(t, &cli)
|
||||
_, err := p.Parse([]string{"--flag=hello", "--help"})
|
||||
require.NoError(t, err)
|
||||
require.NotEqual(t, "hello", cli.Flag)
|
||||
}
|
||||
|
||||
func TestDuplicateFlag(t *testing.T) {
|
||||
var cli struct {
|
||||
Flag bool
|
||||
Cmd struct {
|
||||
Flag bool
|
||||
}
|
||||
}
|
||||
_, err := New(&cli)
|
||||
require.Error(t, err)
|
||||
}
|
||||
|
||||
func TestDuplicateFlagOnPeerCommandIsOkay(t *testing.T) {
|
||||
var cli struct {
|
||||
Cmd1 struct {
|
||||
Flag bool
|
||||
}
|
||||
Cmd2 struct {
|
||||
Flag bool
|
||||
}
|
||||
}
|
||||
_, err := New(&cli)
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user