Merge remote-tracking branch 'upstream/master'

This commit is contained in:
S.Solodyagin
2025-07-02 20:54:46 +03:00
44 changed files with 1927 additions and 574 deletions
+55 -4
View File
@@ -268,9 +268,8 @@ func TestFileContentFlag(t *testing.T) {
var cli struct {
File kong.FileContentFlag
}
f, err := os.CreateTemp("", "")
f, err := os.CreateTemp(t.TempDir(), "")
assert.NoError(t, err)
defer os.Remove(f.Name())
fmt.Fprint(f, "hello world")
f.Close()
_, err = mustNew(t, &cli).Parse([]string{"--file", f.Name()})
@@ -282,9 +281,8 @@ func TestNamedFileContentFlag(t *testing.T) {
var cli struct {
File kong.NamedFileContentFlag
}
f, err := os.CreateTemp("", "")
f, err := os.CreateTemp(t.TempDir(), "")
assert.NoError(t, err)
defer os.Remove(f.Name())
fmt.Fprint(f, "hello world")
f.Close()
_, err = mustNew(t, &cli).Parse([]string{"--file", f.Name()})
@@ -397,6 +395,31 @@ func TestNumbers(t *testing.T) {
I64: math.MinInt64,
}, cli)
})
t.Run("Integer literals", func(t *testing.T) {
integerLiterals := "10_0"
_, err := p.Parse([]string{
fmt.Sprintf("--i-8=%s", integerLiterals),
fmt.Sprintf("--i-16=%s", integerLiterals),
fmt.Sprintf("--i-32=%s", integerLiterals),
fmt.Sprintf("--i-64=%s", integerLiterals),
fmt.Sprintf("--u-8=%s", integerLiterals),
fmt.Sprintf("--u-16=%s", integerLiterals),
fmt.Sprintf("--u-32=%s", integerLiterals),
fmt.Sprintf("--u-64=%s", integerLiterals),
})
assert.NoError(t, err)
assert.Equal(t, CLI{
I8: int8(100),
I16: int16(100),
I32: int32(100),
I64: int64(100),
U8: uint8(100),
U16: uint16(100),
U32: uint32(100),
U64: uint64(100),
}, cli)
})
}
func TestJSONLargeNumber(t *testing.T) {
@@ -756,3 +779,31 @@ func TestValuesThatLookLikeFlags(t *testing.T) {
assert.NoError(t, err)
assert.Equal(t, map[string]string{"-foo": "-bar"}, cli.Map)
}
type DecodeCLI struct {
Foo DecodeFoo `env:"FOO"`
}
type DecodeFoo struct {
Bar string
}
func (f DecodeFoo) Decode(ctx *kong.DecodeContext) error {
ctx.Value.Target.Set(reflect.ValueOf(struct {
Bar string
}{"baz"}))
return nil
}
func TestDecode(t *testing.T) {
c := &DecodeCLI{}
parser, err := kong.New(c)
assert.NoError(t, err)
t.Setenv("FOO", "foo")
_, err = parser.Parse([]string{})
assert.NoError(t, err)
assert.Equal(t, c.Foo.Bar, "baz")
}