Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 1bd0984

Browse files
Add testing.T.Context() and testing.B.Context()
1 parent 109e076 commit 1bd0984

File tree

1 file changed

+21
-1
lines changed

1 file changed

+21
-1
lines changed

‎src/testing/testing.go‎

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ package testing
1010

1111
import (
1212
"bytes"
13+
"context"
1314
"errors"
1415
"flag"
1516
"fmt"
@@ -78,6 +79,9 @@ type common struct {
7879
tempDir string
7980
tempDirErr error
8081
tempDirSeq int32
82+
83+
ctx context.Context
84+
cancelCtx context.CancelFunc
8185
}
8286

8387
type logger struct {
@@ -152,6 +156,7 @@ func fmtDuration(d time.Duration) string {
152156
// TB is the interface common to T and B.
153157
type TB interface {
154158
Cleanup(func())
159+
Context() context.Context
155160
Error(args ...interface{})
156161
Errorf(format string, args ...interface{})
157162
Fail()
@@ -307,6 +312,15 @@ func (c *common) Cleanup(f func()) {
307312
c.cleanups = append(c.cleanups, f)
308313
}
309314

315+
// Context returns a context that is canceled just before
316+
// Cleanup-registered functions are called.
317+
//
318+
// Cleanup functions can wait for any resources
319+
// that shut down on [context.Context.Done] before the test or benchmark completes.
320+
func (c *common) Context() context.Context {
321+
return c.ctx
322+
}
323+
310324
// TempDir returns a temporary directory for the test to use.
311325
// The directory is automatically removed by Cleanup when the test and
312326
// all its subtests complete.
@@ -447,6 +461,9 @@ func (c *common) runCleanup() {
447461
if cleanup == nil {
448462
return
449463
}
464+
if c.cancelCtx != nil {
465+
c.cancelCtx()
466+
}
450467
cleanup()
451468
}
452469
}
@@ -606,9 +623,12 @@ func runTests(matchString func(pat, str string) (bool, error), tests []InternalT
606623
ok = true
607624

608625
ctx := newTestContext(newMatcher(matchString, flagRunRegexp, "-test.run", flagSkipRegexp))
626+
runCtx, cancelCtx := context.WithCancel(context.Background())
609627
t := &T{
610628
common: common{
611-
output: &logger{logToStdout: flagVerbose},
629+
output: &logger{logToStdout: flagVerbose},
630+
ctx: runCtx,
631+
cancelCtx: cancelCtx,
612632
},
613633
context: ctx,
614634
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /