Merge pull request #1214 from anicoll/flag_lineage_fix
fix for parent context not setting child flags
This commit is contained in:
commit
498b50b3e1
@ -649,7 +649,7 @@ func main() {
|
|||||||
|
|
||||||
app := &cli.App{
|
app := &cli.App{
|
||||||
Action: func(c *cli.Context) error {
|
Action: func(c *cli.Context) error {
|
||||||
fmt.Println("yaml ist rad")
|
fmt.Println("--test value.*default: 0")
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
Before: altsrc.InitInputSourceWithContext(flags, altsrc.NewYamlSourceFromFlagFunc("load")),
|
Before: altsrc.InitInputSourceWithContext(flags, altsrc.NewYamlSourceFromFlagFunc("load")),
|
||||||
|
@ -145,7 +145,10 @@ func (f *Int64SliceFlag) Apply(set *flag.FlagSet) error {
|
|||||||
// Int64Slice looks up the value of a local Int64SliceFlag, returns
|
// Int64Slice looks up the value of a local Int64SliceFlag, returns
|
||||||
// nil if not found
|
// nil if not found
|
||||||
func (c *Context) Int64Slice(name string) []int64 {
|
func (c *Context) Int64Slice(name string) []int64 {
|
||||||
return lookupInt64Slice(name, c.flagSet)
|
if fs := lookupFlagSet(name, c); fs != nil {
|
||||||
|
return lookupInt64Slice(name, fs)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func lookupInt64Slice(name string, set *flag.FlagSet) []int64 {
|
func lookupInt64Slice(name string, set *flag.FlagSet) []int64 {
|
||||||
|
@ -157,7 +157,7 @@ func (f *IntSliceFlag) Apply(set *flag.FlagSet) error {
|
|||||||
// nil if not found
|
// nil if not found
|
||||||
func (c *Context) IntSlice(name string) []int {
|
func (c *Context) IntSlice(name string) []int {
|
||||||
if fs := lookupFlagSet(name, c); fs != nil {
|
if fs := lookupFlagSet(name, c); fs != nil {
|
||||||
return lookupIntSlice(name, c.flagSet)
|
return lookupIntSlice(name, fs)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
93
flag_test.go
93
flag_test.go
@ -674,6 +674,45 @@ func TestIntSliceFlagApply_SetsAllNames(t *testing.T) {
|
|||||||
expect(t, err, nil)
|
expect(t, err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestIntSliceFlagApply_ParentContext(t *testing.T) {
|
||||||
|
_ = (&App{
|
||||||
|
Flags: []Flag{
|
||||||
|
&IntSliceFlag{Name: "numbers", Aliases: []string{"n"}, Value: NewIntSlice(1, 2, 3)},
|
||||||
|
},
|
||||||
|
Commands: []*Command{
|
||||||
|
{
|
||||||
|
Name: "child",
|
||||||
|
Action: func(ctx *Context) error {
|
||||||
|
expected := []int{1, 2, 3}
|
||||||
|
if !reflect.DeepEqual(ctx.IntSlice("numbers"), expected) {
|
||||||
|
t.Errorf("child context unable to view parent flag: %v != %v", expected, ctx.IntSlice("numbers"))
|
||||||
|
}
|
||||||
|
if !reflect.DeepEqual(ctx.IntSlice("n"), expected) {
|
||||||
|
t.Errorf("child context unable to view parent flag: %v != %v", expected, ctx.IntSlice("n"))
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}).Run([]string{"run", "child"})
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestIntSliceFlag_SetFromParentContext(t *testing.T) {
|
||||||
|
fl := &IntSliceFlag{Name: "numbers", Aliases: []string{"n"}, Value: NewIntSlice(1, 2, 3, 4)}
|
||||||
|
set := flag.NewFlagSet("test", 0)
|
||||||
|
_ = fl.Apply(set)
|
||||||
|
ctx := &Context{
|
||||||
|
parentContext: &Context{
|
||||||
|
flagSet: set,
|
||||||
|
},
|
||||||
|
flagSet: flag.NewFlagSet("empty", 0),
|
||||||
|
}
|
||||||
|
expected := []int{1, 2, 3, 4}
|
||||||
|
if !reflect.DeepEqual(ctx.IntSlice("numbers"), expected) {
|
||||||
|
t.Errorf("child context unable to view parent flag: %v != %v", expected, ctx.IntSlice("numbers"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var int64SliceFlagTests = []struct {
|
var int64SliceFlagTests = []struct {
|
||||||
name string
|
name string
|
||||||
aliases []string
|
aliases []string
|
||||||
@ -716,6 +755,60 @@ func TestInt64SliceFlagWithEnvVarHelpOutput(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestInt64SliceFlagApply_ParentContext(t *testing.T) {
|
||||||
|
_ = (&App{
|
||||||
|
Flags: []Flag{
|
||||||
|
&Int64SliceFlag{Name: "numbers", Aliases: []string{"n"}, Value: NewInt64Slice(1, 2, 3)},
|
||||||
|
},
|
||||||
|
Commands: []*Command{
|
||||||
|
{
|
||||||
|
Name: "child",
|
||||||
|
Action: func(ctx *Context) error {
|
||||||
|
expected := []int64{1, 2, 3}
|
||||||
|
if !reflect.DeepEqual(ctx.Int64Slice("numbers"), expected) {
|
||||||
|
t.Errorf("child context unable to view parent flag: %v != %v", expected, ctx.Int64Slice("numbers"))
|
||||||
|
}
|
||||||
|
if !reflect.DeepEqual(ctx.Int64Slice("n"), expected) {
|
||||||
|
t.Errorf("child context unable to view parent flag: %v != %v", expected, ctx.Int64Slice("n"))
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}).Run([]string{"run", "child"})
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestInt64SliceFlag_SetFromParentContext(t *testing.T) {
|
||||||
|
fl := &Int64SliceFlag{Name: "numbers", Aliases: []string{"n"}, Value: NewInt64Slice(1, 2, 3, 4)}
|
||||||
|
set := flag.NewFlagSet("test", 0)
|
||||||
|
_ = fl.Apply(set)
|
||||||
|
ctx := &Context{
|
||||||
|
parentContext: &Context{
|
||||||
|
flagSet: set,
|
||||||
|
},
|
||||||
|
flagSet: flag.NewFlagSet("empty", 0),
|
||||||
|
}
|
||||||
|
expected := []int64{1, 2, 3, 4}
|
||||||
|
if !reflect.DeepEqual(ctx.Int64Slice("numbers"), expected) {
|
||||||
|
t.Errorf("child context unable to view parent flag: %v != %v", expected, ctx.Int64Slice("numbers"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
func TestInt64SliceFlag_ReturnNil(t *testing.T) {
|
||||||
|
fl := &Int64SliceFlag{}
|
||||||
|
set := flag.NewFlagSet("test", 0)
|
||||||
|
_ = fl.Apply(set)
|
||||||
|
ctx := &Context{
|
||||||
|
parentContext: &Context{
|
||||||
|
flagSet: set,
|
||||||
|
},
|
||||||
|
flagSet: flag.NewFlagSet("empty", 0),
|
||||||
|
}
|
||||||
|
expected := []int64(nil)
|
||||||
|
if !reflect.DeepEqual(ctx.Int64Slice("numbers"), expected) {
|
||||||
|
t.Errorf("child context unable to view parent flag: %v != %v", expected, ctx.Int64Slice("numbers"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var float64FlagTests = []struct {
|
var float64FlagTests = []struct {
|
||||||
name string
|
name string
|
||||||
expected string
|
expected string
|
||||||
|
Loading…
x
Reference in New Issue
Block a user