Skip to content

Commit 2098fe3

Browse files
authored
Merge pull request #359 from bitfield/testdox
Add testdox format
2 parents f3d79ea + 18c1f57 commit 2098fe3

File tree

10 files changed

+360
-51
lines changed

10 files changed

+360
-51
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ Commonly used formats (see `--help` for a full list):
4848
* `dots` - print a character for each test.
4949
* `pkgname` (default) - print a line for each package.
5050
* `testname` - print a line for each test and package.
51+
* `testdox` - print a sentence for each test using [gotestdox](https://github.com/bitfield/gotestdox).
5152
* `standard-quiet` - the standard `go test` format.
5253
* `standard-verbose` - the standard `go test -v` format.
5354

cmd/main.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ Formats:
140140
pkgname print a line for each package
141141
pkgname-and-test-fails print a line for each package and failed test output
142142
testname print a line for each test and package
143+
testdox print a sentence for each test using gotestdox
143144
github-actions testname format with github actions log grouping
144145
standard-quiet standard go test format
145146
standard-verbose standard go test -v format

cmd/testdata/gotestsum-help-text

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ Formats:
3636
pkgname print a line for each package
3737
pkgname-and-test-fails print a line for each package and failed test output
3838
testname print a line for each test and package
39+
testdox print a sentence for each test using gotestdox
3940
github-actions testname format with github actions log grouping
4041
standard-quiet standard go test format
4142
standard-verbose standard go test -v format

go.mod

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
module gotest.tools/gotestsum
22

33
require (
4+
github.com/bitfield/gotestdox v0.2.1
45
github.com/dnephin/pflag v1.0.7
5-
github.com/fatih/color v1.13.0
6+
github.com/fatih/color v1.15.0
67
github.com/fsnotify/fsnotify v1.5.4
7-
github.com/google/go-cmp v0.5.8
8+
github.com/google/go-cmp v0.5.9
89
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510
9-
github.com/mattn/go-colorable v0.1.12 // indirect
10-
golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f
11-
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8
12-
golang.org/x/term v0.0.0-20220526004731-065cf7ba2467
13-
golang.org/x/tools v0.1.11
10+
golang.org/x/sync v0.3.0
11+
golang.org/x/sys v0.10.0
12+
golang.org/x/term v0.10.0
13+
golang.org/x/tools v0.11.0
1414
gotest.tools/v3 v3.3.0
1515
)
1616

go.sum

Lines changed: 49 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,87 @@
1+
github.com/bitfield/gotestdox v0.2.1 h1:Zj8IMLAO5/oiAKoMmtN96eyFiPZraJRTH2p0zDgtxc0=
2+
github.com/bitfield/gotestdox v0.2.1/go.mod h1:D+gwtS0urjBrzguAkTM2wodsTQYFHdpx8eqRJ3N+9pY=
13
github.com/dnephin/pflag v1.0.7 h1:oxONGlWxhmUct0YzKTgrpQv9AUA1wtPBn7zuSjJqptk=
24
github.com/dnephin/pflag v1.0.7/go.mod h1:uxE91IoWURlOiTUIA8Mq5ZZkAv3dPUfZNaT80Zm7OQE=
3-
github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w=
4-
github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
5+
github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs=
6+
github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw=
57
github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI=
68
github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU=
79
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
8-
github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg=
9-
github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
10+
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
11+
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
1012
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4=
1113
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ=
12-
github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
13-
github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40=
14-
github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
15-
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
16-
github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
17-
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
14+
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
15+
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
16+
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
17+
github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
18+
github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
19+
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
20+
github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=
21+
github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA=
1822
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
1923
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
20-
github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
24+
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
2125
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
2226
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
2327
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
2428
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
29+
golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio=
2530
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
26-
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s=
2731
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
32+
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
33+
golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
34+
golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc=
35+
golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
2836
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
2937
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
3038
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
3139
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
32-
golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
40+
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
41+
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
42+
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
43+
golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA=
3344
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
3445
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
35-
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
36-
golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f h1:Ax0t5p6N38Ga0dThY21weqDEyz2oklo4IvDkpigvkD8=
37-
golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
46+
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
47+
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
48+
golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E=
49+
golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
3850
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
3951
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
40-
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
41-
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
4252
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
4353
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
4454
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
45-
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
4655
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
47-
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
48-
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
49-
golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
5056
golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
51-
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 h1:0A+M6Uqn+Eje4kHMK80dtF3JCXC4ykBgQG4Fe06QRhQ=
52-
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
57+
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
58+
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
59+
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
60+
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
61+
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
62+
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
63+
golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA=
64+
golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
5365
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
54-
golang.org/x/term v0.0.0-20220526004731-065cf7ba2467 h1:CBpWXWQpIRjzmkkA+M7q9Fqnwd2mZr3AFqexg8YTfoM=
55-
golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
66+
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
67+
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
68+
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
69+
golang.org/x/term v0.10.0 h1:3R7pNqamzBraeqj/Tj8qt1aQ2HpmlC+Cx/qL/7hn4/c=
70+
golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o=
5671
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
5772
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
58-
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
5973
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
74+
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
75+
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
76+
golang.org/x/text v0.11.0 h1:LAntKIrcmeSKERyiOh0XMV39LXS8IE9UL2yP7+f5ij4=
77+
golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
6078
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
6179
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
6280
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
63-
golang.org/x/tools v0.1.11 h1:loJ25fNOEhSXfHrpoGj91eCUThwdNX6u24rO1xnNteY=
64-
golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4=
81+
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
82+
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
83+
golang.org/x/tools v0.11.0 h1:EMCa6U9S2LtZXLAMoWiR/R8dAQFRqbAitmbJ2UKhoi8=
84+
golang.org/x/tools v0.11.0/go.mod h1:anzJrxPjNtfgiYQYirP2CPGzGLxrH2u2QBhn6Bf3qY8=
6585
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
6686
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
6787
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=

testjson/format.go

Lines changed: 92 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@ import (
55
"fmt"
66
"io"
77
"os"
8+
"sort"
89
"strings"
910

11+
"github.com/bitfield/gotestdox"
1012
"github.com/fatih/color"
1113
)
1214

@@ -77,11 +79,65 @@ func standardJSONFormat(out io.Writer) EventFormatter {
7779
func testNameFormatTestEvent(out io.Writer, event TestEvent) {
7880
pkgPath := RelativePackagePath(event.Package)
7981

80-
fmt.Fprintf(out, "%s %s%s %s\n",
82+
fmt.Fprintf(out, "%s %s%s (%.2fs)\n",
8183
colorEvent(event)(strings.ToUpper(string(event.Action))),
8284
joinPkgToTestName(pkgPath, event.Test),
8385
formatRunID(event.RunID),
84-
fmt.Sprintf("(%.2fs)", event.Elapsed))
86+
event.Elapsed)
87+
}
88+
89+
func testDoxFormat(out io.Writer, opts FormatOptions) EventFormatter {
90+
buf := bufio.NewWriter(out)
91+
type Result struct {
92+
Event TestEvent
93+
Sentence string
94+
}
95+
getIcon := icon
96+
if opts.UseHiVisibilityIcons {
97+
getIcon = iconHiVis
98+
}
99+
results := map[string][]Result{}
100+
return eventFormatterFunc(func(event TestEvent, exec *Execution) error {
101+
switch {
102+
case event.PackageEvent():
103+
if !event.Action.IsTerminal() {
104+
return nil
105+
}
106+
if opts.HideEmptyPackages && len(results[event.Package]) == 0 {
107+
return nil
108+
}
109+
fmt.Fprintf(buf, "%s:\n", event.Package)
110+
tests := results[event.Package]
111+
sort.Slice(tests, func(i, j int) bool {
112+
return tests[i].Sentence < tests[j].Sentence
113+
})
114+
for _, r := range tests {
115+
fmt.Fprintf(buf, " %s %s (%.2fs)\n",
116+
getIcon(r.Event.Action),
117+
r.Sentence,
118+
r.Event.Elapsed)
119+
}
120+
fmt.Fprintln(buf)
121+
return buf.Flush()
122+
case event.Action.IsTerminal():
123+
// Fuzz test cases tend not to have interesting names,
124+
// so only report these if they're failures
125+
if isFuzzCase(event) {
126+
return nil
127+
}
128+
results[event.Package] = append(results[event.Package], Result{
129+
Event: event,
130+
Sentence: gotestdox.Prettify(event.Test),
131+
})
132+
}
133+
return nil
134+
})
135+
}
136+
137+
func isFuzzCase(event TestEvent) bool {
138+
return strings.HasPrefix(event.Test, "Fuzz") &&
139+
event.Action == ActionPass &&
140+
TestName(event.Test).IsSubTest()
85141
}
86142

87143
func testNameFormat(out io.Writer) EventFormatter {
@@ -188,40 +244,59 @@ func pkgNameFormat(out io.Writer, opts FormatOptions) eventFormatterFunc {
188244
}
189245
}
190246

247+
func icon(action Action) string {
248+
switch action {
249+
case ActionPass:
250+
return color.GreenString("✓")
251+
case ActionSkip:
252+
return color.YellowString("∅")
253+
case ActionFail:
254+
return color.RedString("✖")
255+
default:
256+
return ""
257+
}
258+
}
259+
260+
func iconHiVis(action Action) string {
261+
switch action {
262+
case ActionPass:
263+
return "✅"
264+
case ActionSkip:
265+
return "➖"
266+
case ActionFail:
267+
return "❌"
268+
default:
269+
return ""
270+
}
271+
}
272+
191273
func shortFormatPackageEvent(opts FormatOptions, event TestEvent, exec *Execution) string {
192274
pkg := exec.Package(event.Package)
193275

194-
var iconSkipped, iconSuccess, iconFailure string
276+
getIcon := icon
195277
if opts.UseHiVisibilityIcons {
196-
iconSkipped = "➖"
197-
iconSuccess = "✅"
198-
iconFailure = "❌"
199-
} else {
200-
iconSkipped = "∅"
201-
iconSuccess = "✓"
202-
iconFailure = "✖"
278+
getIcon = iconHiVis
203279
}
204280

205281
fmtEvent := func(action string) string {
206282
return action + " " + packageLine(event, exec.Package(event.Package))
207283
}
208-
withColor := colorEvent(event)
209284
switch event.Action {
210285
case ActionSkip:
211286
if opts.HideEmptyPackages {
212287
return ""
213288
}
214-
return fmtEvent(withColor(iconSkipped))
289+
return fmtEvent(getIcon(event.Action))
215290
case ActionPass:
216291
if pkg.Total == 0 {
217292
if opts.HideEmptyPackages {
218293
return ""
219294
}
220-
return fmtEvent(withColor(iconSkipped))
295+
return fmtEvent(getIcon(ActionSkip))
221296
}
222-
return fmtEvent(withColor(iconSuccess))
297+
return fmtEvent(getIcon(event.Action))
223298
case ActionFail:
224-
return fmtEvent(withColor(iconFailure))
299+
return fmtEvent(getIcon(event.Action))
225300
}
226301
return ""
227302
}
@@ -312,6 +387,8 @@ func NewEventFormatter(out io.Writer, format string, formatOpts FormatOptions) E
312387
return dotsFormatV1(out)
313388
case "dots-v2":
314389
return newDotFormatter(out, formatOpts)
390+
case "gotestdox", "testdox":
391+
return testDoxFormat(out, formatOpts)
315392
case "testname", "short-verbose":
316393
if os.Getenv("GITHUB_ACTIONS") == "true" {
317394
return githubActionsFormat(out)

testjson/format_test.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,13 @@ func TestFormats_DefaultGoTestJson(t *testing.T) {
8686
}
8787

8888
testCases := []testCase{
89+
{
90+
name: "testdox",
91+
format: func(out io.Writer) EventFormatter {
92+
return testDoxFormat(out, FormatOptions{})
93+
},
94+
expectedOut: "format/testdox.out",
95+
},
8996
{
9097
name: "testname",
9198
format: testNameFormat,
@@ -176,6 +183,13 @@ func TestFormats_Coverage(t *testing.T) {
176183
}
177184

178185
testCases := []testCase{
186+
{
187+
name: "testdox",
188+
format: func(out io.Writer) EventFormatter {
189+
return testDoxFormat(out, FormatOptions{})
190+
},
191+
expectedOut: "format/testdox-coverage.out",
192+
},
179193
{
180194
name: "testname",
181195
format: testNameFormat,
@@ -244,6 +258,13 @@ func TestFormats_Shuffle(t *testing.T) {
244258
}
245259

246260
testCases := []testCase{
261+
{
262+
name: "testdox",
263+
format: func(out io.Writer) EventFormatter {
264+
return testDoxFormat(out, FormatOptions{})
265+
},
266+
expectedOut: "format/testdox-shuffle.out",
267+
},
247268
{
248269
name: "testname",
249270
format: testNameFormat,

0 commit comments

Comments
 (0)