diff --git a/string_array.go b/string_array.go index 2404407f..6479ac80 100644 --- a/string_array.go +++ b/string_array.go @@ -14,12 +14,17 @@ func newStringArrayValue(val []string, p *[]string) *stringArrayValue { } func (s *stringArrayValue) Set(val string) error { + values := []string{} + if val != "" { + values = append(values, val) + } + if !s.changed { - *s.value = []string{val} - s.changed = true + *s.value = values } else { - *s.value = append(*s.value, val) + *s.value = append(*s.value, values...) } + s.changed = true return nil } diff --git a/string_array_test.go b/string_array_test.go index 3c6d5958..bd280408 100644 --- a/string_array_test.go +++ b/string_array_test.go @@ -45,6 +45,35 @@ func TestEmptySAValue(t *testing.T) { if err != nil { t.Fatal("expected no error; got", err) } + if len(sa) != 0 { + t.Fatalf("got sa %v with len=%d but expected length=0", sa, len(sa)) + } + if sa == nil { + t.Fatal("expected sa to be a non-nil empty slice") + } + + getSA, err := f.GetStringArray("sa") + if err != nil { + t.Fatal("got an error from GetStringArray():", err) + } + if len(getSA) != 0 { + t.Fatalf("got sa %v with len=%d but expected length=0", getSA, len(getSA)) + } +} + +func TestEmptySASeparateValue(t *testing.T) { + var sa []string + f := setUpSAFlagSet(&sa) + err := f.Parse([]string{"--sa", ""}) + if err != nil { + t.Fatal("expected no error; got", err) + } + if len(sa) != 0 { + t.Fatalf("got sa %v with len=%d but expected length=0", sa, len(sa)) + } + if sa == nil { + t.Fatal("expected sa to be a non-nil empty slice") + } getSA, err := f.GetStringArray("sa") if err != nil { @@ -55,6 +84,30 @@ func TestEmptySAValue(t *testing.T) { } } +func TestEmptySASeparateValueCommandLine(t *testing.T) { + ResetForTesting(func() {}) + + var sa []string + StringArrayVar(&sa, "sa", []string{}, "Command separated list!") + if err := CommandLine.Parse([]string{"--sa", ""}); err != nil { + t.Fatal("expected no error; got", err) + } + if len(sa) != 0 { + t.Fatalf("got sa %v with len=%d but expected length=0", sa, len(sa)) + } + if sa == nil { + t.Fatal("expected sa to be a non-nil empty slice") + } + + getSA, err := GetCommandLine().GetStringArray("sa") + if err != nil { + t.Fatal("got an error from GetStringArray():", err) + } + if len(getSA) != 0 { + t.Fatalf("got sa %v with len=%d but expected length=0", getSA, len(getSA)) + } +} + func TestSADefault(t *testing.T) { var sa []string f := setUpSAFlagSetWithDefault(&sa)