diff options
author | sudoforge <no-reply@sudoforge.com> | 2025-05-08 02:43:53 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-05-08 02:43:53 -0700 |
commit | 1766f85bf9edba2cccff494a0a41bb30e244a01b (patch) | |
tree | 163bc0258aa954a8198ad7f3825d22b5b21ed122 /internal/test/test.go | |
parent | f6e7fb524e3e157f04a5fe90066e55bf1dc692ec (diff) | |
download | git-bug-1766f85bf9edba2cccff494a0a41bb30e244a01b.tar.gz git-bug-1766f85bf9edba2cccff494a0a41bb30e244a01b.zip |
test: implement support for Failed() and FailedNow() (#1399)
This change adds support to //internal/test for Failed() and
FailedNow(), and expands the support for setting and detecting the
failed status on //internal/test%recorder.
Change-Id: I04e7a978cbf0ead8d28722c0a3a0fc34136e72e1
Diffstat (limited to 'internal/test/test.go')
-rw-r--r-- | internal/test/test.go | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/internal/test/test.go b/internal/test/test.go index 1dc052bfd..8a40e30ab 100644 --- a/internal/test/test.go +++ b/internal/test/test.go @@ -38,15 +38,26 @@ func (f *flaky) Run(fn func(t testing.TB)) { var last error for attempt := 1; attempt <= f.o.MaxAttempts; attempt++ { - var failed bool + f.t.Logf("attempt %d of %d", attempt, f.o.MaxAttempts) - fn(&recorder{ + r := &recorder{ TB: f.t, - fail: func(e string) { failed = true; last = errors.New(e) }, - fatal: func(e string) { failed = true; last = errors.New(e) }, - }) + fail: func(s string) { last = errors.New(s) }, + fatal: func(s string) { last = errors.New(s) }, + } + + func() { + defer func() { + if v := recover(); v != nil { + if code, ok := v.(int); ok && code != RecorderFailNow { + panic(v) + } + } + }() + fn(r) + }() - if !failed { + if !r.Failed() { return } @@ -56,7 +67,7 @@ func (f *flaky) Run(fn func(t testing.TB)) { } } - f.t.Fatalf("[%s] test failed after %d attempts: %s", f.t.Name(), f.o.MaxAttempts, last) + f.t.Fatalf("[%s] test failed after %d attempts: %v", f.t.Name(), f.o.MaxAttempts, last) } func applyJitter(d time.Duration, jitter float64) time.Duration { |