Skip to content

Commit

Permalink
Allow pass in custom arguments to shouldSupportInterfaces test help…
Browse files Browse the repository at this point in the history
…er (#5350)

Co-authored-by: Hadrien Croubois <[email protected]>
  • Loading branch information
ernestognw and Amxx authored Dec 10, 2024
1 parent 0643d17 commit 1c1186a
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 7 deletions.
9 changes: 7 additions & 2 deletions test/helpers/iterate.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,12 @@ module.exports = {

// ================================================ Object helpers =================================================

// Create a new object by mapping the values through a function, keeping the keys
// Create a new object by mapping the values through a function, keeping the keys. Second function can be used to pre-filter entries
// Example: mapValues({a:1,b:2,c:3}, x => x**2) → {a:1,b:4,c:9}
mapValues: (obj, fn) => Object.fromEntries(Object.entries(obj).map(([k, v]) => [k, fn(v)])),
mapValues: (obj, fn, fn2 = () => true) =>
Object.fromEntries(
Object.entries(obj)
.filter(fn2)
.map(([k, v]) => [k, fn(v)]),
),
};
14 changes: 9 additions & 5 deletions test/utils/introspection/SupportsInterface.behavior.js
Original file line number Diff line number Diff line change
Expand Up @@ -92,8 +92,10 @@ const SIGNATURES = {

const INTERFACE_IDS = mapValues(SIGNATURES, interfaceId);

function shouldSupportInterfaces(interfaces = []) {
function shouldSupportInterfaces(interfaces = [], signatures = SIGNATURES) {
interfaces.unshift('ERC165');
signatures.ERC165 = SIGNATURES.ERC165;
const interfaceIds = mapValues(signatures, interfaceId, ([name]) => interfaces.includes(name));

describe('ERC165', function () {
beforeEach(function () {
Expand All @@ -103,14 +105,14 @@ function shouldSupportInterfaces(interfaces = []) {
describe('when the interfaceId is supported', function () {
it('uses less than 30k gas', async function () {
for (const k of interfaces) {
const interfaceId = INTERFACE_IDS[k] ?? k;
const interfaceId = interfaceIds[k] ?? k;
expect(await this.contractUnderTest.supportsInterface.estimateGas(interfaceId)).to.lte(30_000n);
}
});

it('returns true', async function () {
for (const k of interfaces) {
const interfaceId = INTERFACE_IDS[k] ?? k;
const interfaceId = interfaceIds[k] ?? k;
expect(await this.contractUnderTest.supportsInterface(interfaceId), `does not support ${k}`).to.be.true;
}
});
Expand All @@ -129,10 +131,10 @@ function shouldSupportInterfaces(interfaces = []) {
it('all interface functions are in ABI', async function () {
for (const k of interfaces) {
// skip interfaces for which we don't have a function list
if (SIGNATURES[k] === undefined) continue;
if (signatures[k] === undefined) continue;

// Check the presence of each function in the contract's interface
for (const fnSig of SIGNATURES[k]) {
for (const fnSig of signatures[k]) {
expect(this.contractUnderTest.interface.hasFunction(fnSig), `did not find ${fnSig}`).to.be.true;
}
}
Expand All @@ -141,5 +143,7 @@ function shouldSupportInterfaces(interfaces = []) {
}

module.exports = {
SIGNATURES,
INTERFACE_IDS,
shouldSupportInterfaces,
};

0 comments on commit 1c1186a

Please sign in to comment.