Skip to content

Commit f6d240e

Browse files
authored
🛶 Updates for hardhat v2.11 (#795)
1 parent dd21fb0 commit f6d240e

File tree

4 files changed

+58
-25
lines changed

4 files changed

+58
-25
lines changed

‎.changeset/ten-turtles-brake.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@ethereum-waffle/chai": patch
3+
---
4+
5+
🛶 Updates for hardhat v2.11

‎.github/workflows/CI.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ jobs:
6565
- name: Install latest versions of hardhat packages
6666
run: |
6767
pnpm add hardhat@2.11.2
68-
pnpm add -D @nomiclabs/hardhat-waffle@2.1.1
69-
pnpm add -D @nomiclabs/hardhat-ethers@2.0.3
68+
pnpm add -D @nomiclabs/hardhat-waffle@2.0.3
69+
pnpm add -D @nomiclabs/hardhat-ethers@2.1.1
7070
working-directory: waffle-hardhat
7171
- run: pnpm run test
7272
working-directory: waffle-hardhat

‎waffle-chai/src/inject-call-history.ts

+19-19
Original file line numberDiff line numberDiff line change
@@ -44,30 +44,14 @@ const inject = () => {
4444
waffle.provider._hardhatNetwork.provider._wrapped._wrapped._wrapped._init = async function () {
4545
await init.apply(this);
4646
if (typeof beforeMessageListener === 'function') {
47-
// has to be here because of weird behaviour of init function, which requires us to re-register the handler.
48-
waffle.provider
49-
?._hardhatNetwork
50-
?.provider
51-
?._wrapped
52-
?._wrapped
53-
?._wrapped
54-
?._node
55-
?._vmTracer
56-
?._vm
57-
?.off?.('beforeMessage', beforeMessageListener);
47+
// has to be here because of weird behaviour of init function, which requires us to re-register the handler.
48+
getHardhatVMEventEmitter(waffle)?.off?.('beforeMessage', beforeMessageListener);
5849
}
5950
beforeMessageListener = (message: any) => {
6051
callHistory.addUniqueCall(toRecordedCall(message));
6152
};
6253
waffle.provider.callHistory = callHistory.recordedCalls;
63-
waffle.provider
64-
?._hardhatNetwork.provider
65-
?._wrapped._wrapped
66-
?._wrapped
67-
?._node
68-
?._vmTracer
69-
?._vm
70-
?.on?.('beforeMessage', beforeMessageListener);
54+
getHardhatVMEventEmitter(waffle)?.on?.('beforeMessage', beforeMessageListener);
7155
};
7256
};
7357

@@ -76,3 +60,19 @@ if (!injected && !!process.env.WAFFLE_EXPERIMENTAL_HARDHAT_CALL_HISTORY) {
7660
injected = true;
7761
inject();
7862
}
63+
64+
function getHardhatVMEventEmitter(waffle: any) {
65+
const vm = waffle.provider
66+
?._hardhatNetwork.provider
67+
?._wrapped._wrapped
68+
?._wrapped
69+
?._node
70+
?._vmTracer
71+
?._vm;
72+
73+
/**
74+
* There were changes related to the location of event emitter introduced
75+
* in Hardhat version 2.11.0.
76+
*/
77+
return vm?.evm?.events ?? vm;
78+
}

‎waffle-chai/test/matchers/revertedWithTest.ts

+32-4
Original file line numberDiff line numberDiff line change
@@ -86,14 +86,42 @@ export const revertedWithTest = (provider: TestProvider, options: RevertedWithTe
8686
});
8787

8888
it('Throw with modification: success', async () => {
89-
await expect(matchers.doThrowAndModify()).to.be.revertedWith('');
89+
let oneOrTheOtherRejected = false;
90+
// Both are OK, exact output depends on installed version of Hardhat.
91+
try {
92+
await expect(matchers.doThrowAndModify()).to.be.revertedWith('');
93+
} catch {
94+
oneOrTheOtherRejected = !oneOrTheOtherRejected;
95+
}
96+
try {
97+
await expect(matchers.doThrowAndModify()).to.be.revertedWith('panic code 0x1');
98+
} catch {
99+
oneOrTheOtherRejected = !oneOrTheOtherRejected;
100+
}
101+
expect(oneOrTheOtherRejected).to.be.true;
90102
});
91103

92104
it('Throw with modification: success, properly handle common substring', async () => {
93105
// https://github.com/NomicFoundation/hardhat/issues/2234#issuecomment-1045974424
94-
await expect(
95-
expect(matchers.doThrowAndModify()).to.be.revertedWith('fa')
96-
).to.eventually.be.rejectedWith('Expected transaction to be reverted with "fa", but other reason was found: ""');
106+
let oneOrTheOtherRejected = false;
107+
// Both are OK, exact output depends on installed version of Hardhat.
108+
try {
109+
await expect(
110+
expect(matchers.doThrowAndModify()).to.be.revertedWith('fa')
111+
).to.eventually.be.rejectedWith('Expected transaction to be reverted with "fa", but other reason was found: ""');
112+
} catch {
113+
oneOrTheOtherRejected = !oneOrTheOtherRejected;
114+
}
115+
try {
116+
await expect(
117+
expect(matchers.doThrowAndModify()).to.be.revertedWith('fa')
118+
).to.eventually.be.rejectedWith(
119+
'Expected transaction to be reverted with "fa", but other reason was found: "panic code 0x1"'
120+
);
121+
} catch {
122+
oneOrTheOtherRejected = !oneOrTheOtherRejected;
123+
}
124+
expect(oneOrTheOtherRejected).to.be.true;
97125
});
98126

99127
it('Throw with modification: fail when message is expected', async () => {

0 commit comments

Comments
 (0)