diff options
Diffstat (limited to 'internal/stub/exit.go')
| -rw-r--r-- | internal/stub/exit.go | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/internal/stub/exit.go b/internal/stub/exit.go new file mode 100644 index 00000000..062ee2e0 --- /dev/null +++ b/internal/stub/exit.go @@ -0,0 +1,44 @@ +package stub + +import "testing" + +// PanicExit is a magic panic value treated as a simulated exit. +const PanicExit = 0xdead + +const ( + panicFailNow = 0xcafe0 + iota + panicFatal + panicFatalf +) + +// HandleExit must be deferred before calling with the stub. +func HandleExit(t testing.TB) { + switch r := recover(); r { + case PanicExit: + break + + case panicFailNow: + t.FailNow() + + case panicFatal, panicFatalf, nil: + break + + default: + panic(r) + } +} + +// handleExitNew handles exits from goroutines created by [Stub.New]. +func handleExitNew(t testing.TB) { + switch r := recover(); r { + case PanicExit, panicFatal, panicFatalf, nil: + break + + case panicFailNow: + t.Fail() + break + + default: + panic(r) + } +} |
