panictoerr_test.gno
2.48 Kb ยท 91 lines
1package panictoerr_test
2
3import (
4 "errors"
5 "testing"
6
7 pte "gno.land/p/aeddi/panictoerr"
8 "gno.land/p/nt/uassert"
9 grc20 "gno.land/r/demo/defi/grc20factory"
10)
11
12// Test PanicToError with different types as panic value.
13func TestSimplePanicToError(t *testing.T) {
14 err := pte.PanicToError(func() {
15 panic("string")
16 })
17 uassert.Equal(t, err.Error(), "string")
18
19 err = pte.PanicToError(func() {
20 panic(errors.New("error"))
21 })
22 uassert.Equal(t, err.Error(), "error")
23
24 err = pte.PanicToError(func() {
25 panic(42)
26 })
27 uassert.Equal(t, err.Error(), "42")
28}
29
30func TestRealmPanicToError(t *testing.T) {
31 // Set a test realm to be able to call a realm.
32 testRealm := testing.NewCodeRealm("gno.land/r/aeddi/panictoerr/test")
33 testing.SetRealm(testRealm)
34
35 const message = "token instance does not exist"
36 var err error
37
38 // Define a panicking function (not crossing).
39 panicking := func() {
40 grc20.Bank("unknown")
41 }
42
43 // panicking function should panic.
44 uassert.PanicsWithMessage(t, message, panicking)
45
46 // panicking function should panic when wrapped in AbortToError.
47 uassert.PanicsWithMessage(t, message, func() { pte.AbortToError(panicking) })
48
49 // panicking function should not panic when wrapped in PanicToError.
50 uassert.NotPanics(
51 t,
52 func() { err = pte.PanicToError(panicking) },
53 "panicking function should not panic when wrapped in PanicToError",
54 )
55 uassert.Equal(t, err.Error(), message)
56
57 // panicking function should not panic when wrapped in PanicAbortToError.
58 uassert.NotPanics(
59 t,
60 func() { err = pte.PanicAbortToError(panicking) },
61 "panicking function should not panic when wrapped in PanicAbortToError",
62 )
63 uassert.Equal(t, err.Error(), message)
64
65 // Define an aborting function (crossing).
66 aborting := func() {
67 grc20.Faucet(cross, "unknown")
68 }
69
70 // aborting function should abort.
71 uassert.AbortsWithMessage(t, message, aborting)
72
73 // aborting function should abort when wrapped in PanicToError.
74 uassert.AbortsWithMessage(t, message, func() { pte.PanicToError(aborting) })
75
76 // aborting function should not abort when wrapped in AbortToError.
77 uassert.NotAborts(
78 t,
79 func() { err = pte.AbortToError(aborting) },
80 "aborting function should not abort when wrapped in AbortToError",
81 )
82 uassert.Equal(t, err.Error(), message)
83
84 // aborting function should not abort when wrapped in PanicAbortToError.
85 uassert.NotAborts(
86 t,
87 func() { err = pte.PanicAbortToError(aborting) },
88 "aborting function should not abort when wrapped in PanicAbortToError",
89 )
90 uassert.Equal(t, err.Error(), message)
91}