diff options
author | Greg Hysen <greg.hysen@gmail.com> | 2018-11-10 10:59:27 +0800 |
---|---|---|
committer | Greg Hysen <greg.hysen@gmail.com> | 2018-11-29 08:38:10 +0800 |
commit | 41e01e98064b129f588d72ed25267f4865c58f5c (patch) | |
tree | 194e741b271d863d88d18c9b14471f336f43b633 | |
parent | 0835cf0ea2bb3c2c18d2a5d44ec914e2945af1b0 (diff) | |
download | dexon-0x-contracts-41e01e98064b129f588d72ed25267f4865c58f5c.tar.gz dexon-0x-contracts-41e01e98064b129f588d72ed25267f4865c58f5c.tar.zst dexon-0x-contracts-41e01e98064b129f588d72ed25267f4865c58f5c.zip |
making progress on basic example
-rw-r--r-- | packages/order-utils/test/abi/data_type.ts | 15 | ||||
-rw-r--r-- | packages/order-utils/test/abi/evm_data_types.ts | 7 | ||||
-rw-r--r-- | packages/order-utils/test/abi_encoder_test.ts | 10 |
3 files changed, 20 insertions, 12 deletions
diff --git a/packages/order-utils/test/abi/data_type.ts b/packages/order-utils/test/abi/data_type.ts index 201eb89f9..c1e352508 100644 --- a/packages/order-utils/test/abi/data_type.ts +++ b/packages/order-utils/test/abi/data_type.ts @@ -95,15 +95,17 @@ export abstract class MemberDataType extends DataType { private members: DataType[]; private isArray: boolean; protected arrayLength: number | undefined; + protected arrayElementType: string | undefined; - public constructor(dataItem: DataItem, isArray: boolean = false, arrayLength?: number) { + public constructor(dataItem: DataItem, isArray: boolean = false, arrayLength?: number, arrayElementType?: string) { super(dataItem); this.memberMap = {}; this.members = []; this.isArray = isArray; this.arrayLength = arrayLength; + this.arrayElementType = arrayElementType; if (isArray && arrayLength !== undefined) { [this.members, this.memberMap] = this.createMembersWithLength(dataItem, arrayLength); } else if (!isArray) { @@ -119,10 +121,10 @@ export abstract class MemberDataType extends DataType { let members: DataType[] = []; let memberMap: MemberMap = {}; - _.each(dataItem.components, (dataItem: DataItem) => { + _.each(dataItem.components, (memberItem: DataItem) => { const childDataItem = { - type: dataItem.type, - name: `${dataItem.name}.${dataItem.name}`, + type: memberItem.type, + name: `${dataItem.name}.${memberItem.name}`, } as DataItem; const child = DataTypeFactory.create(childDataItem, this); members.push(child); @@ -133,12 +135,13 @@ export abstract class MemberDataType extends DataType { } private createMembersWithLength(dataItem: DataItem, length: number): [DataType[], MemberMap] { + console.log(dataItem); let members: DataType[] = []; let memberMap: MemberMap = {}; const range = _.range(length); _.each(range, (idx: number) => { const childDataItem = { - type: dataItem.type, + type: this.arrayElementType, name: `${dataItem.name}[${idx.toString(10)}]`, } as DataItem; const components = dataItem.components; @@ -164,7 +167,7 @@ export abstract class MemberDataType extends DataType { } let members = this.members; - if (this.arrayLength === undefined) { + if (this.isArray && this.arrayLength === undefined) { [members,] = this.createMembersWithLength(this.getDataItem(), value.length); } diff --git a/packages/order-utils/test/abi/evm_data_types.ts b/packages/order-utils/test/abi/evm_data_types.ts index 4dffedb8d..1bd4f0d51 100644 --- a/packages/order-utils/test/abi/evm_data_types.ts +++ b/packages/order-utils/test/abi/evm_data_types.ts @@ -347,9 +347,10 @@ export class SolArray extends MemberDataType { } const isArray = true; + const arrayElementType = matches[1]; const arrayLength = (matches[2] === '') ? undefined : parseInt(matches[2], 10); - super(dataItem, isArray, arrayLength); - this.elementType = matches[1]; + super(dataItem, isArray, arrayLength, arrayElementType); + this.elementType = arrayElementType; this.arraySignature = this.computeSignature(); } @@ -388,7 +389,7 @@ export class Method extends MemberDataType { public selector: string; constructor(abi: MethodAbi) { - super({ type: 'method', name: abi.name }); + super({ type: 'method', name: abi.name, components: abi.inputs }); this.methodSignature = this.computeSignature(); this.selector = this.methodSelector = this.computeSelector(); diff --git a/packages/order-utils/test/abi_encoder_test.ts b/packages/order-utils/test/abi_encoder_test.ts index d75c9dbf1..6655af1ff 100644 --- a/packages/order-utils/test/abi_encoder_test.ts +++ b/packages/order-utils/test/abi_encoder_test.ts @@ -18,13 +18,15 @@ import * as AbiEncoder from './abi/abi_encoder'; import * as AbiSamples from './abi_samples'; +AbiEncoder.DataTypeFactory.setImpl(new AbiEncoder.EvmDataTypeFactoryImpl()); + chaiSetup.configure(); const expect = chai.expect; describe.only('ABI Encoder', () => { describe.only('ABI Tests at Method Level', () => { - it('Crazy ABI', async () => { + it.skip('Crazy ABI', async () => { const method = new AbiEncoder.Method(AbiSamples.crazyAbi); console.log(method.getSignature()); @@ -89,8 +91,9 @@ describe.only('ABI Encoder', () => { expect(calldata).to.be.equal(expectedCalldata); }); - it('Crazy ABI #1', async () => { + it.skip('Crazy ABI #1', async () => { const method = new AbiEncoder.Method(AbiSamples.crazyAbi1); + const args = [ new BigNumber(256745454), new BigNumber(-256745454), @@ -115,6 +118,7 @@ describe.only('ABI Encoder', () => { it('Types with default widths', async () => { const method = new AbiEncoder.Method(AbiSamples.typesWithDefaultWidthsAbi); + console.log(method); const args = [new BigNumber(1), new BigNumber(-1), '0x56', [new BigNumber(1)], [new BigNumber(-1)], ['0x56']]; const calldata = method.encode(args); console.log(calldata); @@ -325,7 +329,7 @@ describe.only('ABI Encoder', () => { expect(calldata).to.be.equal(expectedCalldata); }); - it('Yessir', async () => { + it.only('Yessir', async () => { const method = new AbiEncoder.Method(AbiSamples.simpleAbi); const calldata = method.encode([new BigNumber(5), 'five']); console.log(calldata); |