Skip to content

Commit 5086c7a

Browse files
authored
fix(tests): Conform to upcoming expectRevert behavior (#379)
* fix: use mocks to perform tests due to new expectRevert behvior * chore: lint * chore: use proper prefix for mock functions * chore: fix redeclared contract * chore: fmtr * chore: fix failing blacklisted test * chore: fix test names * chore: fix conflicts
1 parent 2f43c7e commit 5086c7a

File tree

4 files changed

+152
-39
lines changed

4 files changed

+152
-39
lines changed

test/StdChains.t.sol

Lines changed: 71 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,24 @@ pragma solidity >=0.7.0 <0.9.0;
33

44
import "../src/Test.sol";
55

6+
contract StdChainsMock is Test {
7+
function exposed_getChain(string memory chainAlias) public returns (Chain memory) {
8+
return getChain(chainAlias);
9+
}
10+
11+
function exposed_getChain(uint256 chainId) public returns (Chain memory) {
12+
return getChain(chainId);
13+
}
14+
15+
function exposed_setChain(string memory chainAlias, ChainData memory chainData) public {
16+
setChain(chainAlias, chainData);
17+
}
18+
19+
function exposed_setFallbackToDefaultRpcUrls(bool useDefault) public {
20+
setFallbackToDefaultRpcUrls(useDefault);
21+
}
22+
}
23+
624
contract StdChainsTest is Test {
725
function testChainRpcInitialization() public {
826
// RPCs specified in `foundry.toml` should be updated.
@@ -50,29 +68,41 @@ contract StdChainsTest is Test {
5068
// }
5169

5270
function testChainNoDefault() public {
71+
// We deploy a mock to properly test the revert.
72+
StdChainsMock stdChainsMock = new StdChainsMock();
73+
5374
vm.expectRevert("StdChains getChain(string): Chain with alias \"does_not_exist\" not found.");
54-
getChain("does_not_exist");
75+
stdChainsMock.exposed_getChain("does_not_exist");
5576
}
5677

5778
function testSetChainFirstFails() public {
79+
// We deploy a mock to properly test the revert.
80+
StdChainsMock stdChainsMock = new StdChainsMock();
81+
5882
vm.expectRevert("StdChains setChain(string,ChainData): Chain ID 31337 already used by \"anvil\".");
59-
setChain("anvil2", ChainData("Anvil", 31337, "URL"));
83+
stdChainsMock.exposed_setChain("anvil2", ChainData("Anvil", 31337, "URL"));
6084
}
6185

6286
function testChainBubbleUp() public {
63-
setChain("needs_undefined_env_var", ChainData("", 123456789, ""));
87+
// We deploy a mock to properly test the revert.
88+
StdChainsMock stdChainsMock = new StdChainsMock();
89+
90+
stdChainsMock.exposed_setChain("needs_undefined_env_var", ChainData("", 123456789, ""));
6491
vm.expectRevert(
6592
"Failed to resolve env var `UNDEFINED_RPC_URL_PLACEHOLDER` in `${UNDEFINED_RPC_URL_PLACEHOLDER}`: environment variable not found"
6693
);
67-
getChain("needs_undefined_env_var");
94+
stdChainsMock.exposed_getChain("needs_undefined_env_var");
6895
}
6996

7097
function testCannotSetChain_ChainIdExists() public {
71-
setChain("custom_chain", ChainData("Custom Chain", 123456789, "https://custom.chain/"));
98+
// We deploy a mock to properly test the revert.
99+
StdChainsMock stdChainsMock = new StdChainsMock();
100+
101+
stdChainsMock.exposed_setChain("custom_chain", ChainData("Custom Chain", 123456789, "https://custom.chain/"));
72102

73103
vm.expectRevert('StdChains setChain(string,ChainData): Chain ID 123456789 already used by "custom_chain".');
74104

75-
setChain("another_custom_chain", ChainData("", 123456789, ""));
105+
stdChainsMock.exposed_setChain("another_custom_chain", ChainData("", 123456789, ""));
76106
}
77107

78108
function testSetChain() public {
@@ -102,42 +132,64 @@ contract StdChainsTest is Test {
102132
}
103133

104134
function testSetNoEmptyAlias() public {
135+
// We deploy a mock to properly test the revert.
136+
StdChainsMock stdChainsMock = new StdChainsMock();
137+
105138
vm.expectRevert("StdChains setChain(string,ChainData): Chain alias cannot be the empty string.");
106-
setChain("", ChainData("", 123456789, ""));
139+
stdChainsMock.exposed_setChain("", ChainData("", 123456789, ""));
107140
}
108141

109142
function testSetNoChainId0() public {
143+
// We deploy a mock to properly test the revert.
144+
StdChainsMock stdChainsMock = new StdChainsMock();
145+
110146
vm.expectRevert("StdChains setChain(string,ChainData): Chain ID cannot be 0.");
111-
setChain("alias", ChainData("", 0, ""));
147+
stdChainsMock.exposed_setChain("alias", ChainData("", 0, ""));
112148
}
113149

114150
function testGetNoChainId0() public {
151+
// We deploy a mock to properly test the revert.
152+
StdChainsMock stdChainsMock = new StdChainsMock();
153+
115154
vm.expectRevert("StdChains getChain(uint256): Chain ID cannot be 0.");
116-
getChain(0);
155+
stdChainsMock.exposed_getChain(0);
117156
}
118157

119158
function testGetNoEmptyAlias() public {
159+
// We deploy a mock to properly test the revert.
160+
StdChainsMock stdChainsMock = new StdChainsMock();
161+
120162
vm.expectRevert("StdChains getChain(string): Chain alias cannot be the empty string.");
121-
getChain("");
163+
stdChainsMock.exposed_getChain("");
122164
}
123165

124166
function testChainIdNotFound() public {
167+
// We deploy a mock to properly test the revert.
168+
StdChainsMock stdChainsMock = new StdChainsMock();
169+
125170
vm.expectRevert("StdChains getChain(string): Chain with alias \"no_such_alias\" not found.");
126-
getChain("no_such_alias");
171+
stdChainsMock.exposed_getChain("no_such_alias");
127172
}
128173

129174
function testChainAliasNotFound() public {
175+
// We deploy a mock to properly test the revert.
176+
StdChainsMock stdChainsMock = new StdChainsMock();
177+
130178
vm.expectRevert("StdChains getChain(uint256): Chain with ID 321 not found.");
131-
getChain(321);
179+
180+
stdChainsMock.exposed_getChain(321);
132181
}
133182

134183
function testSetChain_ExistingOne() public {
184+
// We deploy a mock to properly test the revert.
185+
StdChainsMock stdChainsMock = new StdChainsMock();
186+
135187
setChain("custom_chain", ChainData("Custom Chain", 123456789, "https://custom.chain/"));
136188
assertEq(getChain(123456789).chainId, 123456789);
137189

138190
setChain("custom_chain", ChainData("Modified Chain", 999999999, "https://modified.chain/"));
139191
vm.expectRevert("StdChains getChain(uint256): Chain with ID 123456789 not found.");
140-
getChain(123456789);
192+
stdChainsMock.exposed_getChain(123456789);
141193

142194
Chain memory modifiedChain = getChain(999999999);
143195
assertEq(modifiedChain.name, "Modified Chain");
@@ -146,15 +198,18 @@ contract StdChainsTest is Test {
146198
}
147199

148200
function testDontUseDefaultRpcUrl() public {
201+
// We deploy a mock to properly test the revert.
202+
StdChainsMock stdChainsMock = new StdChainsMock();
203+
149204
// Should error if default RPCs flag is set to false.
150-
setFallbackToDefaultRpcUrls(false);
205+
stdChainsMock.exposed_setFallbackToDefaultRpcUrls(false);
151206
vm.expectRevert(
152207
"Failed to get environment variable `ANVIL_RPC_URL` as type `string`: environment variable not found"
153208
);
154-
getChain(31337);
209+
stdChainsMock.exposed_getChain(31337);
155210
vm.expectRevert(
156211
"Failed to get environment variable `SEPOLIA_RPC_URL` as type `string`: environment variable not found"
157212
);
158-
getChain("sepolia");
213+
stdChainsMock.exposed_getChain("sepolia");
159214
}
160215
}

test/StdCheats.t.sol

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -343,20 +343,26 @@ contract StdCheatsTest is Test {
343343
);
344344
}
345345

346+
function _assumePayable(address addr) public {
347+
assumePayable(addr);
348+
}
349+
346350
function testAssumePayable() external {
351+
// We deploy a mock version so we can properly test the revert.
352+
StdCheatsMock stdCheatsMock = new StdCheatsMock();
347353
// all should revert since these addresses are not payable
348354

349355
// VM address
350356
vm.expectRevert();
351-
assumePayable(0x7109709ECfa91a80626fF3989D68f67F5b1DD12D);
357+
stdCheatsMock.exposed_assumePayable(0x7109709ECfa91a80626fF3989D68f67F5b1DD12D);
352358

353359
// Console address
354360
vm.expectRevert();
355-
assumePayable(0x000000000000000000636F6e736F6c652e6c6f67);
361+
stdCheatsMock.exposed_assumePayable(0x000000000000000000636F6e736F6c652e6c6f67);
356362

357363
// Create2Deployer
358364
vm.expectRevert();
359-
assumePayable(0x4e59b44847b379578588920cA78FbF26c0B4956C);
365+
stdCheatsMock.exposed_assumePayable(0x4e59b44847b379578588920cA78FbF26c0B4956C);
360366
}
361367

362368
function testAssumePayable(address addr) external {
@@ -396,8 +402,12 @@ contract StdCheatsTest is Test {
396402
}
397403

398404
contract StdCheatsMock is StdCheats {
405+
function exposed_assumePayable(address addr) external {
406+
assumePayable(addr);
407+
}
408+
399409
// We deploy a mock version so we can properly test expected reverts.
400-
function assumeNotBlacklisted_(address token, address addr) external view {
410+
function exposed_assumeNotBlacklisted(address token, address addr) external view {
401411
return assumeNotBlacklisted(token, addr);
402412
}
403413
}
@@ -409,38 +419,41 @@ contract StdCheatsForkTest is Test {
409419
address internal constant USDT = 0xdAC17F958D2ee523a2206206994597C13D831ec7;
410420
address internal constant USDT_BLACKLISTED_USER = 0x8f8a8F4B54a2aAC7799d7bc81368aC27b852822A;
411421

412-
// We deploy a mock version so we can properly test the revert.
413-
StdCheatsMock private stdCheats = new StdCheatsMock();
414-
415422
function setUp() public {
416423
// All tests of the `assumeNotBlacklisted` method are fork tests using live contracts.
417424
vm.createSelectFork({urlOrAlias: "mainnet", blockNumber: 16_428_900});
418425
}
419426

420-
function testCannotAssumeNotBlacklisted_EOA() external {
427+
function testCannotAssumeNoBlacklisted_EOA() external {
428+
// We deploy a mock version so we can properly test the revert.
429+
StdCheatsMock stdCheatsMock = new StdCheatsMock();
421430
address eoa = vm.addr({privateKey: 1});
422431
vm.expectRevert("StdCheats assumeNotBlacklisted(address,address): Token address is not a contract.");
423-
assumeNotBlacklisted(eoa, address(0));
432+
stdCheatsMock.exposed_assumeNotBlacklisted(eoa, address(0));
424433
}
425434

426435
function testAssumeNotBlacklisted_TokenWithoutBlacklist(address addr) external {
427436
assumeNotBlacklisted(SHIB, addr);
428437
assertTrue(true);
429438
}
430439

431-
function testAssumeNotBlacklisted_USDC() external {
440+
function testAssumeNoBlacklisted_USDC() external {
441+
// We deploy a mock version so we can properly test the revert.
442+
StdCheatsMock stdCheatsMock = new StdCheatsMock();
432443
vm.expectRevert();
433-
stdCheats.assumeNotBlacklisted_(USDC, USDC_BLACKLISTED_USER);
444+
stdCheatsMock.exposed_assumeNotBlacklisted(USDC, USDC_BLACKLISTED_USER);
434445
}
435446

436447
function testAssumeNotBlacklisted_USDC(address addr) external {
437448
assumeNotBlacklisted(USDC, addr);
438449
assertFalse(USDCLike(USDC).isBlacklisted(addr));
439450
}
440451

441-
function testAssumeNotBlacklisted_USDT() external {
452+
function testAssumeNoBlacklisted_USDT() external {
453+
// We deploy a mock version so we can properly test the revert.
454+
StdCheatsMock stdCheatsMock = new StdCheatsMock();
442455
vm.expectRevert();
443-
stdCheats.assumeNotBlacklisted_(USDT, USDT_BLACKLISTED_USER);
456+
stdCheatsMock.exposed_assumeNotBlacklisted(USDT, USDT_BLACKLISTED_USER);
444457
}
445458

446459
function testAssumeNotBlacklisted_USDT(address addr) external {

test/StdMath.t.sol

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,16 @@ pragma solidity >=0.8.0 <0.9.0;
44
import "../src/StdMath.sol";
55
import "../src/Test.sol";
66

7+
contract StdMathMock is Test {
8+
function exposed_percentDelta(uint256 a, uint256 b) public pure returns (uint256) {
9+
return stdMath.percentDelta(a, b);
10+
}
11+
12+
function exposed_percentDelta(int256 a, int256 b) public pure returns (uint256) {
13+
return stdMath.percentDelta(a, b);
14+
}
15+
}
16+
717
contract StdMathTest is Test {
818
function testGetAbs() external {
919
assertEq(stdMath.abs(-50), 50);
@@ -106,6 +116,8 @@ contract StdMathTest is Test {
106116
}
107117

108118
function testGetPercentDelta_Uint() external {
119+
StdMathMock stdMathMock = new StdMathMock();
120+
109121
assertEq(stdMath.percentDelta(uint256(0), uint256(1337)), 1e18);
110122
assertEq(stdMath.percentDelta(uint256(0), type(uint64).max), 1e18);
111123
assertEq(stdMath.percentDelta(uint256(0), type(uint128).max), 1e18);
@@ -119,7 +131,7 @@ contract StdMathTest is Test {
119131
assertEq(stdMath.percentDelta(7500, uint256(2500)), 2e18);
120132

121133
vm.expectRevert(stdError.divisionError);
122-
stdMath.percentDelta(uint256(1), 0);
134+
stdMathMock.exposed_percentDelta(uint256(1), 0);
123135
}
124136

125137
function testGetPercentDelta_Uint_Fuzz(uint192 a, uint192 b) external {
@@ -138,6 +150,9 @@ contract StdMathTest is Test {
138150
}
139151

140152
function testGetPercentDelta_Int() external {
153+
// We deploy a mock version so we can properly test the revert.
154+
StdMathMock stdMathMock = new StdMathMock();
155+
141156
assertEq(stdMath.percentDelta(int256(0), int256(1337)), 1e18);
142157
assertEq(stdMath.percentDelta(int256(0), -1337), 1e18);
143158
assertEq(stdMath.percentDelta(int256(0), type(int64).min), 1e18);
@@ -159,7 +174,7 @@ contract StdMathTest is Test {
159174
assertEq(stdMath.percentDelta(7500, int256(2500)), 2e18);
160175

161176
vm.expectRevert(stdError.divisionError);
162-
stdMath.percentDelta(int256(1), 0);
177+
stdMathMock.exposed_percentDelta(int256(1), 0);
163178
}
164179

165180
function testGetPercentDelta_Int_Fuzz(int192 a, int192 b) external {

0 commit comments

Comments
 (0)