From: Damien Neil Date: Fri, 20 Jun 2025 13:44:09 +0000 (+0100) Subject: testing, testing/synctest: handle T.Helper in synctest bubbles X-Git-Tag: go1.25rc2~2^2~44 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=49cdf0c42e320dfed044baa551610f081eafb781;p=gostls13.git testing, testing/synctest: handle T.Helper in synctest bubbles Fixes #74199 Change-Id: I6a15fbd59a3a3f8c496440f56d09d695e1504e4e Reviewed-on: https://go-review.googlesource.com/c/go/+/682576 LUCI-TryBot-Result: Go LUCI Reviewed-by: Alan Donovan Auto-Submit: Damien Neil --- diff --git a/src/testing/synctest/helper_test.go b/src/testing/synctest/helper_test.go new file mode 100644 index 0000000000..7547d3eac6 --- /dev/null +++ b/src/testing/synctest/helper_test.go @@ -0,0 +1,15 @@ +// Copyright 2025 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package synctest_test + +import "testing" + +// helperLog is a t.Helper which logs. +// Since it is a helper, the log prefix should contain +// the caller's file, not helper_test.go. +func helperLog(t *testing.T, s string) { + t.Helper() + t.Log(s) +} diff --git a/src/testing/synctest/synctest_test.go b/src/testing/synctest/synctest_test.go index 822fd6fe1c..9c73178750 100644 --- a/src/testing/synctest/synctest_test.go +++ b/src/testing/synctest/synctest_test.go @@ -140,6 +140,18 @@ func TestRun(t *testing.T) { }) } +func TestHelper(t *testing.T) { + runTest(t, []string{"-test.v"}, func() { + synctest.Test(t, func(t *testing.T) { + helperLog(t, "log in helper") + }) + }, `^=== RUN TestHelper + synctest_test.go:.* log in helper +--- PASS: TestHelper.* +PASS +$`) +} + func wantPanic(t *testing.T, want string) { if e := recover(); e != nil { if got := fmt.Sprint(e); got != want { diff --git a/src/testing/testing.go b/src/testing/testing.go index b2d4c0c938..3475bfca4a 100644 --- a/src/testing/testing.go +++ b/src/testing/testing.go @@ -1261,6 +1261,9 @@ func (c *common) Skipped() bool { // When printing file and line information, that function will be skipped. // Helper may be called simultaneously from multiple goroutines. func (c *common) Helper() { + if c.isSynctest { + c = c.parent + } c.mu.Lock() defer c.mu.Unlock() if c.helperPCs == nil {