parser/gotest,gtr: Move Event type to package gtr

This commit is contained in:
Joël Stemmer 2018-06-09 00:04:33 +01:00
parent 72cd8b3697
commit ff2fc90eeb
5 changed files with 179 additions and 173 deletions

View File

@ -1,3 +1,20 @@
package gtr
// TODO: define gtop.Event here for easy re-use across different parser
import "time"
// TODO: provide some common types, or have a custom type (e.g.
// identifier:type, where identifier is a unique identifier for a particular
// parser.)
// Event is a single event in a test or benchmark.
type Event struct {
Type string
Name string
Result string
Duration time.Duration
Data string
Indent int
CovPct float64
CovPackages []string
}

View File

@ -7,7 +7,6 @@ import (
"strings"
"time"
"github.com/jstemmer/go-junit-report/v2/pkg/parser/gotest"
"github.com/jstemmer/go-junit-report/v2/pkg/junit"
)
@ -68,7 +67,7 @@ type Test struct {
}
// FromEvents creates a Report from the given list of events.
func FromEvents(events []gotest.Event) Report {
func FromEvents(events []Event) Report {
report := NewReportBuilder()
for _, ev := range events {
switch ev.Type {

View File

@ -4,23 +4,21 @@ import (
"testing"
"time"
"github.com/jstemmer/go-junit-report/v2/pkg/parser/gotest"
"github.com/google/go-cmp/cmp"
)
func TestFromEvents(t *testing.T) {
events := []gtop.Event{
{Type: "run_test", Id: 1, Name: "TestOne"},
events := []Event{
{Type: "run_test", Name: "TestOne"},
{Type: "output", Data: "\tHello"},
{Type: "end_test", Id: 1, Name: "TestOne", Result: "PASS", Duration: 1 * time.Millisecond},
{Type: "end_test", Name: "TestOne", Result: "PASS", Duration: 1 * time.Millisecond},
{Type: "status", Result: "PASS"},
{Type: "run_test", Id: 2, Name: "TestSkip"},
{Type: "end_test", Id: 2, Name: "TestSkip", Result: "SKIP", Duration: 1 * time.Millisecond},
{Type: "run_test", Name: "TestSkip"},
{Type: "end_test", Name: "TestSkip", Result: "SKIP", Duration: 1 * time.Millisecond},
{Type: "summary", Result: "ok", Name: "package/name", Duration: 1 * time.Millisecond},
{Type: "run_test", Id: 3, Name: "TestOne"},
{Type: "run_test", Name: "TestOne"},
{Type: "output", Data: "\tfile_test.go:10: error"},
{Type: "end_test", Id: 3, Name: "TestOne", Result: "FAIL", Duration: 1 * time.Millisecond},
{Type: "end_test", Name: "TestOne", Result: "FAIL", Duration: 1 * time.Millisecond},
{Type: "status", Result: "FAIL"},
{Type: "summary", Result: "FAIL", Name: "package/name2", Duration: 1 * time.Millisecond},
}

View File

@ -9,20 +9,10 @@ import (
"strconv"
"strings"
"time"
"github.com/jstemmer/go-junit-report/v2/pkg/gtr"
)
type Event struct {
Type string
Name string
Result string
Duration time.Duration
Data string
Indent int
CovPct float64
CovPackages []string
}
var (
regexEndTest = regexp.MustCompile(`((?: )*)--- (PASS|FAIL|SKIP): ([^ ]+) \((\d+\.\d+)(?: seconds|s)\)`)
regexStatus = regexp.MustCompile(`^(PASS|FAIL|SKIP)$`)
@ -33,7 +23,7 @@ var (
)
// Parse parses Go test output from the given io.Reader r.
func Parse(r io.Reader) ([]Event, error) {
func Parse(r io.Reader) ([]gtr.Event, error) {
p := &parser{}
s := bufio.NewScanner(r)
@ -48,7 +38,7 @@ func Parse(r io.Reader) ([]Event, error) {
}
type parser struct {
events []Event
events []gtr.Event
}
func (p *parser) parseLine(line string) {
@ -71,20 +61,20 @@ func (p *parser) parseLine(line string) {
}
}
func (p *parser) add(event Event) {
func (p *parser) add(event gtr.Event) {
p.events = append(p.events, event)
}
func (p *parser) runTest(name string) {
p.add(Event{Type: "run_test", Name: name})
p.add(gtr.Event{Type: "run_test", Name: name})
}
func (p *parser) pauseTest(name string) {
p.add(Event{Type: "pause_test", Name: name})
p.add(gtr.Event{Type: "pause_test", Name: name})
}
func (p *parser) contTest(name string) {
p.add(Event{Type: "cont_test", Name: name})
p.add(gtr.Event{Type: "cont_test", Name: name})
}
func (p *parser) endTest(line, indent, result, name, duration string) {
@ -92,7 +82,7 @@ func (p *parser) endTest(line, indent, result, name, duration string) {
p.output(line[:idx])
}
_, n := stripIndent(indent)
p.add(Event{
p.add(gtr.Event{
Type: "end_test",
Name: name,
Result: result,
@ -102,11 +92,11 @@ func (p *parser) endTest(line, indent, result, name, duration string) {
}
func (p *parser) status(result string) {
p.add(Event{Type: "status", Result: result})
p.add(gtr.Event{Type: "status", Result: result})
}
func (p *parser) summary(result, name, duration, data, covpct, packages string) {
p.add(Event{
p.add(gtr.Event{
Type: "summary",
Result: result,
Name: name,
@ -118,7 +108,7 @@ func (p *parser) summary(result, name, duration, data, covpct, packages string)
}
func (p *parser) coverage(percent, packages string) {
p.add(Event{
p.add(gtr.Event{
Type: "coverage",
CovPct: parseCoverage(percent),
CovPackages: parsePackages(packages),
@ -126,7 +116,7 @@ func (p *parser) coverage(percent, packages string) {
}
func (p *parser) output(line string) {
p.add(Event{Type: "output", Data: line})
p.add(gtr.Event{Type: "output", Data: line})
}
func parseSeconds(s string) time.Duration {

View File

@ -6,6 +6,8 @@ import (
"testing"
"time"
"github.com/jstemmer/go-junit-report/v2/pkg/gtr"
"github.com/google/go-cmp/cmp"
)
@ -13,10 +15,10 @@ const testdataRoot = "../../../testdata/"
var tests = []struct {
in string
expected []Event
expected []gtr.Event
}{
{"01-pass",
[]Event{
[]gtr.Event{
{Type: "run_test", Name: "TestZ"},
{Type: "end_test", Name: "TestZ", Result: "PASS", Duration: 60 * time.Millisecond},
{Type: "run_test", Name: "TestA"},
@ -25,7 +27,7 @@ var tests = []struct {
{Type: "summary", Result: "ok", Name: "package/name", Duration: 160 * time.Millisecond},
}},
{"02-fail",
[]Event{
[]gtr.Event{
{Type: "run_test", Name: "TestOne"},
{Type: "end_test", Name: "TestOne", Result: "FAIL", Duration: 20 * time.Millisecond},
{Type: "output", Data: "\tfile_test.go:11: Error message"},
@ -39,7 +41,7 @@ var tests = []struct {
{Type: "summary", Result: "FAIL", Name: "package/name", Duration: 151 * time.Millisecond},
}},
{"03-skip",
[]Event{
[]gtr.Event{
{Type: "run_test", Name: "TestOne"},
{Type: "end_test", Name: "TestOne", Result: "SKIP", Duration: 20 * time.Millisecond},
{Type: "output", Data: "\tfile_test.go:11: Skip message"},
@ -49,7 +51,7 @@ var tests = []struct {
{Type: "summary", Result: "ok", Name: "package/name", Duration: 150 * time.Millisecond},
}},
{"04-go_1_4",
[]Event{
[]gtr.Event{
{Type: "run_test", Name: "TestOne"},
{Type: "end_test", Name: "TestOne", Result: "PASS", Duration: 60 * time.Millisecond},
{Type: "run_test", Name: "TestTwo"},
@ -59,7 +61,7 @@ var tests = []struct {
}},
// Test 05 is skipped, because it was actually testing XML output
{"06-mixed",
[]Event{
[]gtr.Event{
{Type: "run_test", Name: "TestOne"},
{Type: "end_test", Name: "TestOne", Result: "PASS", Duration: 60 * time.Millisecond},
{Type: "run_test", Name: "TestTwo"},
@ -79,7 +81,7 @@ var tests = []struct {
{Type: "summary", Result: "FAIL", Name: "package/name2", Duration: 151 * time.Millisecond},
}},
{"07-compiled_test",
[]Event{
[]gtr.Event{
{Type: "run_test", Name: "TestOne"},
{Type: "end_test", Name: "TestOne", Result: "PASS", Duration: 60 * time.Millisecond},
{Type: "run_test", Name: "TestTwo"},
@ -87,7 +89,7 @@ var tests = []struct {
{Type: "status", Result: "PASS"},
}},
{"08-parallel",
[]Event{
[]gtr.Event{
{Type: "run_test", Name: "TestDoFoo"},
{Type: "run_test", Name: "TestDoFoo2"},
{Type: "end_test", Name: "TestDoFoo", Result: "PASS", Duration: 270 * time.Millisecond},
@ -100,7 +102,7 @@ var tests = []struct {
{Type: "summary", Result: "ok", Name: "package/name", Duration: 440 * time.Millisecond},
}},
{"09-coverage",
[]Event{
[]gtr.Event{
{Type: "run_test", Name: "TestZ"},
{Type: "end_test", Name: "TestZ", Result: "PASS", Duration: 60 * time.Millisecond},
{Type: "run_test", Name: "TestA"},
@ -110,7 +112,7 @@ var tests = []struct {
{Type: "summary", Result: "ok", Name: "package/name", Duration: 160 * time.Millisecond},
}},
{"10-multipkg-coverage",
[]Event{
[]gtr.Event{
{Type: "run_test", Name: "TestA"},
{Type: "end_test", Name: "TestA", Result: "PASS", Duration: 100 * time.Millisecond},
{Type: "run_test", Name: "TestB"},
@ -125,7 +127,7 @@ var tests = []struct {
{Type: "summary", Result: "ok", Name: "package2/bar", Duration: 4200 * time.Millisecond, CovPct: 99.8},
}},
{"11-go_1_5",
[]Event{
[]gtr.Event{
{Type: "run_test", Name: "TestOne"},
{Type: "end_test", Name: "TestOne", Result: "PASS", Duration: 20 * time.Millisecond},
{Type: "run_test", Name: "TestTwo"},
@ -134,7 +136,7 @@ var tests = []struct {
{Type: "summary", Result: "ok", Name: "package/name", Duration: 50 * time.Millisecond},
}},
{"12-go_1_7",
[]Event{
[]gtr.Event{
{Type: "run_test", Name: "TestOne"},
{Type: "run_test", Name: "TestOne/Child"},
{Type: "run_test", Name: "TestOne/Child#01"},
@ -181,7 +183,7 @@ var tests = []struct {
{Type: "summary", Result: "FAIL", Name: "package/name", Duration: 50 * time.Millisecond},
}},
{"13-syntax-error",
[]Event{
[]gtr.Event{
{Type: "output", Data: "# package/name/failing1"},
{Type: "output", Data: "failing1/failing_test.go:15: undefined: x"},
{Type: "output", Data: "# package/name/failing2"},
@ -204,7 +206,7 @@ var tests = []struct {
{Type: "summary", Result: "FAIL", Name: "package/name/setupfailing1", Data: "[setup failed]"},
}},
{"14-panic",
[]Event{
[]gtr.Event{
{Type: "output", Data: "panic: init"},
{Type: "output", Data: "stacktrace"},
{Type: "summary", Result: "FAIL", Name: "package/panic", Duration: 3 * time.Millisecond},
@ -213,13 +215,13 @@ var tests = []struct {
{Type: "summary", Result: "FAIL", Name: "package/panic2", Duration: 3 * time.Millisecond},
}},
{"15-empty",
[]Event{
[]gtr.Event{
{Type: "output", Data: "testing: warning: no tests to run"},
{Type: "status", Result: "PASS"},
{Type: "summary", Result: "ok", Name: "package/empty", Duration: 1 * time.Millisecond},
}},
{"16-repeated-names",
[]Event{
[]gtr.Event{
{Type: "run_test", Name: "TestRepeat"},
{Type: "end_test", Name: "TestRepeat", Result: "PASS"},
{Type: "run_test", Name: "TestRepeat"},
@ -230,7 +232,7 @@ var tests = []struct {
{Type: "summary", Result: "ok", Name: "package/repeated-names", Duration: 1 * time.Millisecond},
}},
{"17-race",
[]Event{
[]gtr.Event{
{Type: "run_test", Name: "TestRace"},
{Type: "output", Data: "test output"},
{Type: "output", Data: "2 0xc4200153d0"},
@ -273,7 +275,7 @@ var tests = []struct {
{Type: "summary", Result: "FAIL", Name: "race_test", Duration: 15 * time.Millisecond},
}},
{"18-coverpkg",
[]Event{
[]gtr.Event{
{Type: "run_test", Name: "TestA"},
{Type: "end_test", Name: "TestA", Result: "PASS", Duration: 100 * time.Millisecond},
{Type: "run_test", Name: "TestB"},
@ -288,7 +290,7 @@ var tests = []struct {
{Type: "summary", Result: "ok", Name: "package2/bar", Duration: 4200 * time.Millisecond, CovPct: 99.8, CovPackages: []string{"fmt", "encoding/xml"}},
}},
{"19-pass",
[]Event{
[]gtr.Event{
{Type: "run_test", Name: "TestZ"},
{Type: "output", Data: "some inline text"},
{Type: "end_test", Name: "TestZ", Result: "PASS", Duration: 60 * time.Millisecond},
@ -298,7 +300,7 @@ var tests = []struct {
{Type: "summary", Result: "ok", Name: "package/name", Duration: 160 * time.Millisecond},
}},
{"20-parallel",
[]Event{
[]gtr.Event{
{Type: "run_test", Name: "FirstTest"},
{Type: "output", Data: "Message from first"},
{Type: "pause_test", Name: "FirstTest"},
@ -320,14 +322,14 @@ var tests = []struct {
{Type: "summary", Result: "FAIL", Name: "pkg/parallel", Duration: 3010 * time.Millisecond},
}},
{"21-cached",
[]Event{
[]gtr.Event{
{Type: "run_test", Name: "TestOne"},
{Type: "end_test", Name: "TestOne", Result: "PASS"},
{Type: "status", Result: "PASS"},
{Type: "summary", Result: "ok", Name: "package/one", Data: "(cached)"},
}},
{"22-whitespace",
[]Event{}},
[]gtr.Event{}},
}
func TestParse(t *testing.T) {
@ -338,7 +340,7 @@ func TestParse(t *testing.T) {
}
}
func testParse(t *testing.T, name string, expected []Event) {
func testParse(t *testing.T, name string, expected []gtr.Event) {
if len(expected) == 0 {
t.SkipNow()
return