diff --git a/helper/flag-slice/flag.go b/helper/flag-slice/flag.go index da75149dc..587b674fa 100644 --- a/helper/flag-slice/flag.go +++ b/helper/flag-slice/flag.go @@ -11,6 +11,6 @@ func (s *StringFlag) String() string { } func (s *StringFlag) Set(value string) error { - *s = append(*s, value) + *s = append(*s, strings.Split(value, ",")...) return nil } diff --git a/helper/flag-slice/flag_test.go b/helper/flag-slice/flag_test.go index f72e1d960..61d8682b2 100644 --- a/helper/flag-slice/flag_test.go +++ b/helper/flag-slice/flag_test.go @@ -14,6 +14,8 @@ func TestStringFlag_implements(t *testing.T) { } } +// TestStringFlagSet tests for setting the same flag more than once on the CLI +// like: blah -flag foo -flag bar func TestStringFlagSet(t *testing.T) { sv := new(StringFlag) err := sv.Set("foo") @@ -31,3 +33,18 @@ func TestStringFlagSet(t *testing.T) { t.Fatalf("Bad: %#v", sv) } } + +// TestMultiStringFlag tests for setting the same flag using a comma-separated +// list of items like: blah -flag=foo,bar +func TestMultiStringFlag(t *testing.T) { + sv := new(StringFlag) + err := sv.Set("chocolate,vanilla") + if err != nil { + t.Fatalf("err :%s", err) + } + + expected := []string{"chocolate", "vanilla"} + if !reflect.DeepEqual([]string(*sv), expected) { + t.Fatalf("Expected: %#v, found: %#v", expected, sv) + } +}