aboutsummaryrefslogtreecommitdiff
path: root/src/testing/testing.go
diff options
context:
space:
mode:
authorBryan C. Mills <bcmills@google.com>2020-08-27 21:30:24 -0400
committerBryan C. Mills <bcmills@google.com>2020-08-28 02:46:19 +0000
commit18ea6f597c031d5f3c5160217db72d80cb62f689 (patch)
treed5b9c20529af2bdf40bb7477eea85b51705399a3 /src/testing/testing.go
parent26ad27bb026a34149ad0b1d7d56723c8b5dee3d7 (diff)
downloadgo-18ea6f597c031d5f3c5160217db72d80cb62f689.tar.gz
go-18ea6f597c031d5f3c5160217db72d80cb62f689.zip
testing: restore os.Exit(0) after every call to (*M).Run
cmd/go.TestScript/test_main_twice demonstrates a program that invokes (*M).Run twice in a row. If we only restore os.Exit(0) in m.afterOnce, we will fail to restore it after the second run and fail the test process despite both runs passing. Updates #29062 Updates #23129 Change-Id: Id22ec68f1708e4583c8dda14a8ba0efae7178b85 Reviewed-on: https://go-review.googlesource.com/c/go/+/251262 Run-TryBot: Bryan C. Mills <bcmills@google.com> Reviewed-by: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
Diffstat (limited to 'src/testing/testing.go')
-rw-r--r--src/testing/testing.go10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/testing/testing.go b/src/testing/testing.go
index d0334243f4..01743969ee 100644
--- a/src/testing/testing.go
+++ b/src/testing/testing.go
@@ -1533,11 +1533,15 @@ func (m *M) before() {
// after runs after all testing.
func (m *M) after() {
m.afterOnce.Do(func() {
- if *panicOnExit0 {
- m.deps.SetPanicOnExit0(false)
- }
m.writeProfiles()
})
+
+ // Restore PanicOnExit0 after every run, because we set it to true before
+ // every run. Otherwise, if m.Run is called multiple times the behavior of
+ // os.Exit(0) will not be restored after the second run.
+ if *panicOnExit0 {
+ m.deps.SetPanicOnExit0(false)
+ }
}
func (m *M) writeProfiles() {