diff --git a/parse.go b/parse.go index c959656..b08a298 100644 --- a/parse.go +++ b/parse.go @@ -322,6 +322,11 @@ func setSlice(dest reflect.Value, values []string) error { elem = elem.Elem() } + // Truncate the dest slice in case default values exist + if !dest.IsNil() { + dest.SetLen(0) + } + for _, s := range values { v := reflect.New(elem) if err := setScalar(v.Elem(), s); err != nil { diff --git a/parse_test.go b/parse_test.go index 964c9a7..8ee6a79 100644 --- a/parse_test.go +++ b/parse_test.go @@ -250,6 +250,19 @@ func TestMultipleWithEq(t *testing.T) { assert.Equal(t, []string{"x"}, args.Bar) } +func TestMultipleWithDefault(t *testing.T) { + var args struct { + Foo []int + Bar []string + } + args.Foo = []int{42} + args.Bar = []string{"foo"} + err := parse("--foo 1 2 3 --bar x y z", &args) + require.NoError(t, err) + assert.Equal(t, []int{1, 2, 3}, args.Foo) + assert.Equal(t, []string{"x", "y", "z"}, args.Bar) +} + func TestExemptField(t *testing.T) { var args struct { Foo string