// SPDX-License-Identifier: UNLICENSEDpragmasolidity 0.8.16;import"forge-std/Test.sol";import"../src/SampleContract.sol";import"forge-std/console.sol";// vm deployer address: 0xb4c79daB8f259C7Aee6E5b2Aa729821864227e84abstractcontractStateZeroisTest { SampleContract internal sampleContract; address alice;address bob;functionsetUp() publicvirtual { sampleContract =newSampleContract(); alice =address(0x1); bob =address(0x2); vm.label(alice,"alice"); vm.label(bob,"bob"); }} contractStateZeroTestisStateZero {functiontestChangeStateOne() public {} functiontestChangStateOneReverts() public { vm.expectRevert(bytes("revert message"));// call function that is intended to revert here }functiontestChangStateOneEmitsEvent() public { vm.expectEmit(true,true,true,true);// 1. emit the event with expected values // 2. call function that is intended to emit the event }} abstractcontractStateOneisStateZero {functionsetUp() publicvirtualoverride {// run initial set-up function from StateZero super.setUp();// function that changes state from zero to one sampleContract.changeStateOne(); }}contractStateOneTestisStateOne {functiontestChangeStateTwo() public {} }
// SPDX-License-Identifier: UNLICENSEDpragmasolidity 0.8.16;import"forge-std/console2.sol";import"openzeppelin-contracts/contracts/access/Ownable.sol";import"openzeppelin-contracts/contracts/utils/Counters.sol";contract SampleContract {// initialising new counter variable usingCountersforCounters.Counter; Counters.Counter public someId; .... }