From fe733f96d6d411419949d5b1e3ae0fc8aa167e8b Mon Sep 17 00:00:00 2001 From: Erik Brakkee Date: Fri, 22 Nov 2024 22:42:02 +0100 Subject: [PATCH] simplification and elapsed time now available everywhere. --- cmd/go2junit/go2junit.go | 14 +++++------ cmd/go2junit/output.go | 51 ++++++++++++---------------------------- 2 files changed, 22 insertions(+), 43 deletions(-) diff --git a/cmd/go2junit/go2junit.go b/cmd/go2junit/go2junit.go index 41645d2..1cbaf67 100644 --- a/cmd/go2junit/go2junit.go +++ b/cmd/go2junit/go2junit.go @@ -12,11 +12,11 @@ import ( ) func (t *Test) MarshalXML(e *xml.Encoder, start xml.StartElement) error { - if len(t.Tests) == 0 { + if len(t.Tests) == 100000 { start.Name = xml.Name{Local: "testcase"} classname := "" - if t.Parent != nil { - classname = t.Parent.Name + if t.parent != nil { + classname = t.parent.Name } var skipped *Result if t.Skipped > 0 { @@ -138,7 +138,7 @@ func main() { pkg := prefix + item.Package switch item.Action { case "start": - testsuites.Suite(item.Time, pkg) + testsuites.Start(item.Time, pkg) case "run": fmt.Println() testsuites.Test(item.Time, pkg, item.Test) @@ -150,11 +150,11 @@ func main() { case "cont": testsuites.Output(item.Time, pkg, item.Test, "CONTINUED") case "pass": - testsuites.Pass(item.Time, pkg, item.Test, item.Elapsed) + testsuites.Pass(item.Time, pkg, item.Test) case "bench": - testsuites.Bench(item.Time, pkg, item.Test, item.Output, item.Elapsed) + testsuites.Bench(item.Time, pkg, item.Test, item.Output) case "fail": - testsuites.Fail(item.Time, pkg, item.Test, item.Elapsed) + testsuites.Fail(item.Time, pkg, item.Test) case "skip": testsuites.Skip(item.Time, pkg, item.Test) } diff --git a/cmd/go2junit/output.go b/cmd/go2junit/output.go index c9c3d69..41e75e7 100644 --- a/cmd/go2junit/output.go +++ b/cmd/go2junit/output.go @@ -39,7 +39,8 @@ type Test struct { Tests []*Test `xml:"testsuite,omitempty"` SystemOut string `xml:"system-out,omitempty"` - Parent *Test `xml:"-"` + parent *Test + t0 time.Time } type Result struct { @@ -74,6 +75,7 @@ func (testsuites *Testsuites) getRootSuite(t time.Time, pkg string, create bool) Name: pkg, Skipped: 0, Timestamp: t, + t0: t, } testsuites.Suites = append(testsuites.Suites, &suite) return &suite @@ -88,12 +90,16 @@ func (suite *Test) getSuite(t time.Time, name string) *Test { s := Test{ Name: suite.Name + "/" + name, Timestamp: t, + t0: t, } suite.Tests = append(suite.Tests, &s) return &s } func (suite *Test) getTest(t time.Time, testname string) *Test { + if testname == "" { + return suite + } suitename := suite.Name path := strings.Split(testname, "/") for i := 0; i < len(path); i++ { @@ -109,7 +115,7 @@ func (testsuites *Testsuites) getTest(t time.Time, pkg string, testname string) return test } -func (testsuites *Testsuites) Suite(t time.Time, pkg string) { +func (testsuites *Testsuites) Start(t time.Time, pkg string) { testsuites.getRootSuite(t, pkg, true) } @@ -119,56 +125,29 @@ func (testsuites *Testsuites) Test(t time.Time, pkg string, test string) { } func (testsuites *Testsuites) Output(t time.Time, pkg string, test string, output string) { - if test == "" { - ts := testsuites.getRootSuite(t, pkg, true) - ts.SystemOut = ts.SystemOut + output - return - } - ts := testsuites.getRootSuite(t, pkg+"/"+test, false) - if ts != nil { - ts.SystemOut = ts.SystemOut + output - return - } tc := testsuites.getTest(t, pkg, test) tc.SystemOut = tc.SystemOut + output } -func (testsuites *Testsuites) Pass(t time.Time, pkg string, test string, elapsed float64) { - if test == "" { - return - } - if testsuites.getRootSuite(t, pkg+"/"+test, false) != nil { - return - } +func (testsuites *Testsuites) Pass(t time.Time, pkg string, test string) { tc := testsuites.getTest(t, pkg, test) - tc.Time = elapsed + tc.Time = float64(t.Sub(tc.t0).Nanoseconds()) / 1000_000_000.0 } -func (testsuites *Testsuites) Bench(t time.Time, pkg string, test string, output string, elapsed float64) { +func (testsuites *Testsuites) Bench(t time.Time, pkg string, test string, output string) { tc := testsuites.getTest(t, pkg, test) tc.SystemOut = tc.SystemOut + output + "\n" } -func (testsuites *Testsuites) Fail(t time.Time, pkg string, test string, elapsed float64) { - if test == "" { - return - } - if testsuites.getRootSuite(t, pkg+"/"+test, false) != nil { - return - } +func (testsuites *Testsuites) Fail(t time.Time, pkg string, test string) { tc := testsuites.getTest(t, pkg, test) - tc.Time = elapsed + tc.Time = float64(t.Sub(tc.t0).Nanoseconds()) / 1000_000_000.0 tc.Failures = 1 } func (testsuites *Testsuites) Skip(t time.Time, pkg string, test string) { - if test == "" { - return - } - if testsuites.getRootSuite(t, pkg+"/"+test, false) != nil { - return - } tc := testsuites.getTest(t, pkg, test) + tc.Time = float64(t.Sub(tc.t0).Nanoseconds()) / 1000_000_000.0 tc.Skipped = 1 } @@ -190,7 +169,7 @@ func (suite *Test) Complete() { suite.Errors += ts.Errors suite.Disabled += ts.Disabled suite.Skipped += ts.Skipped - ts.Parent = suite + ts.parent = suite } }