package main import ( "bufio" "encoding/json" "encoding/xml" "fmt" "os" ) func main() { /* testsuites := Testsuites{ Time: 1.23, TImestamp: time.Now(), Suites: []*Testsuite{ { Name: "hello", Tests: 0, Failures: 0, Errors: 0, Disabled: 0, Package: "", Skipped: 0, Time: "", Timestamp: time.Now(), Testsuites: []*Testsuite{ { Name: "abc", Tests: 0, Failures: 0, Errors: 0, Disabled: 0, Package: "", Skipped: 0, Time: "", Timestamp: time.Time{}, Testsuites: nil, Testcases: []*Testcase{ { Name: "test", Classname: "", Time: "", Skipped: nil, Error: &Result{ Message: "error", }, Failure: nil, SystemOut: "", }, }, SystemOut: "ddd", }, }, Testcases: nil, SystemOut: "hello", }, }, } */ testsuites := Testsuites{} if len(os.Args) != 2 { fmt.Fprintf(os.Stderr, "Usage: go2junit \n") os.Exit(1) } filename := os.Args[1] file, _ := os.Open(filename) defer file.Close() scanner := bufio.NewScanner(file) lineno := 0 testsuites = Testsuites{} for scanner.Scan() { lineno++ var item TestEvent line := scanner.Bytes() if err := json.Unmarshal(line, &item); err != nil { fmt.Fprintf(os.Stderr, "%d: %s: %v", lineno, line, err) continue } //.fmt.Printf("Parsed %d:\n%v\n\n", lineno, item) switch item.Action { case "start": testsuites.Suite(item.Time, item.Package) case "run": testsuites.Test(item.Time, item.Package, item.Test) case "output": testsuites.Output(item.Time, item.Package, item.Test, item.Output) fmt.Fprintf(os.Stderr, "%s", item.Output) case "pause": testsuites.Output(item.Time, item.Package, item.Test, "PAUSED") case "cont": testsuites.Output(item.Time, item.Package, item.Test, "CONTINUED") case "pass": testsuites.Pass(item.Time, item.Package, item.Test, item.Elapsed) case "bench": testsuites.Bench(item.Time, item.Package, item.Test, item.Output, item.Elapsed) case "fail": testsuites.Fail(item.Time, item.Package, item.Test, item.Elapsed) case "skip": testsuites.Skip(item.Time, item.Package, item.Test) } } testsuites.Complete() xml, err := xml.MarshalIndent(testsuites, "", " ") if err != nil { panic(err) } fmt.Printf("%s", xml) }