@@ -25,24 +25,60 @@ contract ERC20FailingMock is ERC20 {
2525 }
2626}
2727
28+ contract ERC20SucceedingMock is ERC20 {
29+ function transfer (address , uint256 ) returns (bool ) {
30+ return true ;
31+ }
32+
33+ function transferFrom (address , address , uint256 ) returns (bool ) {
34+ return true ;
35+ }
36+
37+ function approve (address , uint256 ) returns (bool ) {
38+ return true ;
39+ }
40+
41+ function balanceOf (address ) constant returns (uint256 ) {
42+ return 0 ;
43+ }
44+
45+ function allowance (address , address ) constant returns (uint256 ) {
46+ return 0 ;
47+ }
48+ }
49+
2850contract SafeERC20Helper {
2951 using SafeERC20 for ERC20 ;
3052
31- ERC20 token;
53+ ERC20 failing;
54+ ERC20 succeeding;
3255
3356 function SafeERC20Helper () {
34- token = new ERC20FailingMock ();
57+ failing = new ERC20FailingMock ();
58+ succeeding = new ERC20SucceedingMock ();
3559 }
3660
3761 function doFailingTransfer () {
38- token .safeTransfer (0 , 0 );
62+ failing .safeTransfer (0 , 0 );
3963 }
4064
4165 function doFailingTransferFrom () {
42- token .safeTransferFrom (0 , 0 , 0 );
66+ failing .safeTransferFrom (0 , 0 , 0 );
4367 }
4468
4569 function doFailingApprove () {
46- token.safeApprove (0 , 0 );
70+ failing.safeApprove (0 , 0 );
71+ }
72+
73+ function doSucceedingTransfer () {
74+ succeeding.safeTransfer (0 , 0 );
75+ }
76+
77+ function doSucceedingTransferFrom () {
78+ succeeding.safeTransferFrom (0 , 0 , 0 );
79+ }
80+
81+ function doSucceedingApprove () {
82+ succeeding.safeApprove (0 , 0 );
4783 }
4884}
0 commit comments