First test helpers tests (#1369)
* Removed unused advanceToBlock.
* Added advanceBlock tests.
* Fixed advanceToBlock tests.
* Added single argument tests.
* Finished inLogs tests.
* Fixed linter errors.
* Fixed linter errors.
(cherry picked from commit 9f822906b8
)
pull/1474/head
parent
7ec6079784
commit
10a5864fdf
@ -0,0 +1,62 @@ |
||||
pragma solidity ^0.4.24; |
||||
|
||||
contract EventEmitter { |
||||
event Argumentless(); |
||||
event ShortUint(uint8 value); |
||||
event ShortInt(int8 value); |
||||
event LongUint(uint256 value); |
||||
event LongInt(int256 value); |
||||
event Address(address value); |
||||
event Boolean(bool value); |
||||
event String(string value); |
||||
event LongUintBooleanString( |
||||
uint256 uintValue, |
||||
bool booleanValue, |
||||
string stringValue |
||||
); |
||||
|
||||
function emitArgumentless() public { |
||||
emit Argumentless(); |
||||
} |
||||
|
||||
function emitShortUint(uint8 value) public { |
||||
emit ShortUint(value); |
||||
} |
||||
|
||||
function emitShortInt(int8 value) public { |
||||
emit ShortInt(value); |
||||
} |
||||
|
||||
function emitLongUint(uint256 value) public { |
||||
emit LongUint(value); |
||||
} |
||||
|
||||
function emitLongInt(int256 value) public { |
||||
emit LongInt(value); |
||||
} |
||||
|
||||
function emitAddress(address value) public { |
||||
emit Address(value); |
||||
} |
||||
|
||||
function emitBoolean(bool value) public { |
||||
emit Boolean(value); |
||||
} |
||||
|
||||
function emitString(string value) public { |
||||
emit String(value); |
||||
} |
||||
|
||||
function emitLongUintBooleanString( |
||||
uint256 uintValue, |
||||
bool booleanValue, |
||||
string stringValue) |
||||
public { |
||||
emit LongUintBooleanString(uintValue, booleanValue, stringValue); |
||||
} |
||||
|
||||
function emitLongUintAndBoolean(uint256 uintValue, bool boolValue) public { |
||||
emit LongUint(uintValue); |
||||
emit Boolean(boolValue); |
||||
} |
||||
} |
@ -0,0 +1,19 @@ |
||||
const advanceToBlock = require('../advanceToBlock'); |
||||
|
||||
const BigNumber = web3.BigNumber; |
||||
require('chai') |
||||
.use(require('chai-bignumber')(BigNumber)) |
||||
.should(); |
||||
|
||||
describe('advanceToBlock', function () { |
||||
beforeEach(function () { |
||||
this.startingBlock = web3.eth.blockNumber; |
||||
}); |
||||
|
||||
describe('advanceBlock', function () { |
||||
it('increases the block number by one', async function () { |
||||
await advanceToBlock.advanceBlock(); |
||||
web3.eth.blockNumber.should.be.bignumber.equal(this.startingBlock + 1); |
||||
}); |
||||
}); |
||||
}); |
@ -0,0 +1,232 @@ |
||||
const expectEvent = require('../expectEvent'); |
||||
const EventEmitter = artifacts.require('EventEmitter'); |
||||
|
||||
const BigNumber = web3.BigNumber; |
||||
const should = require('chai') |
||||
.use(require('chai-bignumber')(BigNumber)) |
||||
.should(); |
||||
|
||||
describe('expectEvent', function () { |
||||
beforeEach(async function () { |
||||
this.emitter = await EventEmitter.new(); |
||||
}); |
||||
|
||||
describe('inLogs', function () { |
||||
describe('with no arguments', function () { |
||||
beforeEach(async function () { |
||||
({ logs: this.logs } = await this.emitter.emitArgumentless()); |
||||
}); |
||||
|
||||
it('accepts emitted events', function () { |
||||
expectEvent.inLogs(this.logs, 'Argumentless'); |
||||
}); |
||||
|
||||
it('throws if an unemitted event is requested', function () { |
||||
should.Throw(() => expectEvent.inLogs(this.logs, 'UnemittedEvent')); |
||||
}); |
||||
}); |
||||
|
||||
describe('with single argument', function () { |
||||
context('short uint value', function () { |
||||
beforeEach(async function () { |
||||
this.value = 42; |
||||
({ logs: this.logs } = await this.emitter.emitShortUint(this.value)); |
||||
}); |
||||
|
||||
it('accepts emitted events with correct JavaScript number', function () { |
||||
expectEvent.inLogs(this.logs, 'ShortUint', { value: this.value }); |
||||
}); |
||||
|
||||
it('accepts emitted events with correct BigNumber', function () { |
||||
expectEvent.inLogs(this.logs, 'ShortUint', { value: new BigNumber(this.value) }); |
||||
}); |
||||
|
||||
it('throws if an unemitted event is requested', function () { |
||||
should.Throw(() => expectEvent.inLogs(this.logs, 'UnemittedEvent', { value: this.value })); |
||||
}); |
||||
|
||||
it('throws if an incorrect value is passed', function () { |
||||
should.Throw(() => expectEvent.inLogs(this.logs, 'ShortUint', { value: 23 })); |
||||
}); |
||||
}); |
||||
|
||||
context('short int value', function () { |
||||
beforeEach(async function () { |
||||
this.value = -42; |
||||
({ logs: this.logs } = await this.emitter.emitShortInt(this.value)); |
||||
}); |
||||
|
||||
it('accepts emitted events with correct JavaScript number', function () { |
||||
expectEvent.inLogs(this.logs, 'ShortInt', { value: this.value }); |
||||
}); |
||||
|
||||
it('accepts emitted events with correct BigNumber', function () { |
||||
expectEvent.inLogs(this.logs, 'ShortInt', { value: new BigNumber(this.value) }); |
||||
}); |
||||
|
||||
it('throws if an unemitted event is requested', function () { |
||||
should.Throw(() => expectEvent.inLogs(this.logs, 'UnemittedEvent', { value: this.value })); |
||||
}); |
||||
|
||||
it('throws if an incorrect value is passed', function () { |
||||
should.Throw(() => expectEvent.inLogs(this.logs, 'ShortInt', { value: -23 })); |
||||
}); |
||||
}); |
||||
|
||||
context('long uint value', function () { |
||||
beforeEach(async function () { |
||||
this.bigNumValue = new BigNumber('123456789012345678901234567890'); |
||||
({ logs: this.logs } = await this.emitter.emitLongUint(this.bigNumValue)); |
||||
}); |
||||
|
||||
it('accepts emitted events with correct BigNumber', function () { |
||||
expectEvent.inLogs(this.logs, 'LongUint', { value: this.bigNumValue }); |
||||
}); |
||||
|
||||
it('throws if an unemitted event is requested', function () { |
||||
should.Throw(() => expectEvent.inLogs(this.logs, 'UnemittedEvent', { value: this.bigNumValue })); |
||||
}); |
||||
|
||||
it('throws if an incorrect value is passed', function () { |
||||
should.Throw(() => expectEvent.inLogs(this.logs, 'LongUint', { value: 2300 })); |
||||
}); |
||||
}); |
||||
|
||||
context('long int value', function () { |
||||
beforeEach(async function () { |
||||
this.bigNumValue = new BigNumber('-123456789012345678901234567890'); |
||||
({ logs: this.logs } = await this.emitter.emitLongInt(this.bigNumValue)); |
||||
}); |
||||
|
||||
it('accepts emitted events with correct BigNumber', function () { |
||||
expectEvent.inLogs(this.logs, 'LongInt', { value: this.bigNumValue }); |
||||
}); |
||||
|
||||
it('throws if an unemitted event is requested', function () { |
||||
should.Throw(() => expectEvent.inLogs(this.logs, 'UnemittedEvent', { value: this.bigNumValue })); |
||||
}); |
||||
|
||||
it('throws if an incorrect value is passed', function () { |
||||
should.Throw(() => expectEvent.inLogs(this.logs, 'LongInt', { value: -2300 })); |
||||
}); |
||||
}); |
||||
|
||||
context('address value', function () { |
||||
beforeEach(async function () { |
||||
this.value = '0x811412068e9fbf25dc300a29e5e316f7122b282c'; |
||||
({ logs: this.logs } = await this.emitter.emitAddress(this.value)); |
||||
}); |
||||
|
||||
it('accepts emitted events with correct address', function () { |
||||
expectEvent.inLogs(this.logs, 'Address', { value: this.value }); |
||||
}); |
||||
|
||||
it('throws if an unemitted event is requested', function () { |
||||
should.Throw(() => expectEvent.inLogs(this.logs, 'UnemittedEvent', { value: this.value })); |
||||
}); |
||||
|
||||
it('throws if an incorrect value is passed', function () { |
||||
should.Throw(() => |
||||
expectEvent.inLogs(this.logs, 'Address', { value: '0x21d04e022e0b52b5d5bcf90b7f1aabf406be002d' }) |
||||
); |
||||
}); |
||||
}); |
||||
|
||||
context('boolean value', function () { |
||||
beforeEach(async function () { |
||||
this.value = true; |
||||
({ logs: this.logs } = await this.emitter.emitBoolean(this.value)); |
||||
}); |
||||
|
||||
it('accepts emitted events with correct address', function () { |
||||
expectEvent.inLogs(this.logs, 'Boolean', { value: this.value }); |
||||
}); |
||||
|
||||
it('throws if an unemitted event is requested', function () { |
||||
should.Throw(() => expectEvent.inLogs(this.logs, 'UnemittedEvent', { value: this.value })); |
||||
}); |
||||
|
||||
it('throws if an incorrect value is passed', function () { |
||||
should.Throw(() => expectEvent.inLogs(this.logs, 'Boolean', { value: false })); |
||||
}); |
||||
}); |
||||
|
||||
context('string value', function () { |
||||
beforeEach(async function () { |
||||
this.value = 'OpenZeppelin'; |
||||
({ logs: this.logs } = await this.emitter.emitString(this.value)); |
||||
}); |
||||
|
||||
it('accepts emitted events with correct string', function () { |
||||
expectEvent.inLogs(this.logs, 'String', { value: this.value }); |
||||
}); |
||||
|
||||
it('throws if an unemitted event is requested', function () { |
||||
should.Throw(() => expectEvent.inLogs(this.logs, 'UnemittedEvent', { value: this.value })); |
||||
}); |
||||
|
||||
it('throws if an incorrect value is passed', function () { |
||||
should.Throw(() => expectEvent.inLogs(this.logs, 'String', { value: 'ClosedZeppelin' })); |
||||
}); |
||||
}); |
||||
}); |
||||
|
||||
describe('with multiple arguments', function () { |
||||
beforeEach(async function () { |
||||
this.uintValue = new BigNumber('123456789012345678901234567890'); |
||||
this.booleanValue = true; |
||||
this.stringValue = 'OpenZeppelin'; |
||||
({ logs: this.logs } = |
||||
await this.emitter.emitLongUintBooleanString(this.uintValue, this.booleanValue, this.stringValue)); |
||||
}); |
||||
|
||||
it('accepts correct values', function () { |
||||
expectEvent.inLogs(this.logs, 'LongUintBooleanString', { |
||||
uintValue: this.uintValue, booleanValue: this.booleanValue, stringValue: this.stringValue, |
||||
}); |
||||
}); |
||||
|
||||
it('throws with correct values assigned to wrong arguments', function () { |
||||
should.Throw(() => expectEvent.inLogs(this.logs, 'LongUintBooleanString', { |
||||
uintValue: this.booleanValue, booleanValue: this.uintValue, stringValue: this.stringValue, |
||||
})); |
||||
}); |
||||
|
||||
it('throws when any of the values is incorrect', function () { |
||||
should.Throw(() => expectEvent.inLogs(this.logs, 'LongUintBooleanString', { |
||||
uintValue: 23, booleanValue: this.booleanValue, stringValue: this.stringValue, |
||||
})); |
||||
|
||||
should.Throw(() => expectEvent.inLogs(this.logs, 'LongUintBooleanString', { |
||||
uintValue: this.uintValue, booleanValue: false, stringValue: this.stringValue, |
||||
})); |
||||
|
||||
should.Throw(() => expectEvent.inLogs(this.logs, 'LongUintBooleanString', { |
||||
uintValue: this.uintValue, booleanValue: this.booleanValue, stringValue: 'ClosedZeppelin', |
||||
})); |
||||
}); |
||||
}); |
||||
|
||||
describe('with multiple events', function () { |
||||
beforeEach(async function () { |
||||
this.uintValue = 42; |
||||
this.booleanValue = true; |
||||
({ logs: this.logs } = await this.emitter.emitLongUintAndBoolean(this.uintValue, this.booleanValue)); |
||||
}); |
||||
|
||||
it('accepts all emitted events with correct values', function () { |
||||
expectEvent.inLogs(this.logs, 'LongUint', { value: this.uintValue }); |
||||
expectEvent.inLogs(this.logs, 'Boolean', { value: this.booleanValue }); |
||||
}); |
||||
|
||||
it('throws if an unemitted event is requested', function () { |
||||
should.Throw(() => expectEvent.inLogs(this.logs, 'UnemittedEvent', { value: this.uintValue })); |
||||
}); |
||||
|
||||
it('throws if incorrect values are passed', function () { |
||||
should.Throw(() => expectEvent.inLogs(this.logs, 'LongUint', { value: 23 })); |
||||
should.Throw(() => expectEvent.inLogs(this.logs, 'Boolean', { value: false })); |
||||
}); |
||||
}); |
||||
}); |
||||
}); |
Loading…
Reference in new issue