diff options
-rw-r--r-- | src/gobang.go | 5 | ||||
-rw-r--r-- | tests/gobang.go | 43 |
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() |