1package parser
2
3import (
4 "testing"
5 "time"
6)
7
8const inputLayout = "02.01.2006"
9const outputLayout = time.RFC822
10
11func getTime(t *testing.T, input string) time.Time {
12 ti, err := time.Parse(outputLayout, input)
13 if err != nil {
14 t.Fatal(err)
15 }
16
17 return ti
18}
19
20func getDur(t *testing.T, input string) time.Duration {
21 d, err := time.ParseDuration(input)
22 if err != nil {
23 t.Fatal(err)
24 }
25
26 return d
27}
28
29func TestParseEntryPositive(t *testing.T) {
30 type TestCase struct {
31 Input string
32 Result *Entry
33 }
34
35 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 }
53
54 parser := NewParser(inputLayout)
55 for _, test := range tests {
56 entry, err := parser.parseEntry(test.Input)
57 if err != nil {
58 t.Fatal(err)
59 }
60
61 if *entry != *test.Result {
62 t.Fatalf("Expected %v - got %v", test.Result, entry)
63 }
64 }
65}