command/flag: implement integer flag
Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
parent
647c6ea21b
commit
35037705a9
@ -28,6 +28,14 @@ func (v StringFlag) Define(b *strings.Builder, set *flag.FlagSet, p any, name, u
|
|||||||
b.WriteString(" [" + prettyFlag(name) + " <value>]")
|
b.WriteString(" [" + prettyFlag(name) + " <value>]")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IntFlag is the default value of an int flag.
|
||||||
|
type IntFlag int
|
||||||
|
|
||||||
|
func (v IntFlag) Define(b *strings.Builder, set *flag.FlagSet, p any, name, usage string) {
|
||||||
|
set.IntVar(p.(*int), name, int(v), usage)
|
||||||
|
b.WriteString(" [" + prettyFlag(name) + " <int>]")
|
||||||
|
}
|
||||||
|
|
||||||
// BoolFlag is the default value of a bool flag.
|
// BoolFlag is the default value of a bool flag.
|
||||||
type BoolFlag bool
|
type BoolFlag bool
|
||||||
|
|
||||||
|
@ -64,18 +64,24 @@ func TestParse(t *testing.T) {
|
|||||||
[]string{"print", "0", "1", "2"},
|
[]string{"print", "0", "1", "2"},
|
||||||
"012", "", nil,
|
"012", "", nil,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"d=0 out of order string flag",
|
||||||
|
buildTestCommand,
|
||||||
|
[]string{"string", "--string", "64d3b4b7b21788585845060e2199a78f"},
|
||||||
|
"flag provided but not defined: -string\n\nUsage:\ttest string [-h | --help] COMMAND [OPTIONS]\n\n", "",
|
||||||
|
errors.New("flag provided but not defined: -string"),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"d=0 string flag",
|
"d=0 string flag",
|
||||||
buildTestCommand,
|
buildTestCommand,
|
||||||
[]string{"--val", "64d3b4b7b21788585845060e2199a78f", "flag"},
|
[]string{"--string", "64d3b4b7b21788585845060e2199a78f", "string"},
|
||||||
"64d3b4b7b21788585845060e2199a78f", "", nil,
|
"64d3b4b7b21788585845060e2199a78f", "", nil,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"d=0 out of order string flag",
|
"d=0 int flag",
|
||||||
buildTestCommand,
|
buildTestCommand,
|
||||||
[]string{"flag", "--val", "64d3b4b7b21788585845060e2199a78f"},
|
[]string{"--int", "2147483647", "int"},
|
||||||
"flag provided but not defined: -val\n\nUsage:\ttest flag [-h | --help] COMMAND [OPTIONS]\n\n", "",
|
"2147483647", "", nil,
|
||||||
errors.New("flag provided but not defined: -val"),
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"d=0 bool flag",
|
"d=0 bool flag",
|
||||||
@ -138,12 +144,13 @@ func TestParse(t *testing.T) {
|
|||||||
buildTestCommand,
|
buildTestCommand,
|
||||||
[]string{},
|
[]string{},
|
||||||
`
|
`
|
||||||
Usage: test [-h | --help] [-v] [--fail] [--val <value>] COMMAND [OPTIONS]
|
Usage: test [-h | --help] [-v] [--fail] [--string <value>] [--int <int>] COMMAND [OPTIONS]
|
||||||
|
|
||||||
Commands:
|
Commands:
|
||||||
error return an error
|
error return an error
|
||||||
print wraps Fprint
|
print wraps Fprint
|
||||||
flag print value passed by flag
|
string print string passed by flag
|
||||||
|
int print int passed by flag
|
||||||
empty empty subcommand
|
empty empty subcommand
|
||||||
join wraps strings.Join
|
join wraps strings.Join
|
||||||
succeed this command succeeds
|
succeed this command succeeds
|
||||||
@ -156,12 +163,13 @@ Commands:
|
|||||||
buildTestCommand,
|
buildTestCommand,
|
||||||
[]string{"-h"},
|
[]string{"-h"},
|
||||||
`
|
`
|
||||||
Usage: test [-h | --help] [-v] [--fail] [--val <value>] COMMAND [OPTIONS]
|
Usage: test [-h | --help] [-v] [--fail] [--string <value>] [--int <int>] COMMAND [OPTIONS]
|
||||||
|
|
||||||
Commands:
|
Commands:
|
||||||
error return an error
|
error return an error
|
||||||
print wraps Fprint
|
print wraps Fprint
|
||||||
flag print value passed by flag
|
string print string passed by flag
|
||||||
|
int print int passed by flag
|
||||||
empty empty subcommand
|
empty empty subcommand
|
||||||
join wraps strings.Join
|
join wraps strings.Join
|
||||||
succeed this command succeeds
|
succeed this command succeeds
|
||||||
@ -170,9 +178,11 @@ Commands:
|
|||||||
Flags:
|
Flags:
|
||||||
-fail
|
-fail
|
||||||
fail early
|
fail early
|
||||||
|
-int int
|
||||||
|
store value for the "int" command (default -1)
|
||||||
|
-string string
|
||||||
|
store value for the "string" command (default "default")
|
||||||
-v verbose output
|
-v verbose output
|
||||||
-val string
|
|
||||||
store val for the "flag" command (default "default")
|
|
||||||
|
|
||||||
`, "", flag.ErrHelp,
|
`, "", flag.ErrHelp,
|
||||||
},
|
},
|
||||||
@ -256,7 +266,9 @@ func buildTestCommand(wout, wlog io.Writer) (c command.Command) {
|
|||||||
var (
|
var (
|
||||||
flagVerbose bool
|
flagVerbose bool
|
||||||
flagFail bool
|
flagFail bool
|
||||||
flagVal string
|
|
||||||
|
flagString string
|
||||||
|
flagInt int
|
||||||
)
|
)
|
||||||
|
|
||||||
logf := newLogFunc(wlog)
|
logf := newLogFunc(wlog)
|
||||||
@ -282,11 +294,10 @@ func buildTestCommand(wout, wlog io.Writer) (c command.Command) {
|
|||||||
_, err := fmt.Fprint(wout, a...)
|
_, err := fmt.Fprint(wout, a...)
|
||||||
return err
|
return err
|
||||||
}).
|
}).
|
||||||
Flag(&flagVal, "val", command.StringFlag("default"), "store val for the \"flag\" command").
|
Flag(&flagString, "string", command.StringFlag("default"), "store value for the \"string\" command").
|
||||||
Command("flag", "print value passed by flag", func(args []string) error {
|
Command("string", "print string passed by flag", func(args []string) error { _, err := fmt.Fprint(wout, flagString); return err }).
|
||||||
_, err := fmt.Fprint(wout, flagVal)
|
Flag(&flagInt, "int", command.IntFlag(-1), "store value for the \"int\" command").
|
||||||
return err
|
Command("int", "print int passed by flag", func(args []string) error { _, err := fmt.Fprint(wout, flagInt); return err })
|
||||||
})
|
|
||||||
|
|
||||||
c.New("empty", "empty subcommand")
|
c.New("empty", "empty subcommand")
|
||||||
c.New("hidden", command.UsageInternal)
|
c.New("hidden", command.UsageInternal)
|
||||||
|
Loading…
Reference in New Issue
Block a user