1package parser23import (4 "testing"5 "time"6)78const inputLayout = "02.01.2006"9const outputLayout = time.RFC8221011func getTime(t *testing.T, input string) time.Time {12 ti, err := time.Parse(outputLayout, input)13 if err != nil {14 t.Fatal(err)15 }1617 return ti18}1920func getDur(t *testing.T, input string) time.Duration {21 d, err := time.ParseDuration(input)22 if err != nil {23 t.Fatal(err)24 }2526 return d27}2829func TestParseEntryPositive(t *testing.T) {30 type TestCase struct {31 Input string32 Result *Entry33 }3435 tests := []TestCase{36 {37 "24.12.2010 1000 1500 Foobar",38 &Entry{getTime(t, "24 Dec 10 10:00 UTC"), getDur(t, "5h"), "Foobar"},39 },40 {41 "01.05.1992 1012 1013 foo.",42 &Entry{getTime(t, "01 May 92 10:12 UTC"), getDur(t, "1m"), "foo."},43 },44 {45 "13.12.2023 2112 2342 bla",46 &Entry{getTime(t, "13 Dec 23 21:12 UTC"), getDur(t, "2h30m"), "bla"},47 },48 {49 "02.06.2042 1259 2359 foo bar baz",50 &Entry{getTime(t, "02 Jun 42 12:59 UTC"), getDur(t, "11h"), "foo bar baz"},51 },52 }5354 parser := NewParser(inputLayout)55 for _, test := range tests {56 entry, err := parser.parseEntry(test.Input)57 if err != nil {58 t.Fatal(err)59 }6061 if *entry != *test.Result {62 t.Fatalf("Expected %v - got %v", test.Result, entry)63 }64 }65}