| package main |
| |
| import ( |
| "bytes" |
| "io" |
| "io/ioutil" |
| "log" |
| "os" |
| "testing" |
| "time" |
| ) |
| |
| var goCheckFiles []string = []string{ |
| "gocheck-pass.out", |
| "gocheck-fail.out", |
| "gocheck-panic.out", |
| "gocheck-nofiles.out", |
| "gocheck-empty.out", |
| "gocheck-setup-miss.out", |
| } |
| |
| var goTestFiles []string = []string{ |
| "gotest.out", |
| "gotest-0.out", |
| "gotest-datarace.out", |
| "gotest-empty.out", |
| "gotest-fail.out", |
| "gotest-log.out", |
| "gotest-multi.out", |
| "gotest-multierror.out", |
| "gotest-nofiles.out", |
| "gotest-num.out", |
| "gotest-panic.out", |
| "gotest-pass.out", |
| "gotest-testify-suite.out", |
| "gotest-1.5.out", |
| } |
| |
| func Test_XMLOuptutGoCheckXUnit(t *testing.T) { |
| for _, filename := range goCheckFiles { |
| suites, err := gc_Parse(getInputData(filename)) |
| checkError(err) |
| generateAndTestXMLXUnit(t, suites, filename) |
| } |
| } |
| |
| func Test_XMLOuptutGoCheckXUnitNet(t *testing.T) { |
| for _, filename := range goCheckFiles { |
| suites, err := gc_Parse(getInputData(filename)) |
| checkError(err) |
| generateAndTestXMLXUnitNet(t, suites, filename) |
| } |
| } |
| |
| func Test_XMLOuptutGoTestXUnit(t *testing.T) { |
| for _, filename := range goTestFiles { |
| suites, err := gt_Parse(getInputData(filename)) |
| checkError(err) |
| generateAndTestXMLXUnit(t, suites, filename) |
| } |
| } |
| |
| func Test_XMLOuptutGoTestXunitNet(t *testing.T) { |
| for _, filename := range goTestFiles { |
| suites, err := gt_Parse(getInputData(filename)) |
| checkError(err) |
| generateAndTestXMLXUnitNet(t, suites, filename) |
| } |
| } |
| |
| func getInputData(filename string) io.Reader { |
| file, err := getInput("data" + string(os.PathSeparator) + filename) |
| checkError(err) |
| return file |
| } |
| |
| func getOutputData(outType string, filename string) io.Reader { |
| file, err := getInput("xml" + string(os.PathSeparator) + outType + string(os.PathSeparator) + filename + ".xml") |
| checkError(err) |
| return file |
| } |
| |
| func generateXML(suites []*Suite, filename string, xmlTemplate string) []byte { |
| if len(suites) == 0 { |
| return []byte("error: no tests found") |
| } |
| r, w, _ := os.Pipe() |
| writeXML(suites, w, xmlTemplate) |
| w.Close() |
| xml, err := ioutil.ReadAll(r) |
| checkError(err) |
| return xml |
| } |
| |
| func generateAndTestXMLXUnit(t *testing.T, suites []*Suite, filename string) { |
| expected, err := ioutil.ReadAll(getOutputData("xunit", filename)) |
| checkError(err) |
| |
| var xmlTemplate = xunitTemplate |
| if len(suites) > 1 { |
| xmlTemplate = multiTemplate |
| } |
| |
| actual := generateXML(suites, filename, xmlTemplate) |
| if !bytes.Equal(expected, actual) { |
| t.Errorf("xUnit XML output %s differs from expected", filename) |
| } |
| } |
| |
| func generateAndTestXMLXUnitNet(t *testing.T, suites []*Suite, filename string) { |
| // run-date="2015-06-05" run-time="18:34:41" |
| runTime = time.Date(2015, time.June, 5, 18, 34, 41, 0, time.UTC) |
| |
| expected, err := ioutil.ReadAll(getOutputData("xunit.net", filename)) |
| checkError(err) |
| actual := generateXML(suites, filename, xunitNetTemplate) |
| if !bytes.Equal(expected, actual) { |
| t.Errorf("xUnit.net XML output %s differs from expected", filename) |
| } |
| } |
| |
| func checkError(err error) { |
| if err != nil { |
| log.Fatal(err) |
| } |
| } |