From fc11a99b61c607534dfd7ff2ffc2bf07b4715598 Mon Sep 17 00:00:00 2001 From: Gonzalo Balabasquer Date: Mon, 14 Feb 2022 15:08:11 -0300 Subject: [PATCH] Add assertRevert --- src/test.sol | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/test.sol b/src/test.sol index 96d3c15..76fb411 100644 --- a/src/test.sol +++ b/src/test.sol @@ -431,4 +431,29 @@ contract DSTest { assertEq0(a, b); } } + function assertRevert(address target, bytes memory data, string memory expectedMessage) internal { + assertRevert(target, data, 0, expectedMessage); + } + function assertRevert(address target, bytes memory data, uint256 value, string memory expectedMessage) internal { + bool succeeded; + bytes memory response; + (succeeded, response) = target.call{value:value}(data); + if (succeeded) { + emit log("Error: call not reverted"); + fail(); + } else { + string memory message; + assembly { + let size := mload(add(response, 0x44)) + message := mload(0x40) + mstore(message, size) + mstore(0x40, add(message, and(add(add(size, 0x20), 0x1f), not(0x1f)))) + returndatacopy(add(message, 0x20), 0x44, size) + } + if (keccak256(abi.encodePacked(message)) != keccak256(abi.encodePacked(expectedMessage))) { + emit log("Error: revert message not satisfied"); + fail(); + } + } + } }