Skip to content

Commit b9c16fa

Browse files
authored
Merge pull request #444 from spf13/reset-args-even-if-empty
Reset args on re-parse even if empty
2 parents 40abc49 + d25dd24 commit b9c16fa

File tree

2 files changed

+42
-2
lines changed

2 files changed

+42
-2
lines changed

flag.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1157,12 +1157,12 @@ func (f *FlagSet) Parse(arguments []string) error {
11571157
}
11581158
f.parsed = true
11591159

1160+
f.args = make([]string, 0, len(arguments))
1161+
11601162
if len(arguments) == 0 {
11611163
return nil
11621164
}
11631165

1164-
f.args = make([]string, 0, len(arguments))
1165-
11661166
set := func(flag *Flag, value string) error {
11671167
return f.Set(flag.Name, value)
11681168
}

flag_test.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -656,6 +656,46 @@ func TestFlagSetParse(t *testing.T) {
656656
testParse(NewFlagSet("test", ContinueOnError), t)
657657
}
658658

659+
func TestParseRepeated(t *testing.T) {
660+
fs := NewFlagSet("test repeated", ContinueOnError)
661+
662+
t.Run("first parse", func(t *testing.T) {
663+
err := fs.Parse([]string{"foo", "bar"})
664+
if err != nil {
665+
t.Fatal("expected no error, got ", err)
666+
}
667+
668+
argsAfterFirst := fs.Args()
669+
if !reflect.DeepEqual(argsAfterFirst, []string{"foo", "bar"}) {
670+
t.Fatalf("expected args [foo bar], got %v", argsAfterFirst)
671+
}
672+
})
673+
674+
t.Run("re-parse with fewer args", func(t *testing.T) {
675+
err := fs.Parse([]string{"baz"})
676+
if err != nil {
677+
t.Fatal("expected no error, got ", err)
678+
}
679+
680+
argsAfterSecond := fs.Args()
681+
if !reflect.DeepEqual(argsAfterSecond, []string{"baz"}) {
682+
t.Fatalf("expected args [baz], got %v", argsAfterSecond)
683+
}
684+
})
685+
686+
t.Run("re-parse with no args", func(t *testing.T) {
687+
err := fs.Parse([]string{})
688+
if err != nil {
689+
t.Fatal("expected no error, got ", err)
690+
}
691+
692+
argsAfterThird := fs.Args()
693+
if !reflect.DeepEqual(argsAfterThird, []string{}) {
694+
t.Fatalf("expected args [], got %v", argsAfterThird)
695+
}
696+
})
697+
}
698+
659699
func TestChangedHelper(t *testing.T) {
660700
f := NewFlagSet("changedtest", ContinueOnError)
661701
f.Bool("changed", false, "changed bool")

0 commit comments

Comments
 (0)