Skip to content

Commit f6f9df4

Browse files
committed
parser/gotest: Create interface for reading lines with metadata
1 parent 27ad87e commit f6f9df4

File tree

3 files changed

+22
-10
lines changed

3 files changed

+22
-10
lines changed

parser/gotest/gotest.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,10 +133,10 @@ func (p *Parser) Parse(r io.Reader) (gtr.Report, error) {
133133
return p.parse(reader.NewLimitedLineReader(r, maxLineSize))
134134
}
135135

136-
func (p *Parser) parse(r *reader.LimitedLineReader) (gtr.Report, error) {
136+
func (p *Parser) parse(r reader.LineReader) (gtr.Report, error) {
137137
p.events = nil
138138
for {
139-
line, err := r.ReadLine()
139+
line, _, err := r.ReadLine()
140140
if err == io.EOF {
141141
break
142142
} else if err != nil {

parser/gotest/internal/reader/reader.go

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,16 @@ import (
66
"io"
77
)
88

9+
// LineReader is an interface to read lines with optional Metadata.
10+
type LineReader interface {
11+
ReadLine() (string, *Metadata, error)
12+
}
13+
14+
// Metadata contains metadata that belongs to a line.
15+
type Metadata struct {
16+
Package string
17+
}
18+
919
// LimitedLineReader reads lines from an io.Reader object with a configurable
1020
// line size limit. Lines exceeding the limit will be truncated, but read
1121
// completely from the underlying io.Reader.
@@ -14,6 +24,8 @@ type LimitedLineReader struct {
1424
limit int
1525
}
1626

27+
var _ LineReader = &LimitedLineReader{}
28+
1729
// NewLimitedLineReader returns a LimitedLineReader to read lines from r with a
1830
// maximum line size of limit.
1931
func NewLimitedLineReader(r io.Reader, limit int) *LimitedLineReader {
@@ -23,14 +35,14 @@ func NewLimitedLineReader(r io.Reader, limit int) *LimitedLineReader {
2335
// ReadLine returns the next line from the underlying reader. The length of the
2436
// line will not exceed the configured limit. ReadLine either returns a line or
2537
// it returns an error, never both.
26-
func (r *LimitedLineReader) ReadLine() (string, error) {
38+
func (r *LimitedLineReader) ReadLine() (string, *Metadata, error) {
2739
line, isPrefix, err := r.r.ReadLine()
2840
if err != nil {
29-
return "", err
41+
return "", nil, err
3042
}
3143

3244
if !isPrefix {
33-
return string(line), nil
45+
return string(line), nil, nil
3446
}
3547

3648
// Line is incomplete, keep reading until we reach the end of the line.
@@ -39,7 +51,7 @@ func (r *LimitedLineReader) ReadLine() (string, error) {
3951
for isPrefix {
4052
line, isPrefix, err = r.r.ReadLine()
4153
if err != nil {
42-
return "", err
54+
return "", nil, err
4355
}
4456

4557
if buf.Len() >= r.limit {
@@ -54,5 +66,5 @@ func (r *LimitedLineReader) ReadLine() (string, error) {
5466
if buf.Len() > r.limit {
5567
buf.Truncate(r.limit)
5668
}
57-
return buf.String(), nil
69+
return buf.String(), nil, nil
5870
}

parser/gotest/internal/reader/reader_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ func TestLimitedLineReader(t *testing.T) {
3434
input := strings.NewReader(strings.Join([]string{line1, line2}, "\n"))
3535
r := NewLimitedLineReader(input, testingLimit)
3636

37-
got, err := r.ReadLine()
37+
got, _, err := r.ReadLine()
3838
if err != nil {
3939
t.Fatalf("ReadLine() returned error %v", err)
4040
}
@@ -47,7 +47,7 @@ func TestLimitedLineReader(t *testing.T) {
4747
t.Fatalf("ReadLine() returned incorrect line, got len %d want len %d", len(got), len(want))
4848
}
4949

50-
got, err = r.ReadLine()
50+
got, _, err = r.ReadLine()
5151
if err != nil {
5252
t.Fatalf("ReadLine() returned error %v", err)
5353
}
@@ -56,7 +56,7 @@ func TestLimitedLineReader(t *testing.T) {
5656
t.Fatalf("ReadLine() returned incorrect line, got len %d want len %d", len(got), len(want))
5757
}
5858

59-
got, err = r.ReadLine()
59+
got, _, err = r.ReadLine()
6060
if err != io.EOF {
6161
t.Fatalf("ReadLine() returned unexpected error, got %v want %v\n", err, io.EOF)
6262
}

0 commit comments

Comments
 (0)