From d25dd242b134a8ca037812921a93cac978b86fd5 Mon Sep 17 00:00:00 2001 From: Tomas Aschan <1550920+tomasaschan@users.noreply.github.com> Date: Fri, 29 Aug 2025 22:33:29 +0200 Subject: Reset args on re-parse even if empty This ensures fs.Args() returns the expected thing after every parse. Fixes #439. --- flag_test.go | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to 'flag_test.go') diff --git a/flag_test.go b/flag_test.go index 2df3ea2..31491c8 100644 --- a/flag_test.go +++ b/flag_test.go @@ -656,6 +656,46 @@ func TestFlagSetParse(t *testing.T) { testParse(NewFlagSet("test", ContinueOnError), t) } +func TestParseRepeated(t *testing.T) { + fs := NewFlagSet("test repeated", ContinueOnError) + + t.Run("first parse", func(t *testing.T) { + err := fs.Parse([]string{"foo", "bar"}) + if err != nil { + t.Fatal("expected no error, got ", err) + } + + argsAfterFirst := fs.Args() + if !reflect.DeepEqual(argsAfterFirst, []string{"foo", "bar"}) { + t.Fatalf("expected args [foo bar], got %v", argsAfterFirst) + } + }) + + t.Run("re-parse with fewer args", func(t *testing.T) { + err := fs.Parse([]string{"baz"}) + if err != nil { + t.Fatal("expected no error, got ", err) + } + + argsAfterSecond := fs.Args() + if !reflect.DeepEqual(argsAfterSecond, []string{"baz"}) { + t.Fatalf("expected args [baz], got %v", argsAfterSecond) + } + }) + + t.Run("re-parse with no args", func(t *testing.T) { + err := fs.Parse([]string{}) + if err != nil { + t.Fatal("expected no error, got ", err) + } + + argsAfterThird := fs.Args() + if !reflect.DeepEqual(argsAfterThird, []string{}) { + t.Fatalf("expected args [], got %v", argsAfterThird) + } + }) +} + func TestChangedHelper(t *testing.T) { f := NewFlagSet("changedtest", ContinueOnError) f.Bool("changed", false, "changed bool") -- cgit v1.2.3