third_party/go/src/bitbucket/tebeka/go2xunit: update for go1.5

Change-Id: Ic091a7d17ea317b366ce6af7a79cc104e556f2cc
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/ChangeLog b/go/src/bitbucket.org/tebeka/go2xunit/ChangeLog
index b107cdb..d118cae 100644
--- a/go/src/bitbucket.org/tebeka/go2xunit/ChangeLog
+++ b/go/src/bitbucket.org/tebeka/go2xunit/ChangeLog
@@ -1,3 +1,25 @@
+2015-07-18 version 1.2.2
+    * Support go 1.5 test output (github issue #23)
+
+2015-06-25 version 1.2.1
+    * Ignore SetUpTest and TearDownTest (@pippio in github PR #22)
+
+2015-06-16 version 1.2.0
+    * Support xunit.net (@tischda in github PR #21)
+    * More testing (@tischda in github PR #21)
+
+2014-12-16 version 1.1.1
+    * Better error message (github issue #19)
+
+2014-08-21 version 1.1.0
+    * Support for testify (Joakim Lundborg PR #6)
+
+2014-08-21 version 1.0.0
+    * Bumping to 1.0.0, it's been long enough :)
+
+2014-08-14 version 0.3.1
+    * Fixed two small errors found by "go vet"
+
 2014-06-04 version 0.3.0
     * Option to fail on data races (Jiri Sima in bitbucket PR #5)
 
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/LICENSE b/go/src/bitbucket.org/tebeka/go2xunit/LICENSE.txt
similarity index 93%
rename from go/src/bitbucket.org/tebeka/go2xunit/LICENSE
rename to go/src/bitbucket.org/tebeka/go2xunit/LICENSE.txt
index 6956048..34e01ad 100644
--- a/go/src/bitbucket.org/tebeka/go2xunit/LICENSE
+++ b/go/src/bitbucket.org/tebeka/go2xunit/LICENSE.txt
@@ -1,4 +1,4 @@
-Copyright (c) 2012,2013 Miki Tebeka <miki.tebeka@gmail.com>.
+Copyright (c) 2012-2015 Miki Tebeka <miki.tebeka@gmail.com>.
 
 Permission is hereby granted, free of charge, to any person obtaining a copy of
 this software and associated documentation files (the "Software"), to deal in
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/README.google b/go/src/bitbucket.org/tebeka/go2xunit/README.google
index 1f146a9..163c094 100644
--- a/go/src/bitbucket.org/tebeka/go2xunit/README.google
+++ b/go/src/bitbucket.org/tebeka/go2xunit/README.google
@@ -1,5 +1,5 @@
-URL: https://bitbucket.org/tebeka/go2xunit/get/77968f802fb3.zip
-Version: 77968f802fb3852e199209e2c78092b717714a2c
+URL: https://bitbucket.org/tebeka/go2xunit/get/d45000af2242dd0e7b8c7b07d82a1068adc5fd40.zip
+Version: d45000af2242dd0e7b8c7b07d82a1068adc5fd40
 License: MIT
 License File: LICENSE
 
@@ -8,5 +8,5 @@
 in Jenkins/Hudson).
 
 Local Modifications:
-- go/vcl/4807: modified the map2arr() function to output map values in
-  a deterministic order to avoid test flakiness
+- fix demo/mmath_test.go
+- add +build ignore to demo-gocheck/mmath_test.go to avoid bringing in another dependency
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/README.md b/go/src/bitbucket.org/tebeka/go2xunit/README.md
index 0a973de..c761a07 100644
--- a/go/src/bitbucket.org/tebeka/go2xunit/README.md
+++ b/go/src/bitbucket.org/tebeka/go2xunit/README.md
@@ -1,7 +1,7 @@
-# go2xunit 0.2.12
+# go2xunit
 
-Converts `go test -v` (or `gocheck -vv`) output to xunit compatible XML output
-(used in [Jenkins][jenkins]/[Hudson][hudson]).
+Converts `go test -v` (or `gocheck -vv`) output to xunit or [xunit.net][xnet]
+compatible XML output (used in [Jenkins][jenkins]/[Hudson][hudson]).
 
 
 # Install
@@ -18,7 +18,7 @@
 
     go test -v | go2xunit -output tests.xml
 
-`go2xunit` also works with [gocheck][gocheck].
+`go2xunit` also works with [gocheck][gocheck], and [testify][testify].
 
     go test -gocheck.vv | go2xunit -gocheck -output tests.xml
 
@@ -32,8 +32,12 @@
     go2xunit -fail -input $outfile -output tests.xml
 
 
-Contact
-=======
+# Related
+
+* [testing: add -json flag for json
+  results](https://github.com/golang/go/issues/2981) open bug
+
+# Contact
 Miki Tebeka <miki.tebeka@gmail.com>
 
 Bug reports go [here][bugs].
@@ -42,4 +46,6 @@
 [jenkins]: http://jenkins-ci.org/
 [hudson]: http://hudson-ci.org/
 [gocheck]: http://labix.org/gocheck
+[testify]: http://godoc.org/github.com/stretchr/testify
 [bugs]: https://bitbucket.org/tebeka/go2xunit/issues
+[xnet]: https://xunit.codeplex.com/wikipage?title=XmlFormat
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/data/gocheck-empty.out b/go/src/bitbucket.org/tebeka/go2xunit/data/gocheck-empty.out
new file mode 100644
index 0000000..787d773
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/data/gocheck-empty.out
@@ -0,0 +1,2 @@
+PASS
+ok  	github.com/tischda/mmath	0.039s
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/data/gocheck-nofiles.out b/go/src/bitbucket.org/tebeka/go2xunit/data/gocheck-nofiles.out
new file mode 100644
index 0000000..b37956c
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/data/gocheck-nofiles.out
@@ -0,0 +1 @@
+?   	github.com/tischda/mmath	[no test files]
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/data/gocheck-panic.out b/go/src/bitbucket.org/tebeka/go2xunit/data/gocheck-panic.out
new file mode 100644
index 0000000..3d0a96d
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/data/gocheck-panic.out
@@ -0,0 +1,44 @@
+START: mmath_test.go:22: MySuite.TestAdd
+PASS: mmath_test.go:22: MySuite.TestAdd	0.001s
+
+START: mmath_test.go:42: MySuite.TestDiv
+mmath_test.go:45:
+    c.Assert(z, Equals, float64(x)/float64(y))
+... obtained int = 0
+... expected float64 = 0.6666666666666666
+
+FAIL: mmath_test.go:42: MySuite.TestDiv
+
+START: mmath_test.go:35: MySuite.TestMul
+SKIP: mmath_test.go:35: MySuite.TestMul (not implemented)
+
+START: mmath_test.go:17: MySuite.TestPanic
+... Panic:  (PC=0x42546C)
+
+c:/go/src/runtime/asm_amd64.s:401
+  in call16
+c:/go/src/runtime/panic.go:387
+  in gopanic
+c:/go/src/log/log.go:307
+  in Panic
+mmath.go:22
+  in Panic
+mmath_test.go:18
+  in MySuite.TestPanic
+c:/go/src/runtime/asm_amd64.s:401
+  in call16
+c:/go/src/reflect/value.go:419
+  in Value.call
+c:/go/src/reflect/value.go:296
+  in Value.Call
+c:/go/src/runtime/asm_amd64.s:2232
+  in goexit
+PANIC: mmath_test.go:17: MySuite.TestPanic
+
+START: mmath_test.go:28: MySuite.TestSub
+PASS: mmath_test.go:28: MySuite.TestSub	0.000s
+
+--- FAIL: Test (0.00s)
+FAIL
+exit status 1
+FAIL	github.com/tischda/mmath	0.040s
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/data/gocheck-setup-miss.out b/go/src/bitbucket.org/tebeka/go2xunit/data/gocheck-setup-miss.out
new file mode 100644
index 0000000..e322796
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/data/gocheck-setup-miss.out
@@ -0,0 +1,18 @@
+=== RUN Test
+START: foobar_test.go:17: FoobarSuite.SetUpSuite
+foobar_test.go:19:
+    c.Assert(err, gc.IsNil)
+... value *os.PathError = &os.PathError{Op:"stat", Path:"testdata/regexes.yaml", Err:0x2} ("stat testdata/regexes.yaml: no such file or directory")
+
+FAIL: foobar_test.go:17: FoobarSuite.SetUpSuite
+
+START: foobar_test.go:79: FoobarSuite.TestFrob
+MISS: foobar_test.go:79: FoobarSuite.TestFrob
+
+START: foobar_test.go:102: FoobarSuite.TestThing
+MISS: foobar_test.go:102: FoobarSuite.TestThing
+
+OOPS: 82 passed, 1 FAILED, 2 MISSED
+--- FAIL: Test (2.37s)
+FAIL
+FAIL    github.com/you/yourproject/foobar   2.383s
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/data/gotest-1.5.out b/go/src/bitbucket.org/tebeka/go2xunit/data/gotest-1.5.out
new file mode 100644
index 0000000..b0d4f6a
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/data/gotest-1.5.out
@@ -0,0 +1,12 @@
+=== RUN   TestAdd
+--- PASS: TestAdd (0.00s)
+=== RUN   TestSub
+--- PASS: TestSub (0.00s)
+=== RUN   TestMul
+--- PASS: TestMul (0.00s)
+=== RUN   TestDiv
+--- FAIL: TestDiv (0.00s)
+	mmath_test.go:35: 2/3 != 0.666667
+FAIL
+exit status 1
+FAIL	_/home/miki/Projects/go/src/bitbucket.org/tebeka/go2xunit/demo	0.002s
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/data/gotest-testify-suite.out b/go/src/bitbucket.org/tebeka/go2xunit/data/gotest-testify-suite.out
new file mode 100644
index 0000000..5c32dc6
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/data/gotest-testify-suite.out
@@ -0,0 +1,10 @@
+=== RUN TestSuite
+=== RUN TestA
+--- PASS: TestA (0.01 seconds)
+=== RUN TestB
+--- PASS: TestB (0.02 seconds)
+--- PASS: TestSuite (0.03 seconds)
+=== RUN TestC
+--- PASS: TestC (0.04 seconds)
+PASS
+ok	testify-suite	0.071s
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/demo-gocheck/README.md b/go/src/bitbucket.org/tebeka/go2xunit/demo-gocheck/README.md
new file mode 100644
index 0000000..8afec40
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/demo-gocheck/README.md
@@ -0,0 +1,24 @@
+# Demo Project for Using go2xunit
+
+Install `go2xunit` with `go get bitbucket.org/tebeka/go2xunit`
+
+Use run-jenkins.sh to run Jenkins (see Jenkins download instructions in the script).
+
+Then configure Jenkins like the configuration screen below, note the 
+"Execute Shell" and "Publish JUnit test result report" sections.
+
+You after running, you should see test results like the below.
+
+
+## Configuration Screen
+
+![Configuration Screen](screenshots/config.png)
+
+## Test Results - Overview
+
+![Tests Overview](screenshots/build-overrview.png)
+
+## Test Results - Detailed
+
+![Tests Detailed](screenshots/build-tests.png)
+
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/demo-gocheck/jenkins.sh b/go/src/bitbucket.org/tebeka/go2xunit/demo-gocheck/jenkins.sh
new file mode 100755
index 0000000..e2c26fa
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/demo-gocheck/jenkins.sh
@@ -0,0 +1,7 @@
+#!/bin/bash
+# Test script run by jenkins
+
+outfile=gotest.out
+
+go test -gocheck.vv | tee $outfile
+go2xunit -gocheck -fail -input $outfile -output tests.xml
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/demo-gocheck/mmath.go b/go/src/bitbucket.org/tebeka/go2xunit/demo-gocheck/mmath.go
new file mode 100644
index 0000000..2f21125
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/demo-gocheck/mmath.go
@@ -0,0 +1,17 @@
+package mmath
+
+func Add(x, y int) int {
+	return x + y
+}
+
+func Sub(x, y int) int {
+	return x - y
+}
+
+func Mul(x, y int) int {
+	return x * y
+}
+
+func Div(x, y int) int {
+	return x / y
+}
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/demo-gocheck/mmath_test.go b/go/src/bitbucket.org/tebeka/go2xunit/demo-gocheck/mmath_test.go
new file mode 100644
index 0000000..1c4b27c
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/demo-gocheck/mmath_test.go
@@ -0,0 +1,41 @@
+// +build ignore
+
+package mmath
+
+import (
+	. "launchpad.net/gocheck"
+	"testing"
+)
+
+type MySuite struct{}
+var _ = Suite(&MySuite{})
+
+// Hook up gocheck into the "go test" runner.
+func Test(t *testing.T) {
+	TestingT(t)
+}
+
+func (s *MySuite) TestAdd(c *C) {
+	x, y := 1, 2
+	z := Add(x, y)
+	c.Assert(z, Equals, x+y)
+}
+
+func (s *MySuite) TestSub(c *C) {
+	x, y := 1, 2
+	z := Sub(x, y)
+
+	c.Assert(z, Equals, x-y)
+}
+
+func (s *MySuite) TestMul(c *C) {
+	x, y := 2, 3
+	z := Mul(x, y)
+	c.Assert(z, Equals, x*y)
+}
+
+func (s *MySuite) TestDiv(c *C) {
+	x, y := 2, 3
+	z := Div(x, y)
+	c.Assert(z, Equals, float64(x)/float64(y))
+}
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/demo-gocheck/run-jenkins.sh b/go/src/bitbucket.org/tebeka/go2xunit/demo-gocheck/run-jenkins.sh
new file mode 100755
index 0000000..4aa1a66
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/demo-gocheck/run-jenkins.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+# Run Jenkins as daemon on port 8000
+
+# You can download jenkins.war from http://mirrors.jenkins-ci.org/war/latest/jenkins.war
+
+java -jar jenkins.war \
+    --logfile=${PWD}/jenkins.log \
+    --httpPort=8000 \
+    --daemon
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/go2xunit.go b/go/src/bitbucket.org/tebeka/go2xunit/go2xunit.go
index b7728bd..efcd717 100644
--- a/go/src/bitbucket.org/tebeka/go2xunit/go2xunit.go
+++ b/go/src/bitbucket.org/tebeka/go2xunit/go2xunit.go
@@ -8,23 +8,27 @@
 	"log"
 	"os"
 	"regexp"
-	"sort"
+	"strconv"
 	"strings"
 	"text/template"
+	"time"
 )
 
+// Time when the test was run
+var runTime time.Time
+
 const (
-	version = "0.3.0"
+	version = "1.2.2"
 
 	// gotest regular expressions
 
 	// === RUN TestAdd
-	gt_startRE = "^=== RUN:? ([a-zA-Z_][^[:space:]]*)"
+	gt_startRE = "^=== RUN:?[[:space:]]+([a-zA-Z_][^[:space:]]*)"
 
 	// --- PASS: TestSub (0.00 seconds)
 	// --- FAIL: TestSubFail (0.00 seconds)
 	// --- SKIP: TestSubSkip (0.00 seconds)
-	gt_endRE = "^--- (PASS|FAIL|SKIP): ([a-zA-Z_][^[:space:]]*) \\((\\d+(.\\d+)?)"
+	gt_endRE = "^--- (PASS|FAIL|SKIP):[[:space:]]+([a-zA-Z_][^[:space:]]*) \\((\\d+(.\\d+)?)"
 
 	// FAIL	_/home/miki/Projects/goroot/src/xunit	0.004s
 	// ok  	_/home/miki/Projects/goroot/src/anotherTest	0.000s
@@ -39,9 +43,14 @@
 
 	// START: mmath_test.go:16: MySuite.TestAdd
 	gc_startRE = "START: [^:]+:[^:]+: ([A-Za-z_][[:word:]]*).([A-Za-z_][[:word:]]*)"
+
 	// PASS: mmath_test.go:16: MySuite.TestAdd	0.000s
 	// FAIL: mmath_test.go:35: MySuite.TestDiv
-	gc_endRE = "(PASS|FAIL): [^:]+:[^:]+: ([A-Za-z_][[:word:]]*).([A-Za-z_][[:word:]]*)([[:space:]]+([0-9]+.[0-9]+))?"
+	gc_endRE = "(PASS|FAIL|SKIP|PANIC|MISS): [^:]+:[^:]+: ([A-Za-z_][[:word:]]*).([A-Za-z_][[:word:]]*)[[:space:]]?([0-9]+.[0-9]+)?"
+
+	// FAIL	go2xunit/demo-gocheck	0.008s
+	// ok  	go2xunit/demo-gocheck	0.008s
+	gc_suiteRE = "^(ok|FAIL)[ \t]+([^ \t]+)[ \t]+(\\d+.\\d+)"
 )
 
 var (
@@ -52,6 +61,7 @@
 	Name, Time, Message string
 	Failed              bool
 	Skipped             bool
+	Passed              bool
 }
 
 type Suite struct {
@@ -61,9 +71,51 @@
 	Tests  []*Test
 }
 
+type SuiteStack struct {
+	nodes []*Suite
+	count int
+}
+
+// Push adds a node to the stack.
+func (s *SuiteStack) Push(n *Suite) {
+	s.nodes = append(s.nodes[:s.count], n)
+	s.count++
+}
+
+// Pop removes and returns a node from the stack in last to first order.
+func (s *SuiteStack) Pop() *Suite {
+	if s.count == 0 {
+		return nil
+	}
+	s.count--
+	return s.nodes[s.count]
+}
+
 type TestResults struct {
-	Suites []*Suite
-	Multi  bool
+	Suites   []*Suite
+	Assembly string
+	RunDate  string
+	RunTime  string
+	Time     string
+	Total    int
+	Passed   int
+	Failed   int
+	Skipped  int
+}
+
+// calculate grand total for all suites
+func (r *TestResults) calcTotals() {
+	totalTime, _ := strconv.ParseFloat(r.Time, 64)
+	for _, suite := range r.Suites {
+		r.Passed += suite.NumPassed()
+		r.Failed += suite.NumFailed()
+		r.Skipped += suite.NumSkipped()
+
+		suiteTime, _ := strconv.ParseFloat(suite.Time, 64)
+		totalTime += suiteTime
+		r.Time = fmt.Sprintf("%.3f", totalTime)
+	}
+	r.Total = r.Passed + r.Skipped + r.Failed
 }
 
 func (suite *Suite) NumFailed() int {
@@ -88,6 +140,19 @@
 	return count
 }
 
+// Number of passed tests in the suite
+func (suite *Suite) NumPassed() int {
+	count := 0
+	for _, test := range suite.Tests {
+		if test.Passed {
+			count++
+		}
+	}
+
+	return count
+}
+
+// Number of tests in the suite
 func (suite *Suite) Count() int {
 	return len(suite.Tests)
 }
@@ -114,7 +179,7 @@
 	var curTest *Test
 	var curSuite *Suite
 	var out []string
-
+	suiteStack := SuiteStack{}
 	// Handles a test that ended with a panic.
 	handlePanic := func() {
 		curTest.Failed = true
@@ -159,7 +224,12 @@
 		if tokens != nil {
 			if curTest != nil {
 				// This occurs when the last test ended with a panic.
-				handlePanic()
+				if suiteStack.count == 0 {
+					suiteStack.Push(curSuite)
+					curSuite = &Suite{Name: curTest.Name}
+				} else {
+					handlePanic()
+				}
 			}
 			if e := appendError(); e != nil {
 				return nil, e
@@ -173,13 +243,22 @@
 		tokens = find_end(line)
 		if tokens != nil {
 			if curTest == nil {
-				return nil, fmt.Errorf("%d: orphan end test", lnum)
+				if suiteStack.count > 0 {
+					prevSuite := suiteStack.Pop()
+					suites = append(suites, curSuite)
+					curSuite = prevSuite
+					continue
+				} else {
+					return nil, fmt.Errorf("%d: orphan end test", lnum)
+				}
 			}
 			if tokens[2] != curTest.Name {
-				return nil, fmt.Errorf("%d: name mismatch", lnum)
+				err := fmt.Errorf("%d: name mismatch (try disabling parallel mode)", lnum)
+				return nil, err
 			}
 			curTest.Failed = (tokens[1] == "FAIL") || (failOnRace && hasDatarace(out))
 			curTest.Skipped = (tokens[1] == "SKIP")
+			curTest.Passed = (tokens[1] == "PASS")
 			curTest.Time = tokens[3]
 			curTest.Message = strings.Join(out, "\n")
 			curSuite.Tests = append(curSuite.Tests, curTest)
@@ -218,75 +297,88 @@
 	return suites, nil
 }
 
-func map2arr(m map[string]*Suite) []*Suite {
-	arr := []*Suite{}
-	keys := []string{}
-	for key, _ := range m {
-		keys = append(keys, key)
-	}
-	sort.Strings(keys)
-	for _, key := range keys {
-		/* FIXME:
-		suite.Status =
-		suite.Time =
-		*/
-		arr = append(arr, m[key])
-	}
-	return arr
-}
-
 // gc_Parse parses output of "go test -gocheck.vv", returns a list of tests
 // See data/gocheck.out for an example
 func gc_Parse(rd io.Reader) ([]*Suite, error) {
 	find_start := regexp.MustCompile(gc_startRE).FindStringSubmatch
 	find_end := regexp.MustCompile(gc_endRE).FindStringSubmatch
+	find_suite := regexp.MustCompile(gc_suiteRE).FindStringSubmatch
 
 	scanner := bufio.NewScanner(rd)
-	var test *Test
-	var suites = make(map[string]*Suite)
+	var suites = make([]*Suite, 0)
 	var suiteName string
+	var suite *Suite
+
+	var testName string
 	var out []string
 
 	for lnum := 1; scanner.Scan(); lnum++ {
 		line := scanner.Text()
+
 		tokens := find_start(line)
 		if len(tokens) > 0 {
-			if test != nil {
+			if tokens[2] == "SetUpTest" || tokens[2] == "TearDownTest" {
+				continue
+			}
+			if testName != "" {
 				return nil, fmt.Errorf("%d: start in middle\n", lnum)
 			}
 			suiteName = tokens[1]
-			test = &Test{Name: tokens[2]}
+			testName = tokens[2]
 			out = []string{}
 			continue
 		}
 
 		tokens = find_end(line)
 		if len(tokens) > 0 {
-			if test == nil {
+			if tokens[3] == "SetUpTest" || tokens[3] == "TearDownTest" {
+				continue
+			}
+			if testName == "" {
 				return nil, fmt.Errorf("%d: orphan end", lnum)
 			}
-			if (tokens[2] != suiteName) || (tokens[3] != test.Name) {
+			if (tokens[2] != suiteName) || (tokens[3] != testName) {
 				return nil, fmt.Errorf("%d: suite/name mismatch", lnum)
 			}
+			test := &Test{Name: testName}
 			test.Message = strings.Join(out, "\n")
 			test.Time = tokens[4]
-			test.Failed = (tokens[1] == "FAIL")
+			test.Failed = (tokens[1] == "FAIL") || (tokens[1] == "PANIC")
+			test.Passed = (tokens[1] == "PASS")
+			test.Skipped = (tokens[1] == "SKIP" || tokens[1] == "MISS")
 
-			suite, ok := suites[suiteName]
-			if !ok {
+			if suite == nil || suite.Name != suiteName {
 				suite = &Suite{Name: suiteName}
+				suites = append(suites, suite)
 			}
 			suite.Tests = append(suite.Tests, test)
-			suites[suiteName] = suite
 
-			test = nil
+			testName = ""
 			suiteName = ""
 			out = []string{}
 
 			continue
 		}
 
-		if test != nil {
+		// last "suite" is test summary
+		tokens = find_suite(line)
+		if tokens != nil {
+			if suite == nil {
+				suite = &Suite{Name: tokens[2], Status: tokens[1], Time: tokens[3]}
+				suites = append(suites, suite)
+			} else {
+				suite.Status = tokens[1]
+				suite.Time = tokens[3]
+			}
+
+			testName = ""
+			suiteName = ""
+			out = []string{}
+
+			continue
+		}
+
+		if testName != "" {
 			out = append(out, line)
 		}
 	}
@@ -295,7 +387,7 @@
 		return nil, err
 	}
 
-	return map2arr(suites), nil
+	return suites, nil
 }
 
 func hasFailures(suites []*Suite) bool {
@@ -307,8 +399,10 @@
 	return false
 }
 
-var xmlTemplate string = `<?xml version="1.0" encoding="utf-8"?>
-{{if .Multi}}<testsuites>{{end}}
+const (
+	xmlDeclaration = `<?xml version="1.0" encoding="utf-8"?>`
+
+	xunitTemplate string = `
 {{range $suite := .Suites}}  <testsuite name="{{.Name}}" tests="{{.Count}}" errors="0" failures="{{.NumFailed}}" skip="{{.NumSkipped}}">
 {{range  $test := $suite.Tests}}    <testcase classname="{{$suite.Name}}" name="{{$test.Name}}" time="{{$test.Time}}">
 {{if $test.Skipped }}      <skipped/> {{end}}
@@ -316,31 +410,73 @@
         <![CDATA[{{$test.Message}}]]>
       </failure>{{end}}    </testcase>
 {{end}}  </testsuite>
-{{end}}{{if .Multi}}</testsuites>{{end}}
+{{end}}`
+
+	multiTemplate string = `
+<testsuites>` + xunitTemplate + `</testsuites>
 `
 
+	// https://xunit.codeplex.com/wikipage?title=XmlFormat
+	xunitNetTemplate string = `
+<assembly name="{{.Assembly}}"
+          run-date="{{.RunDate}}" run-time="{{.RunTime}}"
+          configFile="none"
+          time="{{.Time}}"
+          total="{{.Total}}"
+          passed="{{.Passed}}"
+          failed="{{.Failed}}"
+          skipped="{{.Skipped}}"
+          environment="n/a"
+          test-framework="golang">
+{{range $suite := .Suites}}
+    <class time="{{.Time}}" name="{{.Name}}"
+  	     total="{{.Count}}"
+  	     passed="{{.NumPassed}}"
+  	     failed="{{.NumFailed}}"
+  	     skipped="{{.NumSkipped}}">
+{{range  $test := $suite.Tests}}
+        <test name="{{$test.Name}}"
+          type="test"
+          method="{{$test.Name}}"
+          result={{if $test.Skipped }}"Skip"{{else if $test.Failed }}"Fail"{{else if $test.Passed }}"Pass"{{end}}
+          time="{{$test.Time}}">
+        {{if $test.Failed }}  <failure exception-type="go.error">
+             <message><![CDATA[{{$test.Message}}]]></message>
+      	  </failure>
+      	{{end}}</test>
+{{end}}
+    </class>
+{{end}}
+</assembly>
+`
+)
+
 // writeXML exits xunit XML of tests to out
-func writeXML(suites []*Suite, out io.Writer, bamboo bool) {
+func writeXML(suites []*Suite, out io.Writer, xmlTemplate string) {
 	testsResult := TestResults{
-		Suites: suites,
-		Multi:  bamboo || (len(suites) > 1),
+		Suites:   suites,
+		Assembly: suites[len(suites)-1].Name,
+		RunDate:  runTime.Format("2006-01-02"),
+		RunTime:  fmt.Sprintf("%02d:%02d:%02d", runTime.Hour(), runTime.Minute(), runTime.Second()),
 	}
+	testsResult.calcTotals()
 	t := template.New("test template")
-	t, err := t.Parse(xmlTemplate)
+
+	t, err := t.Parse(xmlDeclaration + xmlTemplate)
 	if err != nil {
-		fmt.Println("Error en parse %v", err)
+		fmt.Printf("Error in parse %v\n", err)
 		return
 	}
 	err = t.Execute(out, testsResult)
 	if err != nil {
-		fmt.Println("Error en execute %v", err)
+		fmt.Printf("Error in execute %v\n", err)
 		return
 	}
 }
 
-// getInput return input io.Reader from file name, if file name is - it will
+// getInput return input io.File from file name, if file name is - it will
 // return os.Stdin
-func getInput(filename string) (io.Reader, error) {
+func getInput(filename string) (*os.File, error) {
 	if filename == "-" || filename == "" {
 		return os.Stdin, nil
 	}
@@ -348,9 +484,9 @@
 	return os.Open(filename)
 }
 
-// getInput return output io.Writer from file name, if file name is - it will
+// getInput return output io.File from file name, if file name is - it will
 // return os.Stdout
-func getOutput(filename string) (io.Writer, error) {
+func getOutput(filename string) (*os.File, error) {
 	if filename == "-" || filename == "" {
 		return os.Stdout, nil
 	}
@@ -370,21 +506,37 @@
 		return nil, nil, fmt.Errorf("can't open %s for writing: %s", outputFile, err)
 	}
 
+	setRunTimeFrom(input)
+
 	return input, output, nil
 }
 
+// set test execution time from file date
+func setRunTimeFrom(file *os.File) {
+	statinfo, err := file.Stat()
+	checkFatal(err)
+	runTime = statinfo.ModTime()
+}
+
+func checkFatal(err error) {
+	if err != nil {
+		log.Fatalln(err)
+	}
+}
+
 func main() {
 	inputFile := flag.String("input", "", "input file (default to stdin)")
 	outputFile := flag.String("output", "", "output file (default to stdout)")
 	fail := flag.Bool("fail", false, "fail (non zero exit) if any test failed")
 	showVersion := flag.Bool("version", false, "print version and exit")
 	bamboo := flag.Bool("bamboo", false, "xml compatible with Atlassian's Bamboo")
+	xunitnet := flag.Bool("xunitnet", false, "xml compatible with xunit.net")
 	is_gocheck := flag.Bool("gocheck", false, "parse gocheck output")
 	flag.BoolVar(&failOnRace, "fail-on-race", false, "mark test as failing if it exposes a data race")
 	flag.Parse()
 
 	if *showVersion {
-		fmt.Println(version)
+		fmt.Printf("go2xunit %s\n", version)
 		os.Exit(0)
 	}
 
@@ -395,6 +547,10 @@
 		log.Fatalf("error: %s does not take parameters (did you mean -input?)", os.Args[0])
 	}
 
+	if *bamboo && *xunitnet {
+		log.Fatalf("error: -bamboo and -xunitnet are mutually exclusive")
+	}
+
 	input, output, err := getIO(*inputFile, *outputFile)
 	if err != nil {
 		log.Fatalf("error: %s", err)
@@ -417,7 +573,14 @@
 		os.Exit(1)
 	}
 
-	writeXML(suites, output, *bamboo)
+	xmlTemplate := xunitTemplate
+	if *xunitnet {
+		xmlTemplate = xunitNetTemplate
+	} else if *bamboo || (len(suites) > 1) {
+		xmlTemplate = multiTemplate
+	}
+
+	writeXML(suites, output, xmlTemplate)
 	if *fail && hasFailures(suites) {
 		os.Exit(1)
 	}
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/go2xunit_test.go b/go/src/bitbucket.org/tebeka/go2xunit/go2xunit_test.go
index 75b9969..15d440e 100644
--- a/go/src/bitbucket.org/tebeka/go2xunit/go2xunit_test.go
+++ b/go/src/bitbucket.org/tebeka/go2xunit/go2xunit_test.go
@@ -297,7 +297,7 @@
 		t.Fatalf("bad number of suites %d != %d", len(suites), nsuites)
 	}
 
-	suite := suites[0]
+	suite := suites[1]
 	ntests := 3
 	if len(suite.Tests) != ntests {
 		t.Fatalf("bad number of tests %d != %d", len(suite.Tests), ntests)
@@ -407,3 +407,13 @@
 		t.Fatalf("unexpected failure")
 	}
 }
+
+func Test_TestifySuite(t *testing.T) {
+	suites, err := loadGotest("data/gotest-testify-suite.out", t)
+	if err != nil {
+		t.Fatalf("Failed to parse")
+	}
+	if len(suites) != 2 {
+		t.Fatalf("Wrong number of suites", len(suites))
+	}
+}
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/io_test.go b/go/src/bitbucket.org/tebeka/go2xunit/io_test.go
new file mode 100644
index 0000000..5a206a3
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/io_test.go
@@ -0,0 +1,126 @@
+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)
+	}
+}
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/main_test.go b/go/src/bitbucket.org/tebeka/go2xunit/main_test.go
new file mode 100644
index 0000000..3e2d977
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/main_test.go
@@ -0,0 +1,41 @@
+package main
+
+import (
+	"bytes"
+	"io/ioutil"
+	"os"
+	"testing"
+)
+
+func Test_MainXunitNet(t *testing.T) {
+	filename := "gocheck-pass.out"
+	args := []string{"-gocheck", "-input", "data/" + filename}
+	os.Args = append(os.Args, args...)
+
+	expected, err := ioutil.ReadAll(getOutputData("xunit", filename))
+	checkError(err)
+
+	// this can be done only once or test framework will panic
+	actual := []byte(captureOutput(main))
+
+	if !bytes.Equal(expected, actual) {
+		t.Errorf("xUnit.net XML output %s differs from expected", filename)
+	}
+}
+
+// captures Stdout and returns output of function f()
+func captureOutput(f func()) string {
+	// redirect output
+	old := os.Stdout
+	r, w, _ := os.Pipe()
+	os.Stdout = w
+
+	f()
+
+	// reset output again
+	w.Close()
+	os.Stdout = old
+
+	captured, _ := ioutil.ReadAll(r)
+	return string(captured)
+}
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/push-to-github.sh b/go/src/bitbucket.org/tebeka/go2xunit/push-to-github.sh
new file mode 100755
index 0000000..f579dc3
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/push-to-github.sh
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+hg bookmark -f -r default master
+hg push git+ssh://git@github.com/tebeka/go2xunit.git
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gocheck-empty.out.xml b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gocheck-empty.out.xml
new file mode 100644
index 0000000..17c3364
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gocheck-empty.out.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<assembly name="github.com/tischda/mmath"
+          run-date="2015-06-05" run-time="18:34:41"
+          configFile="none"
+          time="0.039"
+          total="0"
+          passed="0"
+          failed="0"
+          skipped="0"
+          environment="n/a"
+          test-framework="golang">
+
+    <class time="0.039" name="github.com/tischda/mmath"
+  	     total="0"
+  	     passed="0"
+  	     failed="0"
+  	     skipped="0">
+
+    </class>
+
+</assembly>
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gocheck-fail.out.xml b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gocheck-fail.out.xml
new file mode 100644
index 0000000..061d59a
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gocheck-fail.out.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="utf-8"?>
+<assembly name="MySuite"
+          run-date="2015-06-05" run-time="18:34:41"
+          configFile="none"
+          time="0.008"
+          total="4"
+          passed="3"
+          failed="1"
+          skipped="0"
+          environment="n/a"
+          test-framework="golang">
+
+    <class time="" name="MySuite1"
+  	     total="1"
+  	     passed="1"
+  	     failed="0"
+  	     skipped="0">
+
+        <test name="TestAdd"
+          type="test"
+          method="TestAdd"
+          result="Pass"
+          time="0.000">
+        </test>
+
+    </class>
+
+    <class time="0.008" name="MySuite"
+  	     total="3"
+  	     passed="2"
+  	     failed="1"
+  	     skipped="0">
+
+        <test name="TestDiv"
+          type="test"
+          method="TestDiv"
+          result="Fail"
+          time="">
+          <failure exception-type="go.error">
+             <message><![CDATA[mmath_test.go:38:
+    c.Assert(z, Equals, float64(x)/float64(y))
+... obtained int = 0
+... expected float64 = 0.6666666666666666
+]]></message>
+      	  </failure>
+      	</test>
+
+        <test name="TestMul"
+          type="test"
+          method="TestMul"
+          result="Pass"
+          time="0.000">
+        </test>
+
+        <test name="TestSub"
+          type="test"
+          method="TestSub"
+          result="Pass"
+          time="0.000">
+        </test>
+
+    </class>
+
+</assembly>
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gocheck-nofiles.out.xml b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gocheck-nofiles.out.xml
new file mode 100644
index 0000000..3763d8b
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gocheck-nofiles.out.xml
@@ -0,0 +1 @@
+error: no tests found
\ No newline at end of file
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gocheck-panic.out.xml b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gocheck-panic.out.xml
new file mode 100644
index 0000000..930c329
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gocheck-panic.out.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="utf-8"?>
+<assembly name="MySuite"
+          run-date="2015-06-05" run-time="18:34:41"
+          configFile="none"
+          time="0.040"
+          total="5"
+          passed="2"
+          failed="2"
+          skipped="1"
+          environment="n/a"
+          test-framework="golang">
+
+    <class time="0.040" name="MySuite"
+  	     total="5"
+  	     passed="2"
+  	     failed="2"
+  	     skipped="1">
+
+        <test name="TestAdd"
+          type="test"
+          method="TestAdd"
+          result="Pass"
+          time="0.001">
+        </test>
+
+        <test name="TestDiv"
+          type="test"
+          method="TestDiv"
+          result="Fail"
+          time="">
+          <failure exception-type="go.error">
+             <message><![CDATA[mmath_test.go:45:
+    c.Assert(z, Equals, float64(x)/float64(y))
+... obtained int = 0
+... expected float64 = 0.6666666666666666
+]]></message>
+      	  </failure>
+      	</test>
+
+        <test name="TestMul"
+          type="test"
+          method="TestMul"
+          result="Skip"
+          time="">
+        </test>
+
+        <test name="TestPanic"
+          type="test"
+          method="TestPanic"
+          result="Fail"
+          time="">
+          <failure exception-type="go.error">
+             <message><![CDATA[... Panic:  (PC=0x42546C)
+
+c:/go/src/runtime/asm_amd64.s:401
+  in call16
+c:/go/src/runtime/panic.go:387
+  in gopanic
+c:/go/src/log/log.go:307
+  in Panic
+mmath.go:22
+  in Panic
+mmath_test.go:18
+  in MySuite.TestPanic
+c:/go/src/runtime/asm_amd64.s:401
+  in call16
+c:/go/src/reflect/value.go:419
+  in Value.call
+c:/go/src/reflect/value.go:296
+  in Value.Call
+c:/go/src/runtime/asm_amd64.s:2232
+  in goexit]]></message>
+      	  </failure>
+      	</test>
+
+        <test name="TestSub"
+          type="test"
+          method="TestSub"
+          result="Pass"
+          time="0.000">
+        </test>
+
+    </class>
+
+</assembly>
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gocheck-pass.out.xml b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gocheck-pass.out.xml
new file mode 100644
index 0000000..56d67bf
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gocheck-pass.out.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<assembly name="MySuite"
+          run-date="2015-06-05" run-time="18:34:41"
+          configFile="none"
+          time="0.008"
+          total="3"
+          passed="3"
+          failed="0"
+          skipped="0"
+          environment="n/a"
+          test-framework="golang">
+
+    <class time="0.008" name="MySuite"
+  	     total="3"
+  	     passed="3"
+  	     failed="0"
+  	     skipped="0">
+
+        <test name="TestAdd"
+          type="test"
+          method="TestAdd"
+          result="Pass"
+          time="0.000">
+        </test>
+
+        <test name="TestMul"
+          type="test"
+          method="TestMul"
+          result="Pass"
+          time="0.000">
+        </test>
+
+        <test name="TestSub"
+          type="test"
+          method="TestSub"
+          result="Pass"
+          time="0.000">
+        </test>
+
+    </class>
+
+</assembly>
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gocheck-setup-miss.out.xml b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gocheck-setup-miss.out.xml
new file mode 100644
index 0000000..98ebeed
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gocheck-setup-miss.out.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8"?>
+<assembly name="FoobarSuite"
+          run-date="2015-06-05" run-time="18:34:41"
+          configFile="none"
+          time="2.383"
+          total="3"
+          passed="0"
+          failed="1"
+          skipped="2"
+          environment="n/a"
+          test-framework="golang">
+
+    <class time="2.383" name="FoobarSuite"
+  	     total="3"
+  	     passed="0"
+  	     failed="1"
+  	     skipped="2">
+
+        <test name="SetUpSuite"
+          type="test"
+          method="SetUpSuite"
+          result="Fail"
+          time="">
+          <failure exception-type="go.error">
+             <message><![CDATA[foobar_test.go:19:
+    c.Assert(err, gc.IsNil)
+... value *os.PathError = &os.PathError{Op:"stat", Path:"testdata/regexes.yaml", Err:0x2} ("stat testdata/regexes.yaml: no such file or directory")
+]]></message>
+      	  </failure>
+      	</test>
+
+        <test name="TestFrob"
+          type="test"
+          method="TestFrob"
+          result="Skip"
+          time="">
+        </test>
+
+        <test name="TestThing"
+          type="test"
+          method="TestThing"
+          result="Skip"
+          time="">
+        </test>
+
+    </class>
+
+</assembly>
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gotest-0.out.xml b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gotest-0.out.xml
new file mode 100644
index 0000000..b916ede
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gotest-0.out.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<assembly name="package"
+          run-date="2015-06-05" run-time="18:34:41"
+          configFile="none"
+          time="0.194"
+          total="2"
+          passed="2"
+          failed="0"
+          skipped="0"
+          environment="n/a"
+          test-framework="golang">
+
+    <class time="0.194" name="package"
+  	     total="2"
+  	     passed="2"
+  	     failed="0"
+  	     skipped="0">
+
+        <test name="ExampleA"
+          type="test"
+          method="ExampleA"
+          result="Pass"
+          time="4.0003">
+        </test>
+
+        <test name="ExampleOp"
+          type="test"
+          method="ExampleOp"
+          result="Pass"
+          time="0">
+        </test>
+
+    </class>
+
+</assembly>
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gotest-1.5.out.xml b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gotest-1.5.out.xml
new file mode 100644
index 0000000..3182a72
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gotest-1.5.out.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="utf-8"?>
+<assembly name="_/home/miki/Projects/go/src/bitbucket.org/tebeka/go2xunit/demo"
+          run-date="2015-06-05" run-time="18:34:41"
+          configFile="none"
+          time="0.002"
+          total="4"
+          passed="3"
+          failed="1"
+          skipped="0"
+          environment="n/a"
+          test-framework="golang">
+
+    <class time="0.002" name="_/home/miki/Projects/go/src/bitbucket.org/tebeka/go2xunit/demo"
+  	     total="4"
+  	     passed="3"
+  	     failed="1"
+  	     skipped="0">
+
+        <test name="TestAdd"
+          type="test"
+          method="TestAdd"
+          result="Pass"
+          time="0.00">
+        </test>
+
+        <test name="TestSub"
+          type="test"
+          method="TestSub"
+          result="Pass"
+          time="0.00">
+        </test>
+
+        <test name="TestMul"
+          type="test"
+          method="TestMul"
+          result="Pass"
+          time="0.00">
+        </test>
+
+        <test name="TestDiv"
+          type="test"
+          method="TestDiv"
+          result="Fail"
+          time="0.00">
+          <failure exception-type="go.error">
+             <message><![CDATA[	mmath_test.go:35: 2/3 != 0.666667]]></message>
+      	  </failure>
+      	</test>
+
+    </class>
+
+</assembly>
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gotest-datarace.out.xml b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gotest-datarace.out.xml
new file mode 100644
index 0000000..0b10323
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gotest-datarace.out.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<assembly name="go2xunit/demo"
+          run-date="2015-06-05" run-time="18:34:41"
+          configFile="none"
+          time="0.006"
+          total="1"
+          passed="1"
+          failed="0"
+          skipped="0"
+          environment="n/a"
+          test-framework="golang">
+
+    <class time="0.006" name="go2xunit/demo"
+  	     total="1"
+  	     passed="1"
+  	     failed="0"
+  	     skipped="0">
+
+        <test name="TestDataRace"
+          type="test"
+          method="TestDataRace"
+          result="Pass"
+          time="0.00">
+        </test>
+
+    </class>
+
+</assembly>
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gotest-empty.out.xml b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gotest-empty.out.xml
new file mode 100644
index 0000000..a2a98c4
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gotest-empty.out.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<assembly name="go2xunit/demo"
+          run-date="2015-06-05" run-time="18:34:41"
+          configFile="none"
+          time="0.021"
+          total="0"
+          passed="0"
+          failed="0"
+          skipped="0"
+          environment="n/a"
+          test-framework="golang">
+
+    <class time="0.021" name="go2xunit/demo"
+  	     total="0"
+  	     passed="0"
+  	     failed="0"
+  	     skipped="0">
+
+    </class>
+
+</assembly>
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gotest-fail.out.xml b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gotest-fail.out.xml
new file mode 100644
index 0000000..84c723c
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gotest-fail.out.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="utf-8"?>
+<assembly name="_/home/miki/Projects/goroot/src/xunit"
+          run-date="2015-06-05" run-time="18:34:41"
+          configFile="none"
+          time="0.004"
+          total="4"
+          passed="3"
+          failed="1"
+          skipped="0"
+          environment="n/a"
+          test-framework="golang">
+
+    <class time="0.004" name="_/home/miki/Projects/goroot/src/xunit"
+  	     total="4"
+  	     passed="3"
+  	     failed="1"
+  	     skipped="0">
+
+        <test name="TestAdd"
+          type="test"
+          method="TestAdd"
+          result="Pass"
+          time="0.00">
+        </test>
+
+        <test name="TestSub"
+          type="test"
+          method="TestSub"
+          result="Pass"
+          time="0.00">
+        </test>
+
+        <test name="TestSubFail"
+          type="test"
+          method="TestSubFail"
+          result="Fail"
+          time="0.00">
+          <failure exception-type="go.error">
+             <message><![CDATA[	xunit_test.go:22: 3-1 != 3
+		Some newline goes here]]></message>
+      	  </failure>
+      	</test>
+
+        <test name="TestSubOK"
+          type="test"
+          method="TestSubOK"
+          result="Pass"
+          time="0.00">
+        </test>
+
+    </class>
+
+</assembly>
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gotest-log.out.xml b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gotest-log.out.xml
new file mode 100644
index 0000000..fc94805
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gotest-log.out.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<assembly name="go2xunit/demo"
+          run-date="2015-06-05" run-time="18:34:41"
+          configFile="none"
+          time="0.006"
+          total="1"
+          passed="1"
+          failed="0"
+          skipped="0"
+          environment="n/a"
+          test-framework="golang">
+
+    <class time="0.006" name="go2xunit/demo"
+  	     total="1"
+  	     passed="1"
+  	     failed="0"
+  	     skipped="0">
+
+        <test name="TestLogOutput"
+          type="test"
+          method="TestLogOutput"
+          result="Pass"
+          time="0.00">
+        </test>
+
+    </class>
+
+</assembly>
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gotest-multi.out.xml b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gotest-multi.out.xml
new file mode 100644
index 0000000..1740a87
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gotest-multi.out.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<assembly name="controllers"
+          run-date="2015-06-05" run-time="18:34:41"
+          configFile="none"
+          time="0.024"
+          total="4"
+          passed="4"
+          failed="0"
+          skipped="0"
+          environment="n/a"
+          test-framework="golang">
+
+    <class time="0.024" name="controllers"
+  	     total="4"
+  	     passed="4"
+  	     failed="0"
+  	     skipped="0">
+
+        <test name="TestApp_AssetPath"
+          type="test"
+          method="TestApp_AssetPath"
+          result="Pass"
+          time="0.00">
+        </test>
+
+        <test name="TestTrimTransferCeil"
+          type="test"
+          method="TestTrimTransferCeil"
+          result="Pass"
+          time="0.00">
+        </test>
+
+        <test name="TestStatusDescription"
+          type="test"
+          method="TestStatusDescription"
+          result="Pass"
+          time="0.00">
+        </test>
+
+        <test name="TestCode"
+          type="test"
+          method="TestCode"
+          result="Pass"
+          time="0.00">
+        </test>
+
+    </class>
+
+</assembly>
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gotest-multierror.out.xml b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gotest-multierror.out.xml
new file mode 100644
index 0000000..876b313
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gotest-multierror.out.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<assembly name="skeleton"
+          run-date="2015-06-05" run-time="18:34:41"
+          configFile="none"
+          time="0.047"
+          total="2"
+          passed="0"
+          failed="2"
+          skipped="0"
+          environment="n/a"
+          test-framework="golang">
+
+    <class time="0.047" name="skeleton"
+  	     total="2"
+  	     passed="0"
+  	     failed="2"
+  	     skipped="0">
+
+        <test name="TestError1"
+          type="test"
+          method="TestError1"
+          result="Fail"
+          time="0.00">
+          <failure exception-type="go.error">
+             <message><![CDATA[	main_test.go:10: something went wrong]]></message>
+      	  </failure>
+      	</test>
+
+        <test name="TestError2"
+          type="test"
+          method="TestError2"
+          result="Fail"
+          time="0.00">
+          <failure exception-type="go.error">
+             <message><![CDATA[	main_test.go:14: something new went wrong]]></message>
+      	  </failure>
+      	</test>
+
+    </class>
+
+</assembly>
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gotest-nofiles.out.xml b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gotest-nofiles.out.xml
new file mode 100644
index 0000000..1740a87
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gotest-nofiles.out.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<assembly name="controllers"
+          run-date="2015-06-05" run-time="18:34:41"
+          configFile="none"
+          time="0.024"
+          total="4"
+          passed="4"
+          failed="0"
+          skipped="0"
+          environment="n/a"
+          test-framework="golang">
+
+    <class time="0.024" name="controllers"
+  	     total="4"
+  	     passed="4"
+  	     failed="0"
+  	     skipped="0">
+
+        <test name="TestApp_AssetPath"
+          type="test"
+          method="TestApp_AssetPath"
+          result="Pass"
+          time="0.00">
+        </test>
+
+        <test name="TestTrimTransferCeil"
+          type="test"
+          method="TestTrimTransferCeil"
+          result="Pass"
+          time="0.00">
+        </test>
+
+        <test name="TestStatusDescription"
+          type="test"
+          method="TestStatusDescription"
+          result="Pass"
+          time="0.00">
+        </test>
+
+        <test name="TestCode"
+          type="test"
+          method="TestCode"
+          result="Pass"
+          time="0.00">
+        </test>
+
+    </class>
+
+</assembly>
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gotest-num.out.xml b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gotest-num.out.xml
new file mode 100644
index 0000000..d971bcb
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gotest-num.out.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<assembly name="qbox.us/largefile"
+          run-date="2015-06-05" run-time="18:34:41"
+          configFile="none"
+          time="0.012"
+          total="1"
+          passed="1"
+          failed="0"
+          skipped="0"
+          environment="n/a"
+          test-framework="golang">
+
+    <class time="0.012" name="qbox.us/largefile"
+  	     total="1"
+  	     passed="1"
+  	     failed="0"
+  	     skipped="0">
+
+        <test name="TestBasic-8"
+          type="test"
+          method="TestBasic-8"
+          result="Pass"
+          time="0.00">
+        </test>
+
+    </class>
+
+</assembly>
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gotest-panic.out.xml b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gotest-panic.out.xml
new file mode 100644
index 0000000..949aa22
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gotest-panic.out.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<assembly name="go2xunit/demo"
+          run-date="2015-06-05" run-time="18:34:41"
+          configFile="none"
+          time="0.020"
+          total="1"
+          passed="0"
+          failed="1"
+          skipped="0"
+          environment="n/a"
+          test-framework="golang">
+
+    <class time="0.020" name="go2xunit/demo"
+  	     total="1"
+  	     passed="0"
+  	     failed="1"
+  	     skipped="0">
+
+        <test name="TestPanic"
+          type="test"
+          method="TestPanic"
+          result="Fail"
+          time="N/A">
+          <failure exception-type="go.error">
+             <message><![CDATA[fatal error: all goroutines are asleep - deadlock!
+...]]></message>
+      	  </failure>
+      	</test>
+
+    </class>
+
+</assembly>
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gotest-pass.out.xml b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gotest-pass.out.xml
new file mode 100644
index 0000000..b0e94e6
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gotest-pass.out.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<assembly name="go2xunit/demo"
+          run-date="2015-06-05" run-time="18:34:41"
+          configFile="none"
+          time="0.006"
+          total="3"
+          passed="3"
+          failed="0"
+          skipped="0"
+          environment="n/a"
+          test-framework="golang">
+
+    <class time="0.006" name="go2xunit/demo"
+  	     total="3"
+  	     passed="3"
+  	     failed="0"
+  	     skipped="0">
+
+        <test name="TestAdd"
+          type="test"
+          method="TestAdd"
+          result="Pass"
+          time="0.00">
+        </test>
+
+        <test name="TestSub"
+          type="test"
+          method="TestSub"
+          result="Pass"
+          time="0.00">
+        </test>
+
+        <test name="TestMul"
+          type="test"
+          method="TestMul"
+          result="Pass"
+          time="0.00">
+        </test>
+
+    </class>
+
+</assembly>
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gotest-testify-suite.out.xml b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gotest-testify-suite.out.xml
new file mode 100644
index 0000000..9949e5a
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gotest-testify-suite.out.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8"?>
+<assembly name="testify-suite"
+          run-date="2015-06-05" run-time="18:34:41"
+          configFile="none"
+          time="0.071"
+          total="3"
+          passed="3"
+          failed="0"
+          skipped="0"
+          environment="n/a"
+          test-framework="golang">
+
+    <class time="" name="TestSuite"
+  	     total="2"
+  	     passed="2"
+  	     failed="0"
+  	     skipped="0">
+
+        <test name="TestA"
+          type="test"
+          method="TestA"
+          result="Pass"
+          time="0.01">
+        </test>
+
+        <test name="TestB"
+          type="test"
+          method="TestB"
+          result="Pass"
+          time="0.02">
+        </test>
+
+    </class>
+
+    <class time="0.071" name="testify-suite"
+  	     total="1"
+  	     passed="1"
+  	     failed="0"
+  	     skipped="0">
+
+        <test name="TestC"
+          type="test"
+          method="TestC"
+          result="Pass"
+          time="0.04">
+        </test>
+
+    </class>
+
+</assembly>
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gotest.out.xml b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gotest.out.xml
new file mode 100644
index 0000000..6fd64ea
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit.net/gotest.out.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="utf-8"?>
+<assembly name="_/home/miki/Projects/goroot/src/anotherTest"
+          run-date="2015-06-05" run-time="18:34:41"
+          configFile="none"
+          time="0.004"
+          total="6"
+          passed="4"
+          failed="1"
+          skipped="1"
+          environment="n/a"
+          test-framework="golang">
+
+    <class time="0.004" name="_/home/miki/Projects/goroot/src/xunit"
+  	     total="5"
+  	     passed="3"
+  	     failed="1"
+  	     skipped="1">
+
+        <test name="TestAdd"
+          type="test"
+          method="TestAdd"
+          result="Pass"
+          time="0.00">
+        </test>
+
+        <test name="TestSub"
+          type="test"
+          method="TestSub"
+          result="Pass"
+          time="0.00">
+        </test>
+
+        <test name="TestSubFail"
+          type="test"
+          method="TestSubFail"
+          result="Fail"
+          time="0.00">
+          <failure exception-type="go.error">
+             <message><![CDATA[	xunit_test.go:22: 3-1 != 3
+		Some newline goes here]]></message>
+      	  </failure>
+      	</test>
+
+        <test name="TestSubOK"
+          type="test"
+          method="TestSubOK"
+          result="Pass"
+          time="0.00">
+        </test>
+
+        <test name="TestSubSkip"
+          type="test"
+          method="TestSubSkip"
+          result="Skip"
+          time="0.00">
+        </test>
+
+    </class>
+
+    <class time="0.000" name="_/home/miki/Projects/goroot/src/anotherTest"
+  	     total="1"
+  	     passed="1"
+  	     failed="0"
+  	     skipped="0">
+
+        <test name="TestAdd"
+          type="test"
+          method="TestAdd"
+          result="Pass"
+          time="0.00">
+        </test>
+
+    </class>
+
+</assembly>
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gocheck-empty.out.xml b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gocheck-empty.out.xml
new file mode 100644
index 0000000..6a398fd
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gocheck-empty.out.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>
+  <testsuite name="github.com/tischda/mmath" tests="0" errors="0" failures="0" skip="0">
+  </testsuite>
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gocheck-fail.out.xml b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gocheck-fail.out.xml
new file mode 100644
index 0000000..3570888
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gocheck-fail.out.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<testsuites>
+  <testsuite name="MySuite1" tests="1" errors="0" failures="0" skip="0">
+    <testcase classname="MySuite1" name="TestAdd" time="0.000">
+
+    </testcase>
+  </testsuite>
+  <testsuite name="MySuite" tests="3" errors="0" failures="1" skip="0">
+    <testcase classname="MySuite" name="TestDiv" time="">
+
+      <failure type="go.error" message="error">
+        <![CDATA[mmath_test.go:38:
+    c.Assert(z, Equals, float64(x)/float64(y))
+... obtained int = 0
+... expected float64 = 0.6666666666666666
+]]>
+      </failure>    </testcase>
+    <testcase classname="MySuite" name="TestMul" time="0.000">
+
+    </testcase>
+    <testcase classname="MySuite" name="TestSub" time="0.000">
+
+    </testcase>
+  </testsuite>
+</testsuites>
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gocheck-nofiles.out.xml b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gocheck-nofiles.out.xml
new file mode 100644
index 0000000..3763d8b
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gocheck-nofiles.out.xml
@@ -0,0 +1 @@
+error: no tests found
\ No newline at end of file
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gocheck-panic.out.xml b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gocheck-panic.out.xml
new file mode 100644
index 0000000..df4fd26
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gocheck-panic.out.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+  <testsuite name="MySuite" tests="5" errors="0" failures="2" skip="1">
+    <testcase classname="MySuite" name="TestAdd" time="0.001">
+
+    </testcase>
+    <testcase classname="MySuite" name="TestDiv" time="">
+
+      <failure type="go.error" message="error">
+        <![CDATA[mmath_test.go:45:
+    c.Assert(z, Equals, float64(x)/float64(y))
+... obtained int = 0
+... expected float64 = 0.6666666666666666
+]]>
+      </failure>    </testcase>
+    <testcase classname="MySuite" name="TestMul" time="">
+      <skipped/> 
+    </testcase>
+    <testcase classname="MySuite" name="TestPanic" time="">
+
+      <failure type="go.error" message="error">
+        <![CDATA[... Panic:  (PC=0x42546C)
+
+c:/go/src/runtime/asm_amd64.s:401
+  in call16
+c:/go/src/runtime/panic.go:387
+  in gopanic
+c:/go/src/log/log.go:307
+  in Panic
+mmath.go:22
+  in Panic
+mmath_test.go:18
+  in MySuite.TestPanic
+c:/go/src/runtime/asm_amd64.s:401
+  in call16
+c:/go/src/reflect/value.go:419
+  in Value.call
+c:/go/src/reflect/value.go:296
+  in Value.Call
+c:/go/src/runtime/asm_amd64.s:2232
+  in goexit]]>
+      </failure>    </testcase>
+    <testcase classname="MySuite" name="TestSub" time="0.000">
+
+    </testcase>
+  </testsuite>
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gocheck-pass.out.xml b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gocheck-pass.out.xml
new file mode 100644
index 0000000..d9ac257
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gocheck-pass.out.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+  <testsuite name="MySuite" tests="3" errors="0" failures="0" skip="0">
+    <testcase classname="MySuite" name="TestAdd" time="0.000">
+
+    </testcase>
+    <testcase classname="MySuite" name="TestMul" time="0.000">
+
+    </testcase>
+    <testcase classname="MySuite" name="TestSub" time="0.000">
+
+    </testcase>
+  </testsuite>
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gocheck-setup-miss.out.xml b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gocheck-setup-miss.out.xml
new file mode 100644
index 0000000..b4e1f52
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gocheck-setup-miss.out.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+  <testsuite name="FoobarSuite" tests="3" errors="0" failures="1" skip="2">
+    <testcase classname="FoobarSuite" name="SetUpSuite" time="">
+
+      <failure type="go.error" message="error">
+        <![CDATA[foobar_test.go:19:
+    c.Assert(err, gc.IsNil)
+... value *os.PathError = &os.PathError{Op:"stat", Path:"testdata/regexes.yaml", Err:0x2} ("stat testdata/regexes.yaml: no such file or directory")
+]]>
+      </failure>    </testcase>
+    <testcase classname="FoobarSuite" name="TestFrob" time="">
+      <skipped/> 
+    </testcase>
+    <testcase classname="FoobarSuite" name="TestThing" time="">
+      <skipped/> 
+    </testcase>
+  </testsuite>
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gotest-0.out.xml b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gotest-0.out.xml
new file mode 100644
index 0000000..b761761
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gotest-0.out.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+  <testsuite name="package" tests="2" errors="0" failures="0" skip="0">
+    <testcase classname="package" name="ExampleA" time="4.0003">
+
+    </testcase>
+    <testcase classname="package" name="ExampleOp" time="0">
+
+    </testcase>
+  </testsuite>
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gotest-1.5.out.xml b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gotest-1.5.out.xml
new file mode 100644
index 0000000..d7ef9f3
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gotest-1.5.out.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+  <testsuite name="_/home/miki/Projects/go/src/bitbucket.org/tebeka/go2xunit/demo" tests="4" errors="0" failures="1" skip="0">
+    <testcase classname="_/home/miki/Projects/go/src/bitbucket.org/tebeka/go2xunit/demo" name="TestAdd" time="0.00">
+
+    </testcase>
+    <testcase classname="_/home/miki/Projects/go/src/bitbucket.org/tebeka/go2xunit/demo" name="TestSub" time="0.00">
+
+    </testcase>
+    <testcase classname="_/home/miki/Projects/go/src/bitbucket.org/tebeka/go2xunit/demo" name="TestMul" time="0.00">
+
+    </testcase>
+    <testcase classname="_/home/miki/Projects/go/src/bitbucket.org/tebeka/go2xunit/demo" name="TestDiv" time="0.00">
+
+      <failure type="go.error" message="error">
+        <![CDATA[	mmath_test.go:35: 2/3 != 0.666667]]>
+      </failure>    </testcase>
+  </testsuite>
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gotest-datarace.out.xml b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gotest-datarace.out.xml
new file mode 100644
index 0000000..72e1852
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gotest-datarace.out.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+  <testsuite name="go2xunit/demo" tests="1" errors="0" failures="0" skip="0">
+    <testcase classname="go2xunit/demo" name="TestDataRace" time="0.00">
+
+    </testcase>
+  </testsuite>
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gotest-empty.out.xml b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gotest-empty.out.xml
new file mode 100644
index 0000000..3af4721
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gotest-empty.out.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>
+  <testsuite name="go2xunit/demo" tests="0" errors="0" failures="0" skip="0">
+  </testsuite>
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gotest-fail.out.xml b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gotest-fail.out.xml
new file mode 100644
index 0000000..20d54b8
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gotest-fail.out.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+  <testsuite name="_/home/miki/Projects/goroot/src/xunit" tests="4" errors="0" failures="1" skip="0">
+    <testcase classname="_/home/miki/Projects/goroot/src/xunit" name="TestAdd" time="0.00">
+
+    </testcase>
+    <testcase classname="_/home/miki/Projects/goroot/src/xunit" name="TestSub" time="0.00">
+
+    </testcase>
+    <testcase classname="_/home/miki/Projects/goroot/src/xunit" name="TestSubFail" time="0.00">
+
+      <failure type="go.error" message="error">
+        <![CDATA[	xunit_test.go:22: 3-1 != 3
+		Some newline goes here]]>
+      </failure>    </testcase>
+    <testcase classname="_/home/miki/Projects/goroot/src/xunit" name="TestSubOK" time="0.00">
+
+    </testcase>
+  </testsuite>
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gotest-log.out.xml b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gotest-log.out.xml
new file mode 100644
index 0000000..7c7f339
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gotest-log.out.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+  <testsuite name="go2xunit/demo" tests="1" errors="0" failures="0" skip="0">
+    <testcase classname="go2xunit/demo" name="TestLogOutput" time="0.00">
+
+    </testcase>
+  </testsuite>
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gotest-multi.out.xml b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gotest-multi.out.xml
new file mode 100644
index 0000000..8fc6bd7
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gotest-multi.out.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+  <testsuite name="controllers" tests="4" errors="0" failures="0" skip="0">
+    <testcase classname="controllers" name="TestApp_AssetPath" time="0.00">
+
+    </testcase>
+    <testcase classname="controllers" name="TestTrimTransferCeil" time="0.00">
+
+    </testcase>
+    <testcase classname="controllers" name="TestStatusDescription" time="0.00">
+
+    </testcase>
+    <testcase classname="controllers" name="TestCode" time="0.00">
+
+    </testcase>
+  </testsuite>
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gotest-multierror.out.xml b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gotest-multierror.out.xml
new file mode 100644
index 0000000..76c8ef8
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gotest-multierror.out.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+  <testsuite name="skeleton" tests="2" errors="0" failures="2" skip="0">
+    <testcase classname="skeleton" name="TestError1" time="0.00">
+
+      <failure type="go.error" message="error">
+        <![CDATA[	main_test.go:10: something went wrong]]>
+      </failure>    </testcase>
+    <testcase classname="skeleton" name="TestError2" time="0.00">
+
+      <failure type="go.error" message="error">
+        <![CDATA[	main_test.go:14: something new went wrong]]>
+      </failure>    </testcase>
+  </testsuite>
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gotest-nofiles.out.xml b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gotest-nofiles.out.xml
new file mode 100644
index 0000000..8fc6bd7
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gotest-nofiles.out.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+  <testsuite name="controllers" tests="4" errors="0" failures="0" skip="0">
+    <testcase classname="controllers" name="TestApp_AssetPath" time="0.00">
+
+    </testcase>
+    <testcase classname="controllers" name="TestTrimTransferCeil" time="0.00">
+
+    </testcase>
+    <testcase classname="controllers" name="TestStatusDescription" time="0.00">
+
+    </testcase>
+    <testcase classname="controllers" name="TestCode" time="0.00">
+
+    </testcase>
+  </testsuite>
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gotest-num.out.xml b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gotest-num.out.xml
new file mode 100644
index 0000000..643bc3f
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gotest-num.out.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+  <testsuite name="qbox.us/largefile" tests="1" errors="0" failures="0" skip="0">
+    <testcase classname="qbox.us/largefile" name="TestBasic-8" time="0.00">
+
+    </testcase>
+  </testsuite>
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gotest-panic.out.xml b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gotest-panic.out.xml
new file mode 100644
index 0000000..f2bed44
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gotest-panic.out.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+  <testsuite name="go2xunit/demo" tests="1" errors="0" failures="1" skip="0">
+    <testcase classname="go2xunit/demo" name="TestPanic" time="N/A">
+
+      <failure type="go.error" message="error">
+        <![CDATA[fatal error: all goroutines are asleep - deadlock!
+...]]>
+      </failure>    </testcase>
+  </testsuite>
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gotest-pass.out.xml b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gotest-pass.out.xml
new file mode 100644
index 0000000..67898e7
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gotest-pass.out.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+  <testsuite name="go2xunit/demo" tests="3" errors="0" failures="0" skip="0">
+    <testcase classname="go2xunit/demo" name="TestAdd" time="0.00">
+
+    </testcase>
+    <testcase classname="go2xunit/demo" name="TestSub" time="0.00">
+
+    </testcase>
+    <testcase classname="go2xunit/demo" name="TestMul" time="0.00">
+
+    </testcase>
+  </testsuite>
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gotest-testify-suite.out.xml b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gotest-testify-suite.out.xml
new file mode 100644
index 0000000..ee6a8fa
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gotest-testify-suite.out.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<testsuites>
+  <testsuite name="TestSuite" tests="2" errors="0" failures="0" skip="0">
+    <testcase classname="TestSuite" name="TestA" time="0.01">
+
+    </testcase>
+    <testcase classname="TestSuite" name="TestB" time="0.02">
+
+    </testcase>
+  </testsuite>
+  <testsuite name="testify-suite" tests="1" errors="0" failures="0" skip="0">
+    <testcase classname="testify-suite" name="TestC" time="0.04">
+
+    </testcase>
+  </testsuite>
+</testsuites>
diff --git a/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gotest.out.xml b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gotest.out.xml
new file mode 100644
index 0000000..ef928ed
--- /dev/null
+++ b/go/src/bitbucket.org/tebeka/go2xunit/xml/xunit/gotest.out.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<testsuites>
+  <testsuite name="_/home/miki/Projects/goroot/src/xunit" tests="5" errors="0" failures="1" skip="1">
+    <testcase classname="_/home/miki/Projects/goroot/src/xunit" name="TestAdd" time="0.00">
+
+    </testcase>
+    <testcase classname="_/home/miki/Projects/goroot/src/xunit" name="TestSub" time="0.00">
+
+    </testcase>
+    <testcase classname="_/home/miki/Projects/goroot/src/xunit" name="TestSubFail" time="0.00">
+
+      <failure type="go.error" message="error">
+        <![CDATA[	xunit_test.go:22: 3-1 != 3
+		Some newline goes here]]>
+      </failure>    </testcase>
+    <testcase classname="_/home/miki/Projects/goroot/src/xunit" name="TestSubOK" time="0.00">
+
+    </testcase>
+    <testcase classname="_/home/miki/Projects/goroot/src/xunit" name="TestSubSkip" time="0.00">
+      <skipped/> 
+    </testcase>
+  </testsuite>
+  <testsuite name="_/home/miki/Projects/goroot/src/anotherTest" tests="1" errors="0" failures="0" skip="0">
+    <testcase classname="_/home/miki/Projects/goroot/src/anotherTest" name="TestAdd" time="0.00">
+
+    </testcase>
+  </testsuite>
+</testsuites>