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}
token_test.gno
2.62 Kb ยท 89 lines