Skip to content

Commit

Permalink
minor correction and add a test
Browse files Browse the repository at this point in the history
  • Loading branch information
smartcontracts committed Jun 2, 2021
1 parent aa4843d commit 8008a71
Show file tree
Hide file tree
Showing 3 changed files with 69 additions and 1 deletion.
6 changes: 5 additions & 1 deletion packages/smock/src/smockit/smockit.ts
Original file line number Diff line number Diff line change
Expand Up @@ -89,11 +89,15 @@ const smockifyFunction = (

return {
functionName: fragment.name,
functionSignature: fragment.format(),
data,
}
})
.filter((functionResult: any) => {
return functionResult.functionName === functionName
return (
functionResult.functionName === functionName ||
functionResult.functionSignature === functionName
)
})
.map((functionResult: any) => {
return functionResult.data
Expand Down
8 changes: 8 additions & 0 deletions packages/smock/test/contracts/TestHelpers_MockCaller.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;

contract TestHelpers_MockCaller {
function callMock(address _target, bytes memory _data) public {
_target.call(_data);
}
}
56 changes: 56 additions & 0 deletions packages/smock/test/smockit/call-assertions.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
/* Imports: External */
import hre from 'hardhat'
import { expect } from 'chai'
import { Contract } from 'ethers'

/* Imports: Internal */
import { MockContract, smockit } from '../../src'

describe('[smock]: call assertion tests', () => {
const ethers = (hre as any).ethers

let mock: MockContract
beforeEach(async () => {
mock = await smockit('TestHelpers_BasicReturnContract')
})

let mockCaller: Contract
before(async () => {
const mockCallerFactory = await ethers.getContractFactory(
'TestHelpers_MockCaller'
)
mockCaller = await mockCallerFactory.deploy()
})

describe('overloaded functions', () => {
it('should be able to modify both versions of an overloaded function', async () => {
mock.smocked['overloadedFunction(uint256)'].will.return.with(0)
mock.smocked['overloadedFunction(uint256,uint256)'].will.return.with(0)

const expected1 = ethers.BigNumber.from(1234)
await mockCaller.callMock(
mock.address,
mock.interface.encodeFunctionData('overloadedFunction(uint256)', [
expected1,
])
)

expect(
mock.smocked['overloadedFunction(uint256)'].calls[0]
).to.deep.equal([expected1])

const expected2 = ethers.BigNumber.from(5678)
await mockCaller.callMock(
mock.address,
mock.interface.encodeFunctionData(
'overloadedFunction(uint256,uint256)',
[expected2, expected2]
)
)

expect(
mock.smocked['overloadedFunction(uint256,uint256)'].calls[0]
).to.deep.equal([expected2, expected2])
})
})
})

0 comments on commit 8008a71

Please sign in to comment.