package humaninterface_test import ( "testing" "time" "pkg.jfrech.com/brief/humaninterface" ) func TestParse(t *testing.T) { now := time.Date(2023, time.February, 20, 14, 23, 0, 0, time.FixedZone("CET", +1*60*60)) for test, want := range map[string]humaninterface.Timespan{ "today": humaninterface.Timespan{ T0: time.Date(2023, time.February, 20, 0, 0, 0, 0, time.FixedZone("CET", +1*60*60)), T1: time.Date(2023, time.February, 21, 0, 0, 0, 0, time.FixedZone("CET", +1*60*60)), }, "now": humaninterface.Timespan{ T0: time.Date(2023, time.February, 20, 14, 23, 0, 0, time.FixedZone("CET", +1*60*60)), T1: time.Date(2023, time.February, 20, 14, 23, 0, 0, time.FixedZone("CET", +1*60*60)), }, "now--now": humaninterface.Timespan{ T0: time.Date(2023, time.February, 20, 14, 23, 0, 0, time.FixedZone("CET", +1*60*60)), T1: time.Date(2023, time.February, 20, 14, 23, 0, 0, time.FixedZone("CET", +1*60*60)), }, "now-1h--now+2h": humaninterface.Timespan{ T0: time.Date(2023, time.February, 20, 13, 23, 0, 0, time.FixedZone("CET", +1*60*60)), T1: time.Date(2023, time.February, 20, 16, 23, 0, 0, time.FixedZone("CET", +1*60*60)), }, "now~3h": humaninterface.Timespan{ T0: time.Date(2023, time.February, 20, 11, 23, 0, 0, time.FixedZone("CET", +1*60*60)), T1: time.Date(2023, time.February, 20, 17, 23, 0, 0, time.FixedZone("CET", +1*60*60)), }, "now~11s": humaninterface.Timespan{ T0: time.Date(2023, time.February, 20, 14, 23, -11, 0, time.FixedZone("CET", +1*60*60)), T1: time.Date(2023, time.February, 20, 14, 23, +11, 0, time.FixedZone("CET", +1*60*60)), }, "now~3h~11m": humaninterface.Timespan{ T0: time.Date(2023, time.February, 20, 11, 12, 0, 0, time.FixedZone("CET", +1*60*60)), T1: time.Date(2023, time.February, 20, 17, 34, 0, 0, time.FixedZone("CET", +1*60*60)), }, "today+1h": humaninterface.Timespan{ T0: time.Date(2023, time.February, 20, 1, 0, 0, 0, time.FixedZone("CET", +1*60*60)), T1: time.Date(2023, time.February, 21, 1, 0, 0, 0, time.FixedZone("CET", +1*60*60)), }, "today-1h-30m": humaninterface.Timespan{ T0: time.Date(2023, time.February, 20, -1, -30, 0, 0, time.FixedZone("CET", +1*60*60)), T1: time.Date(2023, time.February, 21, -1, -30, 0, 0, time.FixedZone("CET", +1*60*60)), }, "today+1h-1h+1h-60m+3603s": humaninterface.Timespan{ T0: time.Date(2023, time.February, 20, 1, 0, 3, 0, time.FixedZone("CET", +1*60*60)), T1: time.Date(2023, time.February, 21, 1, 0, 3, 0, time.FixedZone("CET", +1*60*60)), }, // TODO allow "today+-5h" "today~5h": humaninterface.Timespan{ T0: time.Date(2023, time.February, 20, -5, 0, 0, 0, time.FixedZone("CET", +1*60*60)), T1: time.Date(2023, time.February, 21, +5, 0, 0, 0, time.FixedZone("CET", +1*60*60)), }, "yesterday": humaninterface.Timespan{ T0: time.Date(2023, time.February, 19, 0, 0, 0, 0, time.FixedZone("CET", +1*60*60)), T1: time.Date(2023, time.February, 20, 0, 0, 0, 0, time.FixedZone("CET", +1*60*60)), }, "yesterday+1h": humaninterface.Timespan{ T0: time.Date(2023, time.February, 19, 1, 0, 0, 0, time.FixedZone("CET", +1*60*60)), T1: time.Date(2023, time.February, 20, 1, 0, 0, 0, time.FixedZone("CET", +1*60*60)), }, } { got, err := humaninterface.Parse(now, test) if err != nil { t.Errorf("test %q: no parse: %v", test, err) continue } if !want.Equal(got) { t.Errorf("test %q:\n want: %v\n got.: %v", test, want, got) } } }