diff --git a/time.go b/time.go index dc024807..3dee4247 100644 --- a/time.go +++ b/time.go @@ -48,7 +48,13 @@ func (d *timeValue) Type() string { return "time" } -func (d *timeValue) String() string { return d.Time.Format(time.RFC3339Nano) } +func (d *timeValue) String() string { + if d.Time.IsZero() { + return "" + } else { + return d.Time.Format(time.RFC3339Nano) + } +} // GetTime return the time value of a flag with the given name func (f *FlagSet) GetTime(name string) (time.Time, error) { diff --git a/time_test.go b/time_test.go index 46a5ada7..62d9a799 100644 --- a/time_test.go +++ b/time_test.go @@ -2,13 +2,14 @@ package pflag import ( "fmt" + "strings" "testing" "time" ) func setUpTimeVar(t *time.Time, formats []string) *FlagSet { f := NewFlagSet("test", ContinueOnError) - f.TimeVar(t, "time", time.Time{}, formats, "Time") + f.TimeVar(t, "time", *t, formats, "Time") return f } @@ -60,3 +61,28 @@ func TestTime(t *testing.T) { } } } + +func usageForTimeFlagSet(t *testing.T, timeVar time.Time) string { + t.Helper() + formats := []string{time.RFC3339Nano, time.RFC1123Z} + f := setUpTimeVar(&timeVar, formats) + if err := f.Parse([]string{}); err != nil { + t.Fatalf("expected success, got %q", err) + } + return f.FlagUsages() +} + +func TestTimeDefaultZero(t *testing.T) { + usage := usageForTimeFlagSet(t, time.Time{}) + if strings.Contains(usage, "default") { + t.Errorf("expected no default value in usage, got %q", usage) + } +} + +func TestTimeDefaultNonZero(t *testing.T) { + timeVar := time.Date(2025, 1, 1, 1, 1, 1, 0, time.UTC) + usage := usageForTimeFlagSet(t, timeVar) + if !strings.Contains(usage, "default") || !strings.Contains(usage, "2025") { + t.Errorf("expected default value in usage, got %q", usage) + } +}