aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/stub/exit.go
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2026-03-17 16:09:14 +0900
committerOphestra <cat@gensokyo.uk>2026-03-17 16:09:14 +0900
commitbac583f89edd1360150143ff51f7264c01aa69ec (patch)
tree47914efe1ae9fae256ef93725097bdb9255c03d5 /internal/stub/exit.go
parent722989c68256469963aee963bed9c6ab4bf55b67 (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.go44
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)
+ }
+}