diff options
| author | Ophestra <cat@gensokyo.uk> | 2026-03-17 16:09:14 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2026-03-17 16:09:14 +0900 |
| commit | bac583f89edd1360150143ff51f7264c01aa69ec (patch) | |
| tree | 47914efe1ae9fae256ef93725097bdb9255c03d5 /internal/stub/exit.go | |
| parent | 722989c68256469963aee963bed9c6ab4bf55b67 (diff) | |
internal/stub: move from container
This package solves a very specific stubbing use case, in a less than elegant manner.
Signed-off-by: Ophestra <cat@gensokyo.uk>
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) + } +} |
