diff options
| -rw-r--r-- | string_slice.go | 8 | ||||
| -rw-r--r-- | string_slice_test.go | 20 |
2 files changed, 27 insertions, 1 deletions
diff --git a/string_slice.go b/string_slice.go index 0b7ddfe..b53648b 100644 --- a/string_slice.go +++ b/string_slice.go @@ -1,6 +1,7 @@ package pflag import ( + "encoding/csv" "fmt" "strings" ) @@ -21,7 +22,12 @@ func newStringSliceValue(val []string, p *[]string) *stringSliceValue { } func (s *stringSliceValue) Set(val string) error { - v := strings.Split(val, ",") + stringReader := strings.NewReader(val) + csvReader := csv.NewReader(stringReader) + v, err := csvReader.Read() + if err != nil { + return err + } if !s.changed { *s.value = v } else { diff --git a/string_slice_test.go b/string_slice_test.go index 97602de..c7fdc70 100644 --- a/string_slice_test.go +++ b/string_slice_test.go @@ -139,3 +139,23 @@ func TestSSCalledTwice(t *testing.T) { } } } + +func TestSSWithComma(t *testing.T) { + var ss []string + f := setUpSSFlagSet(&ss) + + in := []string{`"one,two"`, `"three"`} + expected := []string{"one,two", "three"} + argfmt := "--ss=%s" + arg1 := fmt.Sprintf(argfmt, in[0]) + arg2 := fmt.Sprintf(argfmt, in[1]) + err := f.Parse([]string{arg1, arg2}) + if err != nil { + t.Fatal("expected no error; got", err) + } + for i, v := range ss { + if expected[i] != v { + t.Fatalf("expected ss[%d] to be %s but got: %s", i, expected[i], v) + } + } +} |
