Replace error strings with custom errors (#4261)

This commit is contained in:
Francisco Giordano
2023-06-06 01:08:31 -03:00
parent 253bfa68c2
commit 99a4cfca17
133 changed files with 3157 additions and 1204 deletions

View File

@ -1,5 +1,6 @@
const { expectEvent, expectRevert } = require('@openzeppelin/test-helpers');
const { expectEvent } = require('@openzeppelin/test-helpers');
const { expect } = require('chai');
const { expectRevertCustomError } = require('../../helpers/customError');
const InitializableMock = artifacts.require('InitializableMock');
const ConstructorInitializableMock = artifacts.require('ConstructorInitializableMock');
@ -40,13 +41,13 @@ contract('Initializable', function () {
});
it('initializer does not run again', async function () {
await expectRevert(this.contract.initialize(), 'Initializable: contract is already initialized');
await expectRevertCustomError(this.contract.initialize(), 'AlreadyInitialized', []);
});
});
describe('nested under an initializer', function () {
it('initializer modifier reverts', async function () {
await expectRevert(this.contract.initializerNested(), 'Initializable: contract is already initialized');
await expectRevertCustomError(this.contract.initializerNested(), 'AlreadyInitialized', []);
});
it('onlyInitializing modifier succeeds', async function () {
@ -56,7 +57,7 @@ contract('Initializable', function () {
});
it('cannot call onlyInitializable function outside the scope of an initializable function', async function () {
await expectRevert(this.contract.initializeOnlyInitializing(), 'Initializable: contract is not initializing');
await expectRevertCustomError(this.contract.initializeOnlyInitializing(), 'NotInitializing', []);
});
});
@ -98,9 +99,9 @@ contract('Initializable', function () {
it('cannot nest reinitializers', async function () {
expect(await this.contract.counter()).to.be.bignumber.equal('0');
await expectRevert(this.contract.nestedReinitialize(2, 2), 'Initializable: contract is already initialized');
await expectRevert(this.contract.nestedReinitialize(2, 3), 'Initializable: contract is already initialized');
await expectRevert(this.contract.nestedReinitialize(3, 2), 'Initializable: contract is already initialized');
await expectRevertCustomError(this.contract.nestedReinitialize(2, 2), 'AlreadyInitialized', []);
await expectRevertCustomError(this.contract.nestedReinitialize(2, 3), 'AlreadyInitialized', []);
await expectRevertCustomError(this.contract.nestedReinitialize(3, 2), 'AlreadyInitialized', []);
});
it('can chain reinitializers', async function () {
@ -119,18 +120,18 @@ contract('Initializable', function () {
describe('contract locking', function () {
it('prevents initialization', async function () {
await this.contract.disableInitializers();
await expectRevert(this.contract.initialize(), 'Initializable: contract is already initialized');
await expectRevertCustomError(this.contract.initialize(), 'AlreadyInitialized', []);
});
it('prevents re-initialization', async function () {
await this.contract.disableInitializers();
await expectRevert(this.contract.reinitialize(255), 'Initializable: contract is already initialized');
await expectRevertCustomError(this.contract.reinitialize(255), 'AlreadyInitialized', []);
});
it('can lock contract after initialization', async function () {
await this.contract.initialize();
await this.contract.disableInitializers();
await expectRevert(this.contract.reinitialize(255), 'Initializable: contract is already initialized');
await expectRevertCustomError(this.contract.reinitialize(255), 'AlreadyInitialized', []);
});
});
});
@ -205,8 +206,8 @@ contract('Initializable', function () {
describe('disabling initialization', function () {
it('old and new patterns in bad sequence', async function () {
await expectRevert(DisableBad1.new(), 'Initializable: contract is already initialized');
await expectRevert(DisableBad2.new(), 'Initializable: contract is initializing');
await expectRevertCustomError(DisableBad1.new(), 'AlreadyInitialized', []);
await expectRevertCustomError(DisableBad2.new(), 'AlreadyInitialized', []);
});
it('old and new patterns in good sequence', async function () {

View File

@ -1,6 +1,7 @@
const { expectEvent, expectRevert } = require('@openzeppelin/test-helpers');
const { expectEvent } = require('@openzeppelin/test-helpers');
const { web3 } = require('@openzeppelin/test-helpers/src/setup');
const { getSlot, ImplementationSlot } = require('../../helpers/erc1967');
const { expectRevertCustomError } = require('../../helpers/customError');
const ERC1967Proxy = artifacts.require('ERC1967Proxy');
const UUPSUpgradeableMock = artifacts.require('UUPSUpgradeableMock');
@ -47,9 +48,10 @@ contract('UUPSUpgradeable', function () {
// delegate to a non existing upgradeTo function causes a low level revert
it('reject upgrade to non uups implementation', async function () {
await expectRevert(
await expectRevertCustomError(
this.instance.upgradeTo(this.implUpgradeNonUUPS.address),
'ERC1967Upgrade: new implementation is not UUPS',
'ERC1967InvalidImplementation',
[this.implUpgradeNonUUPS.address],
);
});
@ -57,10 +59,9 @@ contract('UUPSUpgradeable', function () {
const { address } = await ERC1967Proxy.new(this.implInitial.address, '0x');
const otherInstance = await UUPSUpgradeableMock.at(address);
await expectRevert(
this.instance.upgradeTo(otherInstance.address),
'ERC1967Upgrade: new implementation is not UUPS',
);
await expectRevertCustomError(this.instance.upgradeTo(otherInstance.address), 'ERC1967InvalidImplementation', [
otherInstance.address,
]);
});
it('can upgrade from legacy implementations', async function () {