diff options
author | Leonid Logvinov <logvinov.leon@gmail.com> | 2018-03-28 17:05:36 +0800 |
---|---|---|
committer | Leonid Logvinov <logvinov.leon@gmail.com> | 2018-04-02 17:34:29 +0800 |
commit | 4d9029bb0e3b215efdf165704c80d3bacef0e85a (patch) | |
tree | 8f699dcd0a7b5fba3c31c065a62d640407bba8c3 /packages/base-contract/test/utils_test.ts | |
parent | bc49dde4d5d24b9a8b01459bde061f9b23fb5898 (diff) | |
download | dexon-sol-tools-4d9029bb0e3b215efdf165704c80d3bacef0e85a.tar dexon-sol-tools-4d9029bb0e3b215efdf165704c80d3bacef0e85a.tar.gz dexon-sol-tools-4d9029bb0e3b215efdf165704c80d3bacef0e85a.tar.bz2 dexon-sol-tools-4d9029bb0e3b215efdf165704c80d3bacef0e85a.tar.lz dexon-sol-tools-4d9029bb0e3b215efdf165704c80d3bacef0e85a.tar.xz dexon-sol-tools-4d9029bb0e3b215efdf165704c80d3bacef0e85a.tar.zst dexon-sol-tools-4d9029bb0e3b215efdf165704c80d3bacef0e85a.zip |
Add metacoin example project
Diffstat (limited to 'packages/base-contract/test/utils_test.ts')
-rw-r--r-- | packages/base-contract/test/utils_test.ts | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/packages/base-contract/test/utils_test.ts b/packages/base-contract/test/utils_test.ts new file mode 100644 index 000000000..c083704f4 --- /dev/null +++ b/packages/base-contract/test/utils_test.ts @@ -0,0 +1,108 @@ +import { BigNumber } from '@0xproject/utils'; +import * as chai from 'chai'; +import 'mocha'; + +import { formatABIDataItem } from '../src/utils'; + +const { expect } = chai; + +describe('Utils tests', () => { + describe('#formatABIDataItem', () => { + it('correctly handles arrays', () => { + const calls: Array<{ type: string; value: any }> = []; + const abi = { + name: 'values', + type: 'uint256[]', + }; + const val = [1, 2, 3]; + const formatted = formatABIDataItem(abi, val, (type: string, value: any) => { + calls.push({ type, value }); + return value; // no-op + }); + expect(formatted).to.be.deep.equal(val); + expect(calls).to.be.deep.equal([ + { type: 'uint256', value: 1 }, + { type: 'uint256', value: 2 }, + { type: 'uint256', value: 3 }, + ]); + }); + it('correctly handles tuples', () => { + const calls: Array<{ type: string; value: any }> = []; + const abi = { + components: [ + { + name: 'to', + type: 'address', + }, + { + name: 'amount', + type: 'uint256', + }, + ], + name: 'data', + type: 'tuple', + }; + const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000'; + const val = { to: ZERO_ADDRESS, amount: new BigNumber(1) }; + const formatted = formatABIDataItem(abi, val, (type: string, value: any) => { + calls.push({ type, value }); + return value; // no-op + }); + expect(formatted).to.be.deep.equal(val); + expect(calls).to.be.deep.equal([ + { + type: 'address', + value: val.to, + }, + { + type: 'uint256', + value: val.amount, + }, + ]); + }); + it('correctly handles nested arrays of tuples', () => { + const calls: Array<{ type: string; value: any }> = []; + const abi = { + components: [ + { + name: 'to', + type: 'address', + }, + { + name: 'amount', + type: 'uint256', + }, + ], + name: 'data', + type: 'tuple[2][]', + }; + const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000'; + const val = [ + [{ to: ZERO_ADDRESS, amount: new BigNumber(1) }, { to: ZERO_ADDRESS, amount: new BigNumber(2) }], + ]; + const formatted = formatABIDataItem(abi, val, (type: string, value: any) => { + calls.push({ type, value }); + return value; // no-op + }); + expect(formatted).to.be.deep.equal(val); + expect(calls).to.be.deep.equal([ + { + type: 'address', + value: val[0][0].to, + }, + { + type: 'uint256', + value: val[0][0].amount, + }, + { + type: 'address', + value: val[0][1].to, + }, + { + type: 'uint256', + value: val[0][1].amount, + }, + ]); + }); + }); +}); |