@@ -126,4 +126,76 @@ describe('Forth', () => {
126
126
'Forth::mint: exceeded mint cap'
127
127
)
128
128
} )
129
+
130
+ it ( 'burn' , async ( ) => {
131
+ const { timestamp : now } = await provider . getBlock ( 'latest' )
132
+ const forth = await deployContract ( wallet , Forth , [ wallet . address , wallet . address , now + 60 * 60 ] )
133
+ const supply = await forth . totalSupply ( )
134
+
135
+ // burn 0
136
+ let balanceBefore = await forth . balanceOf ( wallet . address )
137
+ await forth . connect ( wallet ) . burn ( 0 )
138
+ expect ( await forth . balanceOf ( wallet . address ) ) . to . be . eq ( balanceBefore )
139
+ expect ( await forth . totalSupply ( ) ) . to . be . eq ( supply )
140
+
141
+ // burn non-zero
142
+ await forth . connect ( wallet ) . burn ( 1 )
143
+ expect ( await forth . balanceOf ( wallet . address ) ) . to . be . eq ( balanceBefore . sub ( 1 ) )
144
+ expect ( await forth . totalSupply ( ) ) . to . be . eq ( supply . sub ( 1 ) )
145
+
146
+ // burn > totalSupply
147
+ await expect ( forth . connect ( wallet ) . burn ( supply + 2 ) ) . to . be . revertedWith ( 'Forth::_burn: amount exceeds totalSupply' )
148
+
149
+ // burn > balance
150
+ await forth . connect ( wallet ) . transfer ( other0 . address , 100 )
151
+ balanceBefore = await forth . balanceOf ( wallet . address )
152
+ await expect ( forth . connect ( wallet ) . burn ( balanceBefore . add ( 1 ) ) ) . to . be . revertedWith (
153
+ 'Forth::_burn: amount exceeds balance'
154
+ )
155
+ } )
156
+
157
+ it ( 'burnFrom' , async ( ) => {
158
+ const { timestamp : now } = await provider . getBlock ( 'latest' )
159
+ const forth = await deployContract ( wallet , Forth , [ wallet . address , wallet . address , now + 60 * 60 ] )
160
+ const supply = await forth . totalSupply ( )
161
+
162
+ // burn 0
163
+ let balanceBefore = await forth . balanceOf ( wallet . address )
164
+ await forth . connect ( other0 ) . burnFrom ( wallet . address , 0 )
165
+ expect ( await forth . balanceOf ( wallet . address ) ) . to . be . eq ( balanceBefore )
166
+ expect ( await forth . totalSupply ( ) ) . to . be . eq ( supply )
167
+
168
+ // burn non-zero
169
+ await forth . connect ( wallet ) . approve ( other0 . address , 100 )
170
+ await forth . connect ( other0 ) . burnFrom ( wallet . address , 1 )
171
+ expect ( await forth . balanceOf ( wallet . address ) ) . to . be . eq ( balanceBefore . sub ( 1 ) )
172
+ expect ( await forth . totalSupply ( ) ) . to . be . eq ( supply . sub ( 1 ) )
173
+
174
+ // burn > approval
175
+ balanceBefore = await forth . balanceOf ( wallet . address )
176
+ await forth . connect ( wallet ) . approve ( other0 . address , 100 )
177
+ await expect ( forth . connect ( other0 ) . burnFrom ( wallet . address , 101 ) ) . to . be . revertedWith (
178
+ 'Forth::burnFrom: amount exceeds allowance'
179
+ )
180
+
181
+ // burn > totalSupply
182
+ balanceBefore = await forth . balanceOf ( wallet . address )
183
+ await forth . connect ( wallet ) . approve ( other0 . address , balanceBefore . add ( 1 ) )
184
+ await expect ( forth . connect ( other0 ) . burnFrom ( wallet . address , balanceBefore . add ( 1 ) ) ) . to . be . revertedWith (
185
+ 'Forth::_burn: amount exceeds totalSupply'
186
+ )
187
+
188
+ // burn > balance
189
+ await forth . connect ( wallet ) . transfer ( other0 . address , 100 )
190
+ balanceBefore = await forth . balanceOf ( wallet . address )
191
+ await forth . connect ( wallet ) . approve ( other0 . address , balanceBefore . add ( 1 ) )
192
+ await expect ( forth . connect ( other0 ) . burnFrom ( wallet . address , balanceBefore . add ( 1 ) ) ) . to . be . revertedWith (
193
+ 'Forth::_burn: amount exceeds balance'
194
+ )
195
+
196
+ // Zero Address
197
+ await expect ( forth . connect ( wallet ) . burnFrom ( '0x0000000000000000000000000000000000000000' , 0 ) ) . to . be . revertedWith (
198
+ 'Forth::_burn: burn from the zero address'
199
+ )
200
+ } )
129
201
} )
0 commit comments