From 1f1166ebf178838ab1cc0b692a2494d74bc46a61 Mon Sep 17 00:00:00 2001 From: Laurent Demailly Date: Thu, 11 Sep 2025 14:13:40 -0700 Subject: [PATCH] Add test and fix bug in default help/printing of duration --- duration.go | 3 +-- duration_test.go | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/duration.go b/duration.go index 826ef5c..1df93d2 100644 --- a/duration.go +++ b/duration.go @@ -213,9 +213,8 @@ func FlagVar(p *time.Duration, name string, value time.Duration, usage string) { // FlagSet is like [FlagVar] but for the specified flag set. Replacement for [flag.FlagSet.DurationVar]. func FlagSetVar(fs *flag.FlagSet, p *time.Duration, name string, value time.Duration, usage string) { - d := Duration(value) + *p = value fs.Var((*Duration)(p), name, usage) - *p = time.Duration(d) } // NextTime takes a partially parsed time.Time (without date) and returns the time in the future diff --git a/duration_test.go b/duration_test.go index fd3cc2a..198c4b0 100644 --- a/duration_test.go +++ b/duration_test.go @@ -1,8 +1,10 @@ package duration_test import ( + "bytes" "flag" "fmt" + "strings" "testing" "time" @@ -185,3 +187,33 @@ func ExampleFlag() { // After set: 1d1h // After set (dereferenced): 25h0m0s } + +func TestHelpShowsDefault(t *testing.T) { + fs := flag.NewFlagSet("test", flag.ContinueOnError) + var buf bytes.Buffer + fs.SetOutput(&buf) + var d time.Duration + duration.FlagSetVar(fs, &d, "duration", 1*duration.Day+3*time.Hour, "example of duration flag with days support") + // print defaults + fs.PrintDefaults() + // check: + out := buf.String() + if !strings.Contains(out, "(default 1d3h)") { + t.Errorf("expected help to include default 1d3h, got:\n%s", out) + } +} + +func TestHelpNotShowingDefaultZeroValue(t *testing.T) { + fs := flag.NewFlagSet("test", flag.ContinueOnError) + var buf bytes.Buffer + fs.SetOutput(&buf) + var d time.Duration + duration.FlagSetVar(fs, &d, "duration", 0, "example of duration flag with days support") + // print defaults + fs.PrintDefaults() + // check: + out := buf.String() + if strings.Contains(out, "(default") { + t.Errorf("expected help to not include default for zero value, got:\n%s", out) + } +}