Search Apps Documentation Source Content File Folder Download Copy

token_test.gno

2.62 Kb ยท 89 lines
 1package grc20
 2
 3import (
 4	"testing"
 5
 6	"gno.land/p/demo/testutils"
 7	"gno.land/p/demo/uassert"
 8	"gno.land/p/demo/ufmt"
 9	"gno.land/p/demo/urequire"
10)
11
12func TestTestImpl(t *testing.T) {
13	bank, _ := NewToken("Dummy", "DUMMY", 4)
14	urequire.False(t, bank == nil, "dummy should not be nil")
15}
16
17func TestToken(t *testing.T) {
18	var (
19		alice = testutils.TestAddress("alice")
20		bob   = testutils.TestAddress("bob")
21		carl  = testutils.TestAddress("carl")
22	)
23
24	bank, adm := NewToken("Dummy", "DUMMY", 6)
25
26	checkBalances := func(aliceEB, bobEB, carlEB uint64) {
27		t.Helper()
28		exp := ufmt.Sprintf("alice=%d bob=%d carl=%d", aliceEB, bobEB, carlEB)
29		aliceGB := bank.BalanceOf(alice)
30		bobGB := bank.BalanceOf(bob)
31		carlGB := bank.BalanceOf(carl)
32		got := ufmt.Sprintf("alice=%d bob=%d carl=%d", aliceGB, bobGB, carlGB)
33		uassert.Equal(t, got, exp, "invalid balances")
34	}
35	checkAllowances := func(abEB, acEB, baEB, bcEB, caEB, cbEB uint64) {
36		t.Helper()
37		exp := ufmt.Sprintf("ab=%d ac=%d ba=%d bc=%d ca=%d cb=%s", abEB, acEB, baEB, bcEB, caEB, cbEB)
38		abGB := bank.Allowance(alice, bob)
39		acGB := bank.Allowance(alice, carl)
40		baGB := bank.Allowance(bob, alice)
41		bcGB := bank.Allowance(bob, carl)
42		caGB := bank.Allowance(carl, alice)
43		cbGB := bank.Allowance(carl, bob)
44		got := ufmt.Sprintf("ab=%d ac=%d ba=%d bc=%d ca=%d cb=%s", abGB, acGB, baGB, bcGB, caGB, cbGB)
45		uassert.Equal(t, got, exp, "invalid allowances")
46	}
47
48	checkBalances(0, 0, 0)
49	checkAllowances(0, 0, 0, 0, 0, 0)
50
51	urequire.NoError(t, adm.Mint(alice, 1000))
52	urequire.NoError(t, adm.Mint(alice, 100))
53	checkBalances(1100, 0, 0)
54	checkAllowances(0, 0, 0, 0, 0, 0)
55
56	urequire.NoError(t, adm.Approve(alice, bob, 99999999))
57	checkBalances(1100, 0, 0)
58	checkAllowances(99999999, 0, 0, 0, 0, 0)
59
60	urequire.NoError(t, adm.Approve(alice, bob, 400))
61	checkBalances(1100, 0, 0)
62	checkAllowances(400, 0, 0, 0, 0, 0)
63
64	urequire.Error(t, adm.TransferFrom(alice, bob, carl, 100000000))
65	checkBalances(1100, 0, 0)
66	checkAllowances(400, 0, 0, 0, 0, 0)
67
68	urequire.NoError(t, adm.TransferFrom(alice, bob, carl, 100))
69	checkBalances(1000, 0, 100)
70	checkAllowances(300, 0, 0, 0, 0, 0)
71
72	urequire.Error(t, adm.SpendAllowance(alice, bob, 2000000))
73	checkBalances(1000, 0, 100)
74	checkAllowances(300, 0, 0, 0, 0, 0)
75
76	urequire.NoError(t, adm.SpendAllowance(alice, bob, 100))
77	checkBalances(1000, 0, 100)
78	checkAllowances(200, 0, 0, 0, 0, 0)
79}
80
81func TestOverflow(t *testing.T) {
82	alice := testutils.TestAddress("alice")
83	bob := testutils.TestAddress("bob")
84	tok, adm := NewToken("Dummy", "DUMMY", 6)
85
86	urequire.NoError(t, adm.Mint(alice, 2<<62))
87	urequire.Equal(t, tok.BalanceOf(alice), uint64(2<<62))
88	urequire.Error(t, adm.Mint(bob, 2<<62))
89}