mirror of
https://github.com/jstemmer/go-junit-report.git
synced 2025-05-20 10:54:28 -05:00
gtr: Fix prefix trimming of test output
This commit is contained in:
parent
506a968ade
commit
80a9b62b38
@ -67,13 +67,14 @@ func (b *ReportBuilder) ContinueTest(name string) {
|
|||||||
b.lastId = b.findTest(name)
|
b.lastId = b.findTest(name)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *ReportBuilder) EndTest(name, result string, duration time.Duration) {
|
func (b *ReportBuilder) EndTest(name, result string, duration time.Duration, level int) {
|
||||||
id := b.findTest(name)
|
id := b.findTest(name)
|
||||||
b.lastId = id
|
b.lastId = id
|
||||||
|
|
||||||
t := b.tests[id]
|
t := b.tests[id]
|
||||||
t.Result = parseResult(result)
|
t.Result = parseResult(result)
|
||||||
t.Duration = duration
|
t.Duration = duration
|
||||||
|
t.Level = level
|
||||||
b.tests[id] = t
|
b.tests[id] = t
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -244,7 +245,6 @@ func parseResult(r string) Result {
|
|||||||
case "SKIP":
|
case "SKIP":
|
||||||
return Skip
|
return Skip
|
||||||
default:
|
default:
|
||||||
fmt.Printf("unknown result: %q\n", r)
|
|
||||||
return Unknown
|
return Unknown
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -47,6 +47,7 @@ type Test struct {
|
|||||||
Name string
|
Name string
|
||||||
Duration time.Duration
|
Duration time.Duration
|
||||||
Result Result
|
Result Result
|
||||||
|
Level int
|
||||||
Output []string
|
Output []string
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -81,7 +82,7 @@ func FromEvents(events []Event, packageName string) Report {
|
|||||||
case "cont_test":
|
case "cont_test":
|
||||||
report.ContinueTest(ev.Name)
|
report.ContinueTest(ev.Name)
|
||||||
case "end_test":
|
case "end_test":
|
||||||
report.EndTest(ev.Name, ev.Result, ev.Duration)
|
report.EndTest(ev.Name, ev.Result, ev.Duration, ev.Indent)
|
||||||
case "benchmark":
|
case "benchmark":
|
||||||
report.Benchmark(ev.Name, ev.Iterations, ev.NsPerOp, ev.MBPerSec, ev.BytesPerOp, ev.AllocsPerOp)
|
report.Benchmark(ev.Name, ev.Iterations, ev.NsPerOp, ev.MBPerSec, ev.BytesPerOp, ev.AllocsPerOp)
|
||||||
case "status":
|
case "status":
|
||||||
@ -130,11 +131,11 @@ func JUnit(report Report) junit.Testsuites {
|
|||||||
if test.Result == Fail {
|
if test.Result == Fail {
|
||||||
tc.Failure = &junit.Result{
|
tc.Failure = &junit.Result{
|
||||||
Message: "Failed",
|
Message: "Failed",
|
||||||
Data: formatOutput(test.Output),
|
Data: formatOutput(test.Output, test.Level),
|
||||||
}
|
}
|
||||||
} else if test.Result == Skip {
|
} else if test.Result == Skip {
|
||||||
tc.Skipped = &junit.Result{
|
tc.Skipped = &junit.Result{
|
||||||
Message: formatOutput(test.Output),
|
Message: formatOutput(test.Output, test.Level),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -196,17 +197,30 @@ func JUnit(report Report) junit.Testsuites {
|
|||||||
return suites
|
return suites
|
||||||
}
|
}
|
||||||
|
|
||||||
func formatOutput(output []string) string {
|
func formatOutput(output []string, level int) string {
|
||||||
var lines []string
|
var lines []string
|
||||||
for _, line := range output {
|
for _, line := range output {
|
||||||
// TODO: should this change depending on subtest level?
|
lines = append(lines, trimOutputPrefix(line, level))
|
||||||
line = strings.TrimPrefix(line, " ")
|
|
||||||
line = strings.TrimPrefix(line, "\t")
|
|
||||||
lines = append(lines, line)
|
|
||||||
}
|
}
|
||||||
return strings.Join(lines, "\n")
|
return strings.Join(lines, "\n")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func trimOutputPrefix(line string, level int) string {
|
||||||
|
// We only want to trim the whitespace prefix if it was part of the test
|
||||||
|
// output. Test output is usually prefixed by a series of 4-space indents,
|
||||||
|
// so we'll check for that to decide whether this output was likely to be
|
||||||
|
// from a test.
|
||||||
|
prefixLen := strings.IndexFunc(line, func(r rune) bool { return r != ' ' })
|
||||||
|
if prefixLen%4 == 0 {
|
||||||
|
// Use the subtest level to trim a consistenly sized prefix from the
|
||||||
|
// output lines.
|
||||||
|
for i := 0; i <= level; i++ {
|
||||||
|
line = strings.TrimPrefix(line, " ")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return strings.TrimPrefix(line, "\t")
|
||||||
|
}
|
||||||
|
|
||||||
func mergeBenchmarks(benchmarks []Benchmark) []Benchmark {
|
func mergeBenchmarks(benchmarks []Benchmark) []Benchmark {
|
||||||
var merged []Benchmark
|
var merged []Benchmark
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user