Open
Description
If a required
tag is attached to one of the flags, there is no error even when the flag is not passed.
Test case:
func TestXorAndRequired(t *testing.T) {
var cli struct {
Hello string `xor:"hello" required:""`
One string `xor:"hello" and:"two"`
Two string `and:"two"`
}
p := mustNew(t, &cli)
_, err := p.Parse([]string{})
assert.EqualError(t, err, "missing flags: --hello=STRING or --one=STRING, --one=STRING and --two=STRING")
}
Error:
$ go test ./...
--- FAIL: TestXorAndRequired (0.00s)
kong_test.go:1195: Expected an error
FAIL
FAIL github.com/alecthomas/kong 0.597s
FAIL
Full test case
func TestXorAndRequired(t *testing.T) {
var cli struct {
Hello string `xor:"hello" required:""`
One string `xor:"hello" and:"two"`
Two string `and:"two"`
}
p := mustNew(t, &cli)
_, err := p.Parse([]string{})
assert.EqualError(t, err, "missing flags: --hello=STRING or --one=STRING, --one=STRING and --two=STRING")
p = mustNew(t, &cli)
_, err = p.Parse([]string{"--one=valOne"})
assert.EqualError(t, err, "--one and --two must be used together")
p = mustNew(t, &cli)
_, err = p.Parse([]string{"--two=valTwo"})
assert.EqualError(t, err, "--one and --two must be used together")
p = mustNew(t, &cli)
_, err = p.Parse([]string{"--hello=valHello", "--one=valOne"})
assert.EqualError(t, err, "--hello and --one can't be used together, --one and --two must be used together")
p = mustNew(t, &cli)
_, err = p.Parse([]string{"--hello=valHello", "--two=valTwo"})
assert.EqualError(t, err, "--one and --two must be used together")
p = mustNew(t, &cli)
_, err = p.Parse([]string{"--hello=valHello", "--one=valOne", "--two=valTwo"})
assert.EqualError(t, err, "--hello and --one can't be used together")
p = mustNew(t, &cli)
_, err = p.Parse([]string{"--hello=valHello"})
assert.NoError(t, err)
p = mustNew(t, &cli)
_, err = p.Parse([]string{"--one=valOne", "--two=valTwo"})
assert.NoError(t, err)
}
func TestXorAndRequiredMany(t *testing.T) {
var cli struct {
Hello string `required:"" xor:"hello"`
One string `required:"" xor:"hello" and:"two"`
Two string `required:"" and:"two"`
}
p := mustNew(t, &cli)
_, err := p.Parse([]string{})
assert.EqualError(t, err, "missing flags: --hello=STRING or --one=STRING, --one=STRING and --two=STRING")
p = mustNew(t, &cli)
_, err = p.Parse([]string{"--one=valOne"})
assert.EqualError(t, err, "--one and --two must be used together")
p = mustNew(t, &cli)
_, err = p.Parse([]string{"--two=valTwo"})
assert.EqualError(t, err, "--one and --two must be used together")
p = mustNew(t, &cli)
_, err = p.Parse([]string{"--hello=valHello", "--one=valOne"})
assert.EqualError(t, err, "--hello and --one can't be used together, --one and --two must be used together")
p = mustNew(t, &cli)
_, err = p.Parse([]string{"--hello=valHello", "--two=valTwo"})
assert.EqualError(t, err, "--one and --two must be used together")
p = mustNew(t, &cli)
_, err = p.Parse([]string{"--hello=valHello", "--one=valOne", "--two=valTwo"})
assert.EqualError(t, err, "--hello and --one can't be used together")
p = mustNew(t, &cli)
_, err = p.Parse([]string{"--hello=valHello"})
assert.NoError(t, err)
p = mustNew(t, &cli)
_, err = p.Parse([]string{"--one=valOne", "--two=valTwo"})
assert.NoError(t, err)
}
Metadata
Metadata
Assignees
Labels
No labels