-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain_test.go
More file actions
124 lines (110 loc) · 2.71 KB
/
main_test.go
File metadata and controls
124 lines (110 loc) · 2.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
package main
import (
"bufio"
"bytes"
"fmt"
"io"
"strings"
"testing"
"time"
)
func TestScanId(t *testing.T) {
testCases := []struct {
input string
timestamp time.Time
hasError bool
}{
{
input: "",
hasError: true,
},
{
input: "foo\n",
hasError: true,
},
{
input: "2006-01-02T15:04:05Z\n",
timestamp: time.Date(2006, time.January, 2, 15, 04, 05, 0, time.UTC),
},
}
for index, tc := range testCases {
t.Run(fmt.Sprintf("%d", index), func(t *testing.T) {
var ts, err = scanId(bufio.NewReader(strings.NewReader(tc.input)))
if tc.hasError != (err != nil) {
t.Fatalf("bad error: %q", err)
}
if ts != tc.timestamp {
t.Fatalf("bad timestamp %q != %q", ts, tc.timestamp)
}
})
}
}
func TestScanPost(t *testing.T) {
var reader = bufio.NewReader(strings.NewReader("foo\n\f\nextra"))
var b, err = scanPost(reader)
if err != nil {
t.Fatalf("bad error: %q", err)
}
{
var expected = []byte{'f', 'o', 'o', '\n'}
if !bytes.Equal(b, expected) {
t.Fatalf("bad buffer: %q != %q", b, expected)
}
}
{
var line, err = reader.ReadSlice(0) // read what's left
if err != io.EOF {
t.Fatalf("bad error: %q", err)
}
var expected = []byte{'e', 'x', 't', 'r', 'a'}
if !bytes.Equal(line, expected) {
t.Fatalf("bad left-over data: %q", line)
}
}
}
const examplePost = "2011-12-30T21:00:00Z\n\nLet's talk\n\f\n"
func TestParsePost(t *testing.T) {
var reader = bufio.NewReader(strings.NewReader(examplePost))
var p, err = parsePost(reader)
if err != nil {
t.Fatalf("bad error: %q", err)
}
var expected = time.Date(2011, 12, 30, 21, 0, 0, 0, time.UTC)
if !p.Timestamp.Equal(expected) {
t.Fatalf("bad timestamp: %q != %q", p.Timestamp, expected)
}
if _, err = reader.ReadByte(); err != io.EOF {
t.Fatalf("bad error at the end: %q != %q", err, io.EOF)
}
}
func TestParseLog(t *testing.T) {
var logText = ("2011-12-30T21:00:00Z\n\nLet's talk\n\f\n" +
"2011-12-31T21:00:00Z\n\nLet's talk\n\f\n")
var results = []Post{
{
Timestamp: time.Date(2011, 12, 30, 21, 00, 00, 0, time.UTC),
Body: []byte("Let's talk\n"),
},
{
Timestamp: time.Date(2011, 12, 31, 21, 00, 00, 0, time.UTC),
Body: []byte("Let's talk\n"),
},
}
var reader = bufio.NewReader(strings.NewReader(logText))
var log, err = parseLog(reader)
if err != io.EOF {
t.Fatalf("bad error: %q", err)
}
for index, expected := range results {
var p = log[index]
if p.Timestamp != expected.Timestamp {
t.Fatalf("%q != %q", p.Timestamp, expected.Timestamp)
}
if !bytes.Equal(p.Body, expected.Body) {
t.Fatalf("%q != %q", p.Body, expected.Body)
}
}
if _, err = reader.ReadByte(); err != io.EOF {
t.Fatalf("bad error at the end: %q != %q", err, io.EOF)
}
}