summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/gobang.go5
-rw-r--r--tests/gobang.go43
2 files changed, 48 insertions, 0 deletions
diff --git a/src/gobang.go b/src/gobang.go
index a75688d..9718361 100644
--- a/src/gobang.go
+++ b/src/gobang.go
@@ -506,6 +506,11 @@ func TErrorNil(err error) {
}
}
+func TMust[T any](x T, err error) T {
+ TErrorIf(err)
+ return x
+}
+
var unfilteringLevel = new(slog.LevelVar)
func SetLoggerOutput(w io.Writer, args ...any) {
unfilteringLevel.Set(slog.LevelDebug)
diff --git a/tests/gobang.go b/tests/gobang.go
index e6c4ef2..003b01d 100644
--- a/tests/gobang.go
+++ b/tests/gobang.go
@@ -1118,6 +1118,48 @@ func test_TErrorNil() {
})
}
+func test_TMust() {
+ TestStart("TMust()")
+
+ myErr := errors.New("a test error")
+ fn := func(shouldError bool) (int, error) {
+ if shouldError {
+ return 0, myErr
+ } else {
+ return 10, nil
+ }
+ }
+
+ Testing("noop when error is nil", func() {
+ n := TMust(fn(false))
+ TAssertEqual(n, 10)
+ })
+
+ Testing("exit on non nil", func() {
+ var x int
+ exitFn := func(val int) {
+ x = val
+ }
+
+ var w strings.Builder
+
+ savedExitFn := testExitFn
+ savedOutput := testOutput
+ testExitFn = exitFn
+ testOutput = &w
+
+ n := TMust(fn(true))
+ testExitFn = savedExitFn
+ testOutput = savedOutput
+
+ given := strings.Split(w.String(), "\n")[1]
+
+ TAssertEqual(n, 0)
+ TAssertEqual(x, 100)
+ TAssertEqual(given, fmt.Sprintf("Unexpected error: %#v", myErr))
+ })
+}
+
func test_SetLoggerOutput() {
TestStart("SetLoggerOutput()")
@@ -1514,6 +1556,7 @@ func MainTest() {
test_TAssertEqualI()
test_TErrorIf()
test_TErrorNil()
+ test_TMust()
test_SetLoggerOutput()
test_levelFromString()
test_setLogLevel()