aboutsummaryrefslogtreecommitdiff
path: root/src/testing/testing.go
diff options
context:
space:
mode:
authorChangkun Ou <hi@changkun.us>2020-09-19 23:32:12 +0200
committerEmmanuel Odeke <emm.odeke@gmail.com>2020-09-24 19:32:05 +0000
commit4cba6c703f68a7c1718e589feaeb2530d7812fbf (patch)
treea79aa53e14c7050c9deb471a71a4f73e2a951c87 /src/testing/testing.go
parent428509402b03c608e625a4844ab0cce75e4bead2 (diff)
downloadgo-4cba6c703f68a7c1718e589feaeb2530d7812fbf.tar.gz
go-4cba6c703f68a7c1718e589feaeb2530d7812fbf.zip
testing: send t.signal only if there is no panic
If a signal is sent to t.signal before the panic is triggered, a panicking test may end up with "warning: no tests to run" because the tRunner that invokes the test in t.Run calls runtime.Goexit on panic, which causes the panicking test not be recorded in runTests. Send the signal if and only if there is no panic. Fixes #41479 Change-Id: I812f1303bfe02c443a1902732e68d21620d6672e Reviewed-on: https://go-review.googlesource.com/c/go/+/256098 Run-TryBot: Emmanuel Odeke <emm.odeke@gmail.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org> Reviewed-by: Emmanuel Odeke <emm.odeke@gmail.com> Trust: Emmanuel Odeke <emm.odeke@gmail.com> Trust: Bryan C. Mills <bcmills@google.com>
Diffstat (limited to 'src/testing/testing.go')
-rw-r--r--src/testing/testing.go10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/testing/testing.go b/src/testing/testing.go
index d86354093a..a44c0a0749 100644
--- a/src/testing/testing.go
+++ b/src/testing/testing.go
@@ -1091,10 +1091,16 @@ func tRunner(t *T, fn func(t *T)) {
// complete even if a cleanup function calls t.FailNow. See issue 41355.
didPanic := false
defer func() {
- t.signal <- signal
- if err != nil && !didPanic {
+ if didPanic {
+ return
+ }
+ if err != nil {
panic(err)
}
+ // Only report that the test is complete if it doesn't panic,
+ // as otherwise the test binary can exit before the panic is
+ // reported to the user. See issue 41479.
+ t.signal <- signal
}()
doPanic := func(err interface{}) {