forked from ebhomengo/niki
89 lines
2.8 KiB
Go
89 lines
2.8 KiB
Go
package pflag
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func setUpTimeVar(t *time.Time, formats []string) *FlagSet {
|
|
f := NewFlagSet("test", ContinueOnError)
|
|
f.TimeVar(t, "time", *t, formats, "Time")
|
|
return f
|
|
}
|
|
|
|
func TestTime(t *testing.T) {
|
|
testCases := []struct {
|
|
input string
|
|
success bool
|
|
expected time.Time
|
|
}{
|
|
{"2022-01-01T01:01:01+00:00", true, time.Date(2022, 1, 1, 1, 1, 1, 0, time.UTC)},
|
|
{" 2022-01-01T01:01:01+00:00", true, time.Date(2022, 1, 1, 1, 1, 1, 0, time.UTC)},
|
|
{"2022-01-01T01:01:01+00:00 ", true, time.Date(2022, 1, 1, 1, 1, 1, 0, time.UTC)},
|
|
{"2022-01-01T01:01:01+02:00", true, time.Date(2022, 1, 1, 1, 1, 1, 0, time.FixedZone("UTC+2", 2*60*60))},
|
|
{"2022-01-01T01:01:01.01+02:00", true, time.Date(2022, 1, 1, 1, 1, 1, 10000000, time.FixedZone("UTC+2", 2*60*60))},
|
|
{"Sat, 01 Jan 2022 01:01:01 +0000", true, time.Date(2022, 1, 1, 1, 1, 1, 0, time.UTC)},
|
|
{"Sat, 01 Jan 2022 01:01:01 +0200", true, time.Date(2022, 1, 1, 1, 1, 1, 0, time.FixedZone("UTC+2", 2*60*60))},
|
|
{"Sat, 01 Jan 2022 01:01:01 +0000", true, time.Date(2022, 1, 1, 1, 1, 1, 0, time.UTC)},
|
|
{"", false, time.Time{}},
|
|
{"not a date", false, time.Time{}},
|
|
{"2022-01-01 01:01:01", false, time.Time{}},
|
|
{"2022-01-01T01:01:01", false, time.Time{}},
|
|
{"01 Jan 2022 01:01:01 +0000", false, time.Time{}},
|
|
{"Sat, 01 Jan 2022 01:01:01", false, time.Time{}},
|
|
}
|
|
|
|
for i := range testCases {
|
|
var timeVar time.Time
|
|
formats := []string{time.RFC3339Nano, time.RFC1123Z}
|
|
f := setUpTimeVar(&timeVar, formats)
|
|
|
|
tc := &testCases[i]
|
|
|
|
arg := fmt.Sprintf("--time=%s", tc.input)
|
|
err := f.Parse([]string{arg})
|
|
if err != nil && tc.success == true {
|
|
t.Errorf("expected success, got %q", err)
|
|
continue
|
|
} else if err == nil && tc.success == false {
|
|
t.Errorf("expected failure")
|
|
continue
|
|
} else if tc.success {
|
|
timeResult, err := f.GetTime("time")
|
|
if err != nil {
|
|
t.Errorf("Got error trying to fetch the Time flag: %v", err)
|
|
}
|
|
if !timeResult.Equal(tc.expected) {
|
|
t.Errorf("expected %q, got %q", tc.expected.Format(time.RFC3339Nano), timeVar.Format(time.RFC3339Nano))
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
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)
|
|
}
|
|
}
|