mirror of
https://github.com/jstemmer/go-junit-report.git
synced 2025-07-06 05:57:54 -05:00
parser/gotest: Create interface for reading lines with metadata
This commit is contained in:
@ -6,6 +6,16 @@ import (
|
||||
"io"
|
||||
)
|
||||
|
||||
// LineReader is an interface to read lines with optional Metadata.
|
||||
type LineReader interface {
|
||||
ReadLine() (string, *Metadata, error)
|
||||
}
|
||||
|
||||
// Metadata contains metadata that belongs to a line.
|
||||
type Metadata struct {
|
||||
Package string
|
||||
}
|
||||
|
||||
// LimitedLineReader reads lines from an io.Reader object with a configurable
|
||||
// line size limit. Lines exceeding the limit will be truncated, but read
|
||||
// completely from the underlying io.Reader.
|
||||
@ -14,6 +24,8 @@ type LimitedLineReader struct {
|
||||
limit int
|
||||
}
|
||||
|
||||
var _ LineReader = &LimitedLineReader{}
|
||||
|
||||
// NewLimitedLineReader returns a LimitedLineReader to read lines from r with a
|
||||
// maximum line size of limit.
|
||||
func NewLimitedLineReader(r io.Reader, limit int) *LimitedLineReader {
|
||||
@ -23,14 +35,14 @@ func NewLimitedLineReader(r io.Reader, limit int) *LimitedLineReader {
|
||||
// ReadLine returns the next line from the underlying reader. The length of the
|
||||
// line will not exceed the configured limit. ReadLine either returns a line or
|
||||
// it returns an error, never both.
|
||||
func (r *LimitedLineReader) ReadLine() (string, error) {
|
||||
func (r *LimitedLineReader) ReadLine() (string, *Metadata, error) {
|
||||
line, isPrefix, err := r.r.ReadLine()
|
||||
if err != nil {
|
||||
return "", err
|
||||
return "", nil, err
|
||||
}
|
||||
|
||||
if !isPrefix {
|
||||
return string(line), nil
|
||||
return string(line), nil, nil
|
||||
}
|
||||
|
||||
// Line is incomplete, keep reading until we reach the end of the line.
|
||||
@ -39,7 +51,7 @@ func (r *LimitedLineReader) ReadLine() (string, error) {
|
||||
for isPrefix {
|
||||
line, isPrefix, err = r.r.ReadLine()
|
||||
if err != nil {
|
||||
return "", err
|
||||
return "", nil, err
|
||||
}
|
||||
|
||||
if buf.Len() >= r.limit {
|
||||
@ -54,5 +66,5 @@ func (r *LimitedLineReader) ReadLine() (string, error) {
|
||||
if buf.Len() > r.limit {
|
||||
buf.Truncate(r.limit)
|
||||
}
|
||||
return buf.String(), nil
|
||||
return buf.String(), nil, nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user