122 lines
2.6 KiB
Go
122 lines
2.6 KiB
Go
package langext
|
|
|
|
import (
|
|
"errors"
|
|
"git.blackforestbytes.com/BlackForestBytes/goext/tst"
|
|
"testing"
|
|
)
|
|
|
|
func TestRunPanicSafeNoPanic(t *testing.T) {
|
|
called := false
|
|
err := RunPanicSafe(func() {
|
|
called = true
|
|
})
|
|
tst.AssertEqual(t, called, true)
|
|
if err != nil {
|
|
t.Errorf("expected nil err, got %v", err)
|
|
}
|
|
}
|
|
|
|
func TestRunPanicSafeRecovers(t *testing.T) {
|
|
err := RunPanicSafe(func() {
|
|
panic("boom")
|
|
})
|
|
if err == nil {
|
|
t.Fatalf("expected error from panic")
|
|
}
|
|
pwe, ok := err.(PanicWrappedErr)
|
|
if !ok {
|
|
t.Fatalf("expected PanicWrappedErr, got %T", err)
|
|
}
|
|
tst.AssertEqual(t, pwe.RecoveredObj(), "boom")
|
|
tst.AssertEqual(t, pwe.Error(), "A panic occured")
|
|
}
|
|
|
|
func TestRunPanicSafeR1NoPanic(t *testing.T) {
|
|
expected := errors.New("expected")
|
|
err := RunPanicSafeR1(func() error {
|
|
return expected
|
|
})
|
|
if err != expected {
|
|
t.Errorf("expected original error, got %v", err)
|
|
}
|
|
}
|
|
|
|
func TestRunPanicSafeR1Panics(t *testing.T) {
|
|
err := RunPanicSafeR1(func() error {
|
|
panic("boom")
|
|
})
|
|
if err == nil {
|
|
t.Fatalf("expected wrapped panic")
|
|
}
|
|
if _, ok := err.(PanicWrappedErr); !ok {
|
|
t.Errorf("expected PanicWrappedErr, got %T", err)
|
|
}
|
|
}
|
|
|
|
func TestRunPanicSafeR2NoPanic(t *testing.T) {
|
|
v, err := RunPanicSafeR2(func() (int, error) {
|
|
return 42, nil
|
|
})
|
|
tst.AssertEqual(t, v, 42)
|
|
if err != nil {
|
|
t.Errorf("expected nil err, got %v", err)
|
|
}
|
|
}
|
|
|
|
func TestRunPanicSafeR2Panics(t *testing.T) {
|
|
v, err := RunPanicSafeR2(func() (int, error) {
|
|
panic("boom")
|
|
})
|
|
tst.AssertEqual(t, v, 0) // zero value
|
|
if err == nil {
|
|
t.Errorf("expected wrapped panic")
|
|
}
|
|
}
|
|
|
|
func TestRunPanicSafeR3NoPanic(t *testing.T) {
|
|
a, b, err := RunPanicSafeR3(func() (int, string, error) {
|
|
return 1, "two", nil
|
|
})
|
|
tst.AssertEqual(t, a, 1)
|
|
tst.AssertEqual(t, b, "two")
|
|
if err != nil {
|
|
t.Errorf("expected nil err, got %v", err)
|
|
}
|
|
}
|
|
|
|
func TestRunPanicSafeR3Panics(t *testing.T) {
|
|
a, b, err := RunPanicSafeR3(func() (int, string, error) {
|
|
panic("boom")
|
|
})
|
|
tst.AssertEqual(t, a, 0)
|
|
tst.AssertEqual(t, b, "")
|
|
if err == nil {
|
|
t.Errorf("expected wrapped panic")
|
|
}
|
|
}
|
|
|
|
func TestRunPanicSafeR4NoPanic(t *testing.T) {
|
|
a, b, c, err := RunPanicSafeR4(func() (int, string, bool, error) {
|
|
return 1, "two", true, nil
|
|
})
|
|
tst.AssertEqual(t, a, 1)
|
|
tst.AssertEqual(t, b, "two")
|
|
tst.AssertEqual(t, c, true)
|
|
if err != nil {
|
|
t.Errorf("expected nil err, got %v", err)
|
|
}
|
|
}
|
|
|
|
func TestRunPanicSafeR4Panics(t *testing.T) {
|
|
a, b, c, err := RunPanicSafeR4(func() (int, string, bool, error) {
|
|
panic("boom")
|
|
})
|
|
tst.AssertEqual(t, a, 0)
|
|
tst.AssertEqual(t, b, "")
|
|
tst.AssertEqual(t, c, false)
|
|
if err == nil {
|
|
t.Errorf("expected wrapped panic")
|
|
}
|
|
}
|