ether and shouldFail tests (#1513)
* Added ether tests. * Added shouldFail base function and tests. * Updated test descriptions. * Reduced gas limit on out-of-gas tests.
This commit is contained in:
22
contracts/mocks/Failer.sol
Normal file
22
contracts/mocks/Failer.sol
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
pragma solidity ^0.4.24;
|
||||||
|
|
||||||
|
contract Failer {
|
||||||
|
uint256[] private array;
|
||||||
|
|
||||||
|
function dontFail() public pure {
|
||||||
|
}
|
||||||
|
|
||||||
|
function failWithRevert() public pure {
|
||||||
|
revert();
|
||||||
|
}
|
||||||
|
|
||||||
|
function failWithThrow() public pure {
|
||||||
|
assert(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
function failWithOutOfGas() public {
|
||||||
|
for (uint256 i = 0; i < 2**200; ++i) {
|
||||||
|
array.push(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -5,11 +5,13 @@ async function shouldFailWithMessage (promise, message) {
|
|||||||
try {
|
try {
|
||||||
await promise;
|
await promise;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
error.message.should.include(message, 'Wrong failure type');
|
if (message) {
|
||||||
|
error.message.should.include(message, `Wrong failure type, expected '${message}'`);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
should.fail(`Expected '${message}' failure not received`);
|
should.fail('Expected failure not received');
|
||||||
}
|
}
|
||||||
|
|
||||||
async function reverting (promise) {
|
async function reverting (promise) {
|
||||||
@ -24,8 +26,12 @@ async function outOfGas (promise) {
|
|||||||
await shouldFailWithMessage(promise, 'out of gas');
|
await shouldFailWithMessage(promise, 'out of gas');
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = {
|
async function shouldFail (promise) {
|
||||||
reverting,
|
await shouldFailWithMessage(promise);
|
||||||
throwing,
|
}
|
||||||
outOfGas,
|
|
||||||
};
|
shouldFail.reverting = reverting;
|
||||||
|
shouldFail.throwing = throwing;
|
||||||
|
shouldFail.outOfGas = outOfGas;
|
||||||
|
|
||||||
|
module.exports = shouldFail;
|
||||||
|
|||||||
16
test/helpers/test/ether.test.js
Normal file
16
test/helpers/test/ether.test.js
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
const { ether } = require('../ether');
|
||||||
|
|
||||||
|
const BigNumber = web3.BigNumber;
|
||||||
|
require('chai')
|
||||||
|
.use(require('chai-bignumber')(BigNumber))
|
||||||
|
.should();
|
||||||
|
|
||||||
|
describe('ether', function () {
|
||||||
|
it('returns a BigNumber', function () {
|
||||||
|
ether(1, 'ether').should.be.bignumber.equal(new BigNumber(1000000000000000000));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('works with negative amounts', function () {
|
||||||
|
ether(-1, 'ether').should.be.bignumber.equal(new BigNumber(-1000000000000000000));
|
||||||
|
});
|
||||||
|
});
|
||||||
95
test/helpers/test/shouldFail.test.js
Normal file
95
test/helpers/test/shouldFail.test.js
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
const shouldFail = require('../shouldFail');
|
||||||
|
|
||||||
|
const BigNumber = web3.BigNumber;
|
||||||
|
const should = require('chai')
|
||||||
|
.use(require('chai-bignumber')(BigNumber))
|
||||||
|
.should();
|
||||||
|
|
||||||
|
const Failer = artifacts.require('Failer');
|
||||||
|
|
||||||
|
async function assertFailure (promise) {
|
||||||
|
try {
|
||||||
|
await promise;
|
||||||
|
} catch (error) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
should.fail();
|
||||||
|
}
|
||||||
|
|
||||||
|
describe('shouldFail', function () {
|
||||||
|
beforeEach(async function () {
|
||||||
|
this.failer = await Failer.new();
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('shouldFail', function () {
|
||||||
|
it('rejects if no failure occurs', async function () {
|
||||||
|
await assertFailure(shouldFail(this.failer.dontFail()));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('accepts a revert', async function () {
|
||||||
|
await shouldFail(this.failer.failWithRevert());
|
||||||
|
});
|
||||||
|
|
||||||
|
it('accepts a throw', async function () {
|
||||||
|
await shouldFail(this.failer.failWithThrow());
|
||||||
|
});
|
||||||
|
|
||||||
|
it('accepts an out of gas', async function () {
|
||||||
|
await shouldFail(this.failer.failWithOutOfGas({ gas: 2000000 }));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('reverting', function () {
|
||||||
|
it('rejects if no failure occurs', async function () {
|
||||||
|
await assertFailure(shouldFail.reverting(this.failer.dontFail()));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('accepts a revert', async function () {
|
||||||
|
await shouldFail.reverting(this.failer.failWithRevert());
|
||||||
|
});
|
||||||
|
|
||||||
|
it('rejects a throw', async function () {
|
||||||
|
await assertFailure(shouldFail.reverting(this.failer.failWithThrow()));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('rejects an outOfGas', async function () {
|
||||||
|
await assertFailure(shouldFail.reverting(this.failer.failWithOutOfGas({ gas: 2000000 })));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('throwing', function () {
|
||||||
|
it('rejects if no failure occurs', async function () {
|
||||||
|
await assertFailure(shouldFail.throwing(this.failer.dontFail()));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('accepts a throw', async function () {
|
||||||
|
await shouldFail.throwing(this.failer.failWithThrow());
|
||||||
|
});
|
||||||
|
|
||||||
|
it('rejects a throw', async function () {
|
||||||
|
await assertFailure(shouldFail.throwing(this.failer.failWithRevert()));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('rejects an outOfGas', async function () {
|
||||||
|
await assertFailure(shouldFail.throwing(this.failer.failWithOutOfGas({ gas: 2000000 })));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('outOfGas', function () {
|
||||||
|
it('rejects if no failure occurs', async function () {
|
||||||
|
await assertFailure(shouldFail.outOfGas(this.failer.dontFail()));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('accepts an out of gas', async function () {
|
||||||
|
await shouldFail.outOfGas(this.failer.failWithOutOfGas({ gas: 2000000 }));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('rejects a revert', async function () {
|
||||||
|
await assertFailure(shouldFail.outOfGas(this.failer.failWithRevert()));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('rejects a throw', async function () {
|
||||||
|
await assertFailure(shouldFail.outOfGas(this.failer.failWithThrow()));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user