blob: 47289c7c662944b87ec2f989765dd23bfb9b96ff (
plain) (
tree)
|
|
import * as _ from 'lodash';
import * as chai from 'chai';
import 'mocha';
import { DocAgnosticFormat, SolidityMethod } from '@0xproject/types';
import { generateSolDocAsync } from '../src/solidity_doc_generator';
import { chaiSetup } from './util/chai_setup';
chaiSetup.configure();
const expect = chai.expect;
describe('#SolidityDocGenerator', () => {
it('should generate a doc object that matches the devdoc-free fixture', async () => {
const doc = await generateSolDocAsync(`${__dirname}/../../test/fixtures/contracts`, [
'TokenTransferProxyNoDevdoc',
]);
expect(doc).to.not.be.undefined();
verifyTokenTransferProxyABIIsDocumented(doc, 'TokenTransferProxyNoDevdoc');
});
const docPromises: Array<Promise<DocAgnosticFormat>> = [
generateSolDocAsync(`${__dirname}/../../test/fixtures/contracts`),
generateSolDocAsync(`${__dirname}/../../test/fixtures/contracts`, []),
generateSolDocAsync(`${__dirname}/../../test/fixtures/contracts`, ['TokenTransferProxy']),
];
docPromises.forEach(docPromise => {
it('should generate a doc object that matches the fixture', async () => {
const doc = await docPromise;
expect(doc).to.not.be.undefined();
verifyTokenTransferProxyABIIsDocumented(doc, 'TokenTransferProxy');
let addAuthorizedAddressMethod: SolidityMethod | undefined;
for (const method of doc.TokenTransferProxy.methods) {
if (method.name === 'addAuthorizedAddress') {
addAuthorizedAddressMethod = method;
}
}
const tokenTransferProxyAddAuthorizedAddressComment = 'Authorizes an address.';
expect((addAuthorizedAddressMethod as SolidityMethod).comment).to.equal(
tokenTransferProxyAddAuthorizedAddressComment,
);
});
});
});
function verifyTokenTransferProxyABIIsDocumented(doc: DocAgnosticFormat, contractName: string): void {
expect(doc[contractName]).to.not.be.undefined();
expect(doc[contractName].constructors).to.not.be.undefined();
const tokenTransferProxyConstructorCount = 0;
const tokenTransferProxyMethodCount = 8;
const tokenTransferProxyEventCount = 3;
expect(doc[contractName].constructors.length).to.equal(tokenTransferProxyConstructorCount);
expect(doc[contractName].methods.length).to.equal(tokenTransferProxyMethodCount);
const events = doc[contractName].events;
if (_.isUndefined(events)) {
throw new Error('events should never be undefined');
}
expect(events.length).to.equal(tokenTransferProxyEventCount);
expect(doc.Ownable).to.not.be.undefined();
expect(doc.Ownable.constructors).to.not.be.undefined();
expect(doc.Ownable.methods).to.not.be.undefined();
const ownableConstructorCount = 1;
const ownableMethodCount = 2;
const ownableEventCount = 1;
expect(doc.Ownable.constructors.length).to.equal(ownableConstructorCount);
expect(doc.Ownable.methods.length).to.equal(ownableMethodCount);
if (_.isUndefined(doc.Ownable.events)) {
throw new Error('events should never be undefined');
}
expect(doc.Ownable.events.length).to.equal(ownableEventCount);
expect(doc.ERC20).to.not.be.undefined();
expect(doc.ERC20.constructors).to.not.be.undefined();
expect(doc.ERC20.methods).to.not.be.undefined();
const erc20ConstructorCount = 0;
const erc20MethodCount = 6;
const erc20EventCount = 2;
expect(doc.ERC20.constructors.length).to.equal(erc20ConstructorCount);
expect(doc.ERC20.methods.length).to.equal(erc20MethodCount);
if (_.isUndefined(doc.ERC20.events)) {
throw new Error('events should never be undefined');
}
expect(doc.ERC20.events.length).to.equal(erc20EventCount);
expect(doc.ERC20Basic).to.not.be.undefined();
expect(doc.ERC20Basic.constructors).to.not.be.undefined();
expect(doc.ERC20Basic.methods).to.not.be.undefined();
const erc20BasicConstructorCount = 0;
const erc20BasicMethodCount = 3;
const erc20BasicEventCount = 1;
expect(doc.ERC20Basic.constructors.length).to.equal(erc20BasicConstructorCount);
expect(doc.ERC20Basic.methods.length).to.equal(erc20BasicMethodCount);
if (_.isUndefined(doc.ERC20Basic.events)) {
throw new Error('events should never be undefined');
}
expect(doc.ERC20Basic.events.length).to.equal(erc20BasicEventCount);
let addAuthorizedAddressMethod: SolidityMethod | undefined;
for (const method of doc[contractName].methods) {
if (method.name === 'addAuthorizedAddress') {
addAuthorizedAddressMethod = method;
}
}
expect(
addAuthorizedAddressMethod,
`method addAuthorizedAddress not found in ${JSON.stringify(doc[contractName].methods)}`,
).to.not.be.undefined();
}
|