diff --git a/kong_test.go b/kong_test.go index f1e8e47..ad0d988 100644 --- a/kong_test.go +++ b/kong_test.go @@ -566,3 +566,14 @@ func TestErrorMissingArgs(t *testing.T) { require.Error(t, err) require.Equal(t, "expected \" \"", err.Error()) } + +func TestBoolOverride(t *testing.T) { + var cli struct { + Flag bool `default:"true"` + } + p := mustNew(t, &cli) + _, err := p.Parse([]string{"--flag=false"}) + require.NoError(t, err) + _, err = p.Parse([]string{"--flag", "false"}) + require.Error(t, err) +} diff --git a/mapper.go b/mapper.go index 20d1dac..3f980c2 100644 --- a/mapper.go +++ b/mapper.go @@ -211,7 +211,12 @@ func (r *Registry) RegisterDefaults() *Registry { type boolMapper struct{} func (boolMapper) Decode(ctx *DecodeContext, target reflect.Value) error { - target.SetBool(true) + if ctx.Scan.Peek().Type == FlagValueToken { + token := ctx.Scan.Pop() + target.SetBool(token.Value == "true") + } else { + target.SetBool(true) + } return nil } func (boolMapper) IsBool() bool { return true }