diff --git a/parser/gotest/report_builder.go b/parser/gotest/report_builder.go index d53b323..bb4676c 100644 --- a/parser/gotest/report_builder.go +++ b/parser/gotest/report_builder.go @@ -164,7 +164,16 @@ func (b *reportBuilder) CreatePackage(packageName, newPackageName, result string delete(b.packageBuilders, packageName) pb.output.SetActiveID(0) + // If the packageBuilder is empty, we never received any events for this + // package so there's no need to continue. if pb.IsEmpty() { + // However, we should at least report an error if the result says we + // failed. + if parseResult(result) == gtr.Fail { + pkg.RunError = gtr.Error{ + Name: newPackageName, + } + } return pkg } diff --git a/parser/gotest/report_builder_test.go b/parser/gotest/report_builder_test.go index 99adfca..ac3ed53 100644 --- a/parser/gotest/report_builder_test.go +++ b/parser/gotest/report_builder_test.go @@ -349,3 +349,31 @@ func TestGroupBenchmarksByName(t *testing.T) { }) } } + +func TestReportFailedSummary(t *testing.T) { + events := []Event{ + {Type: "summary", Result: "FAIL", Name: "package/name", Duration: 1 * time.Millisecond}, + } + want := gtr.Report{ + Packages: []gtr.Package{ + { + Name: "package/name", + Duration: 1 * time.Millisecond, + Timestamp: testTimestamp, + RunError: gtr.Error{ + Name: "package/name", + }, + }, + }, + } + + rb := newReportBuilder() + rb.timestampFunc = testTimestampFunc + for _, ev := range events { + rb.ProcessEvent(ev) + } + got := rb.Build() + if diff := cmp.Diff(want, got); diff != "" { + t.Errorf("Incorrect report created, diff (-want, +got):\n%v\n", diff) + } +}