package main import ( "testing" "time" ) var now = time.Date(2017, 11, 10, 7, 8, 9, 1234, time.UTC) var partTimeTests = []struct { in string expected uint64 errExpected bool }{ { "12345", uint64(12345), false, }, { "-0s", uint64(now.Unix()), false, }, { "-1s", uint64(time.Date(2017, 11, 10, 7, 8, 8, 1234, time.UTC).Unix()), false, }, { "-2h", uint64(time.Date(2017, 11, 10, 5, 8, 9, 1234, time.UTC).Unix()), false, }, { "-3d", uint64(time.Date(2017, 11, 7, 7, 8, 9, 1234, time.UTC).Unix()), false, }, { "-4w", uint64(time.Date(2017, 10, 13, 7, 8, 9, 1234, time.UTC).Unix()), false, }, { "-5M", uint64(now.Unix() - 30.44*5*24*60*60), false, }, { "-6y", uint64(now.Unix() - 365.25*6*24*60*60), false, }, { "-999999999999999999s", uint64(now.Unix() - 999999999999999999), false, }, { "-9999999999999999991s", 0, true, }, { "-7z", 0, true, }, } // Test that parsing absolute and relative times works. func TestParseTime(t *testing.T) { for _, test := range partTimeTests { actual, err := parseTime(test.in, now) if test.errExpected == (err == nil) { t.Fatalf("unexpected error for %s:\n%v\n", test.in, err) } if actual != test.expected { t.Fatalf( "for %s actual and expected do not match:\n%d\n%d\n", test.in, actual, test.expected, ) } } }