evm
Version:
An ethereum virtual machine (EVM) bytecode decompiler
59 lines (53 loc) • 2.24 kB
text/typescript
import 'mocha';
import { expect } from 'chai';
import validTypes from './utils/validTypes';
import * as events from '../../data/events.json';
describe('events.json', () => {
it('should not contain duplicates', () => {
expect(events).to.deep.equal([...new Set(events)]);
});
it('entries should not contain spaces', () => {
expect(events.filter(eventName => eventName.includes(' '))).to.deep.equal([]);
});
it('entries should not contain semicolons', () => {
expect(events.filter(eventName => eventName.includes(';'))).to.deep.equal([]);
});
it('entries should be formatted correctly using `Event(...arguments)` (example: `Transfer(address,address,uint256)`)', () => {
expect(
events.filter(
eventName => !eventName.match(/^[a-zA-Z0-9_$]+\([a-zA-Z0-9,\[\]\(\)]*\)$/)
)
).to.deep.equal([]);
});
it('entries should contain valid arguments', () => {
events.forEach(eventName => {
const eventArgumentsRaw = /^[a-zA-Z0-9]+\(([a-zA-Z0-9,]*)\)$/.exec(eventName);
if (eventArgumentsRaw) {
const eventArguments = eventArgumentsRaw[1].split(',');
if (eventArguments.length === 1 && eventArguments[0] === '') {
eventArguments.pop();
}
expect(
eventArguments,
eventName + ' contains `uint` (should be `uint256`)'
).to.not.include('uint');
expect(
eventArguments,
eventName + ' contains `int` (should be `int256`)'
).to.not.include('int');
expect(
eventArguments,
eventName + ' contains `byte` (should be `bytes1`)'
).to.not.include('byte');
expect(
eventArguments.filter(
eventArgument => validTypes.indexOf(eventArgument) === -1
),
eventName
).to.deep.equal([]);
}
});
})
.timeout(10000)
.slow(5000);
});