package main import ( "testing" "time" ) func TestParse(t *testing.T) { now := time.Now() examples := []struct { Input string Result time.Time }{ {"today", now}, {"tomorrow", now.AddDate(0, 0, 1)}, {"tomorrow at 3am", truncateHours(now).AddDate(0, 0, 1).Add(3 * time.Hour)}, {"in 3 days", now.AddDate(0, 0, 3)}, {"in a month", now.AddDate(0, 1, 0)}, {"in 3 months", now.AddDate(0, 3, 0)}, {"next week", now.AddDate(0, 0, 7)}, {"next month", now.AddDate(0, 1, 0)}, {"in two weeks", now.AddDate(0, 0, 2*7)}, {"in 3 weeks", now.AddDate(0, 0, 3*7)}, {"2016-09-28", time.Date(2016, 9, 28, 0, 0, 0, 0, time.UTC)}, {"3pm", truncateHours(now).Add(15 * time.Hour)}, {"3 pm", truncateHours(now).Add(15 * time.Hour)}, {"in 4 days at 10 pm", truncateHours(now).AddDate(0, 0, 4).Add(22 * time.Hour)}, } for _, example := range examples { res, err := parseTimeRelative(example.Input, now) if err != nil { t.Errorf("parse '%s': unexpected error: %s", err) } if !res.Equal(example.Result) { t.Errorf("parse '%s': %s != %s", example.Input, res, example.Result) } } }