feat: flag action

This commit is contained in:
Wendell Sun
2022-02-15 23:49:41 +08:00
committed by Dan Buch
parent a2c3729797
commit e2e14ec6ef
19 changed files with 234 additions and 0 deletions

View File

@@ -2357,6 +2357,10 @@ func (c *customBoolFlag) Apply(set *flag.FlagSet) error {
return nil
}
func (c *customBoolFlag) RunAction(*Context) error {
return nil
}
func (c *customBoolFlag) IsSet() bool {
return false
}
@@ -2596,3 +2600,66 @@ func TestSetupInitializesOnlyNilWriters(t *testing.T) {
t.Errorf("expected a.Writer to be os.Stdout")
}
}
func TestFlagAction(t *testing.T) {
r := []string{}
actionFunc := func(c *Context, s string) error {
r = append(r, s)
return nil
}
app := &App{
Name: "command",
Writer: io.Discard,
Flags: []Flag{&StringFlag{Name: "flag", Action: actionFunc}},
Commands: []*Command{
{
Name: "command1",
Flags: []Flag{&StringFlag{Name: "flag1", Aliases: []string{"f1"}, Action: actionFunc}},
Subcommands: []*Command{
{
Name: "command2",
Flags: []Flag{&StringFlag{Name: "flag2", Action: actionFunc}},
},
},
},
},
}
tests := []struct {
args []string
exp []string
}{
{
args: []string{"command", "--flag=f"},
exp: []string{"f"},
},
{
args: []string{"command", "command1", "-f1=f1", "command2"},
exp: []string{"f1"},
},
{
args: []string{"command", "command1", "-f1=f1", "command2", "--flag2=f2"},
exp: []string{"f1", "f2"},
},
{
args: []string{"command", "--flag=f", "command1", "-flag1=f1"},
exp: []string{"f", "f1"},
},
{
args: []string{"command", "--flag=f", "command1", "-f1=f1"},
exp: []string{"f", "f1"},
},
{
args: []string{"command", "--flag=f", "command1", "-f1=f1", "command2", "--flag2=f2"},
exp: []string{"f", "f1", "f2"},
},
}
for _, test := range tests {
r = []string{}
err := app.Run(test.args)
expect(t, err, nil)
expect(t, r, test.exp)
}
}