From bac583f89edd1360150143ff51f7264c01aa69ec Mon Sep 17 00:00:00 2001 From: Ophestra Date: Tue, 17 Mar 2026 16:09:14 +0900 Subject: internal/stub: move from container This package solves a very specific stubbing use case, in a less than elegant manner. Signed-off-by: Ophestra --- internal/stub/exit.go | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 internal/stub/exit.go (limited to 'internal/stub/exit.go') 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) + } +} -- cgit v1.3.1