128 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			128 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
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 <gotest.json>\n")
 | 
						|
		os.Exit(1)
 | 
						|
	}
 | 
						|
	filename := os.Args[1]
 | 
						|
	var file *os.File
 | 
						|
	if filename != "-" {
 | 
						|
		file2, err := os.Open(filename)
 | 
						|
		file = file2
 | 
						|
		if err != nil {
 | 
						|
			panic(err)
 | 
						|
		}
 | 
						|
		defer file.Close()
 | 
						|
	} else {
 | 
						|
		file = os.Stdin
 | 
						|
	}
 | 
						|
 | 
						|
	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)
 | 
						|
}
 |