You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
2.0 KiB
72 lines
2.0 KiB
6 years ago
|
import { AbiCoder } from '../src/abi/abiCoder';
|
||
6 years ago
|
import { BN } from '@harmony-js/crypto';
|
||
|
import { isArray } from '@harmony-js/utils';
|
||
6 years ago
|
import { abis } from './fixtures/abiv2';
|
||
|
|
||
|
function getValues(object: any, format?: any, named?: any): any {
|
||
|
if (isArray(object)) {
|
||
|
// tslint:disable-next-line: no-shadowed-variable
|
||
|
const result: any[] = [];
|
||
|
// tslint:disable-next-line: no-shadowed-variable
|
||
|
object.forEach((object: any) => {
|
||
|
result.push(getValues(object, format, named));
|
||
|
});
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
switch (object.type) {
|
||
|
case 'number':
|
||
|
return new BN(object.value);
|
||
|
case 'boolean':
|
||
|
case 'string':
|
||
|
return object.value;
|
||
|
|
||
|
case 'buffer':
|
||
|
return object.value;
|
||
|
|
||
|
case 'tuple':
|
||
|
const result = getValues(object.value, format, named);
|
||
|
if (named) {
|
||
|
const namedResult: any = {};
|
||
|
result.forEach((value: any, index: number) => {
|
||
|
namedResult['r' + String(index)] = value;
|
||
|
});
|
||
|
return namedResult;
|
||
|
}
|
||
|
return result;
|
||
|
|
||
|
default:
|
||
|
throw new Error('invalid type - ' + object.type);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
describe('test abiv2', () => {
|
||
|
it('should encode abiv2', () => {
|
||
|
const coder = new AbiCoder();
|
||
|
for (const abiItem of abis) {
|
||
|
const test: any = abiItem;
|
||
|
const values = getValues(JSON.parse(test.values));
|
||
|
const types = JSON.parse(test.types);
|
||
|
const expected = test.result;
|
||
|
const encoded = coder.encode(types, values);
|
||
|
|
||
|
expect(JSON.stringify(encoded)).toEqual(JSON.stringify(expected));
|
||
|
|
||
|
const namedEncoded = coder.encode(types, values);
|
||
|
|
||
|
expect(JSON.stringify(namedEncoded)).toEqual(JSON.stringify(expected));
|
||
|
}
|
||
|
});
|
||
|
it('should decode abiv2', () => {
|
||
|
const coder = new AbiCoder();
|
||
|
for (const abiItem of abis) {
|
||
|
const test = abiItem;
|
||
|
const values = getValues(JSON.parse(test.values));
|
||
|
const types = JSON.parse(test.types);
|
||
|
const expected = test.result;
|
||
|
const decoded = coder.decode(types, expected);
|
||
|
expect(JSON.stringify(decoded)).toEqual(JSON.stringify(values));
|
||
|
}
|
||
|
});
|
||
|
});
|