Search Apps Documentation Source Content File Folder Download Copy Actions Download

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}