From b53490bd265c9893cf391ced75715c424aa30aed Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Thu, 22 Oct 2020 11:39:55 +0200 Subject: [PATCH] Add solang tests, re-organize sample layouts (#2760) * Add solang tests, re-organize sample layouts * Extra lines --- packages/api-contract/src/Abi.spec.ts | 76 ++---------- .../api-contract/src/MetaRegistry.spec.ts | 36 +----- .../test/compare/delegator.test.json | 31 +++++ .../test/compare/ints256.test.json | 6 + packages/api-contract/test/contracts/index.ts | 10 +- .../test/contracts/{ => ink}/accumulator.wasm | Bin .../test/contracts/{ => ink}/adder.wasm | Bin .../test/contracts/{ => ink}/delegator.json | 0 .../test/contracts/{ => ink}/delegator.wasm | Bin .../test/contracts/{ => ink}/dns.json | 0 .../test/contracts/{ => ink}/dns.wasm | Bin .../test/contracts/{ => ink}/erc20.json | 0 .../test/contracts/{ => ink}/erc20.wasm | Bin .../test/contracts/{ => ink}/erc721.json | 0 .../test/contracts/{ => ink}/erc721.wasm | Bin .../test/contracts/{ => ink}/flipper.json | 0 .../test/contracts/{ => ink}/flipper.wasm | Bin .../test/contracts/{ => ink}/incrementer.json | 0 .../test/contracts/{ => ink}/incrementer.wasm | Bin .../api-contract/test/contracts/ink/index.ts | 10 ++ .../contracts/{ => ink}/multisig_plain.json | 0 .../contracts/{ => ink}/multisig_plain.wasm | Bin .../test/contracts/{ => ink}/subber.wasm | Bin .../contracts/{ => ink}/trait-flipper.json | 0 .../contracts/{ => ink}/trait-flipper.wasm | Bin .../test/contracts/solang/index.ts | 4 + .../test/contracts/solang/ints256.json | 113 ++++++++++++++++++ .../test/contracts/solang/ints256.sol | 13 ++ .../test/contracts/solang/ints256.wasm | Bin 0 -> 1782 bytes 29 files changed, 195 insertions(+), 104 deletions(-) create mode 100644 packages/api-contract/test/compare/delegator.test.json create mode 100644 packages/api-contract/test/compare/ints256.test.json rename packages/api-contract/test/contracts/{ => ink}/accumulator.wasm (100%) rename packages/api-contract/test/contracts/{ => ink}/adder.wasm (100%) rename packages/api-contract/test/contracts/{ => ink}/delegator.json (100%) rename packages/api-contract/test/contracts/{ => ink}/delegator.wasm (100%) rename packages/api-contract/test/contracts/{ => ink}/dns.json (100%) rename packages/api-contract/test/contracts/{ => ink}/dns.wasm (100%) rename packages/api-contract/test/contracts/{ => ink}/erc20.json (100%) rename packages/api-contract/test/contracts/{ => ink}/erc20.wasm (100%) rename packages/api-contract/test/contracts/{ => ink}/erc721.json (100%) rename packages/api-contract/test/contracts/{ => ink}/erc721.wasm (100%) rename packages/api-contract/test/contracts/{ => ink}/flipper.json (100%) rename packages/api-contract/test/contracts/{ => ink}/flipper.wasm (100%) rename packages/api-contract/test/contracts/{ => ink}/incrementer.json (100%) rename packages/api-contract/test/contracts/{ => ink}/incrementer.wasm (100%) create mode 100644 packages/api-contract/test/contracts/ink/index.ts rename packages/api-contract/test/contracts/{ => ink}/multisig_plain.json (100%) rename packages/api-contract/test/contracts/{ => ink}/multisig_plain.wasm (100%) rename packages/api-contract/test/contracts/{ => ink}/subber.wasm (100%) rename packages/api-contract/test/contracts/{ => ink}/trait-flipper.json (100%) rename packages/api-contract/test/contracts/{ => ink}/trait-flipper.wasm (100%) create mode 100644 packages/api-contract/test/contracts/solang/index.ts create mode 100644 packages/api-contract/test/contracts/solang/ints256.json create mode 100644 packages/api-contract/test/contracts/solang/ints256.sol create mode 100644 packages/api-contract/test/contracts/solang/ints256.wasm diff --git a/packages/api-contract/src/Abi.spec.ts b/packages/api-contract/src/Abi.spec.ts index b8f864e0ec..8da09c5ba1 100644 --- a/packages/api-contract/src/Abi.spec.ts +++ b/packages/api-contract/src/Abi.spec.ts @@ -19,72 +19,18 @@ function compareInterface (name: string, messageIds: string[]): void { } } +interface JSONAbi { + spec: { + messages: { + name: string[] | string + }[] + } +} + describe('Abi', (): void => { - describe('construction', (): void => { - it('initializes from a contract ABI (flipper)', (): void => { - compareInterface('flipper', ['flip', 'get']); - }); - - it('initializes from a contract ABI (incrementer)', (): void => { - compareInterface('incrementer', ['inc', 'get']); - }); - - it('initializes from a contract ABI (erc20)', (): void => { - compareInterface('erc20', [ - 'total_supply', - 'balance_of', - 'allowance', - 'transfer', - 'approve', - 'transfer_from' - ]); - }); - - it('initializes from a contract ABI (delegator)', (): void => { - compareInterface('delegator', [ - 'get', - 'change', - 'switch' - ]); - }); - - it('initializes from a contract ABI (dns)', (): void => { - compareInterface('dns', [ - 'register', - 'set_address', - 'transfer', - 'get_address' - ]); - }); - - it('initializes from a contract ABI (erc721)', (): void => { - compareInterface('erc721', [ - 'balance_of', - 'owner_of', - 'get_approved', - 'is_approved_for_all', - 'set_approval_for_all', - 'approve', - 'transfer', - 'transfer_from', - 'mint', - 'burn' - ]); - }); - - it('initializes from a contract ABI (multisig_plain)', (): void => { - compareInterface('multisigPlain', [ - 'add_owner', - 'remove_owner', - 'replace_owner', - 'change_requirement', - 'submit_transaction', - 'cancel_transaction', - 'confirm_transaction', - 'revoke_confirmation', - 'invoke_transaction', - 'eval_transaction' - ]); + Object.entries(abis).forEach(([abiName, abi]) => { + it(`initializes from a contract ABI (${abiName})`, (): void => { + compareInterface(abiName, (abi as JSONAbi).spec.messages.map(({ name }) => Array.isArray(name) ? name[0] : name)); }); }); }); diff --git a/packages/api-contract/src/MetaRegistry.spec.ts b/packages/api-contract/src/MetaRegistry.spec.ts index b2ac6836eb..f3139f4712 100644 --- a/packages/api-contract/src/MetaRegistry.spec.ts +++ b/packages/api-contract/src/MetaRegistry.spec.ts @@ -7,13 +7,11 @@ import path from 'path'; import Abi from './Abi'; import * as testContracts from '../test/contracts'; -import * as userContracts from '../test/contracts/user'; const abis: Record = { ...testContracts }; -const userAbis: Record = { ...userContracts }; function compareTypes (name: string): void { - const abi = new Abi(abis[name] || userAbis[name]); + const abi = new Abi(abis[name]); try { const cmpPath = path.join(__dirname, `../test/compare/${name}.test.json`); @@ -32,35 +30,9 @@ function compareTypes (name: string): void { } describe('MetaRegistry', (): void => { - describe('types', (): void => { - it('initializes from a contract ABI (flipper)', (): void => { - compareTypes('flipper'); - }); - - it('initializes from a contract ABI (incrementer)', (): void => { - compareTypes('incrementer'); - }); - - it('initializes from a contract ABI (erc20)', (): void => { - compareTypes('erc20'); - }); - - it('initializes from a contract ABI (dns)', (): void => { - compareTypes('dns'); - }); - - it('initializes from a contract ABI (erc721)', (): void => { - compareTypes('erc721'); - }); - - it('initializes from a contract ABI (multisig_plain)', (): void => { - compareTypes('multisigPlain'); - }); - }); - - describe('user ABIs', (): void => { - it('initializes from a contract ABI (withString)', (): void => { - compareTypes('withString'); + Object.keys(abis).forEach((abiName) => { + it(`initializes from a contract ABI (${abiName})`, (): void => { + compareTypes(abiName); }); }); diff --git a/packages/api-contract/test/compare/delegator.test.json b/packages/api-contract/test/compare/delegator.test.json new file mode 100644 index 0000000000..72e3aabfd8 --- /dev/null +++ b/packages/api-contract/test/compare/delegator.test.json @@ -0,0 +1,31 @@ +[ + { + "displayName": "AccountId", + "namespace": "ink_env::types", + "info": 6, + "type": "AccountId" + }, + { + "info": 12, + "length": 32, + "sub": { + "info": 6, + "type": "u8" + }, + "type": "[u8;32]" + }, + { + "info": 6, + "type": "u8" + }, + { + "info": 6, + "type": "i32" + }, + { + "displayName": "Hash", + "namespace": "ink_env::types", + "info": 6, + "type": "Hash" + } +] \ No newline at end of file diff --git a/packages/api-contract/test/compare/ints256.test.json b/packages/api-contract/test/compare/ints256.test.json new file mode 100644 index 0000000000..f97fdb2089 --- /dev/null +++ b/packages/api-contract/test/compare/ints256.test.json @@ -0,0 +1,6 @@ +[ + { + "info": 6, + "type": "u256" + } +] \ No newline at end of file diff --git a/packages/api-contract/test/contracts/index.ts b/packages/api-contract/test/contracts/index.ts index 6472e1093d..2fb2aebb7a 100644 --- a/packages/api-contract/test/contracts/index.ts +++ b/packages/api-contract/test/contracts/index.ts @@ -1,10 +1,6 @@ // Copyright 2017-2020 @polkadot/api-contract authors & contributors // SPDX-License-Identifier: Apache-2.0 -export { default as delegator } from './delegator.json'; -export { default as dns } from './dns.json'; -export { default as erc20 } from './erc20.json'; -export { default as erc721 } from './erc721.json'; -export { default as flipper } from './flipper.json'; -export { default as incrementer } from './incrementer.json'; -export { default as multisigPlain } from './multisig_plain.json'; +export * from './ink'; +export * from './solang'; +export * from './user'; diff --git a/packages/api-contract/test/contracts/accumulator.wasm b/packages/api-contract/test/contracts/ink/accumulator.wasm similarity index 100% rename from packages/api-contract/test/contracts/accumulator.wasm rename to packages/api-contract/test/contracts/ink/accumulator.wasm diff --git a/packages/api-contract/test/contracts/adder.wasm b/packages/api-contract/test/contracts/ink/adder.wasm similarity index 100% rename from packages/api-contract/test/contracts/adder.wasm rename to packages/api-contract/test/contracts/ink/adder.wasm diff --git a/packages/api-contract/test/contracts/delegator.json b/packages/api-contract/test/contracts/ink/delegator.json similarity index 100% rename from packages/api-contract/test/contracts/delegator.json rename to packages/api-contract/test/contracts/ink/delegator.json diff --git a/packages/api-contract/test/contracts/delegator.wasm b/packages/api-contract/test/contracts/ink/delegator.wasm similarity index 100% rename from packages/api-contract/test/contracts/delegator.wasm rename to packages/api-contract/test/contracts/ink/delegator.wasm diff --git a/packages/api-contract/test/contracts/dns.json b/packages/api-contract/test/contracts/ink/dns.json similarity index 100% rename from packages/api-contract/test/contracts/dns.json rename to packages/api-contract/test/contracts/ink/dns.json diff --git a/packages/api-contract/test/contracts/dns.wasm b/packages/api-contract/test/contracts/ink/dns.wasm similarity index 100% rename from packages/api-contract/test/contracts/dns.wasm rename to packages/api-contract/test/contracts/ink/dns.wasm diff --git a/packages/api-contract/test/contracts/erc20.json b/packages/api-contract/test/contracts/ink/erc20.json similarity index 100% rename from packages/api-contract/test/contracts/erc20.json rename to packages/api-contract/test/contracts/ink/erc20.json diff --git a/packages/api-contract/test/contracts/erc20.wasm b/packages/api-contract/test/contracts/ink/erc20.wasm similarity index 100% rename from packages/api-contract/test/contracts/erc20.wasm rename to packages/api-contract/test/contracts/ink/erc20.wasm diff --git a/packages/api-contract/test/contracts/erc721.json b/packages/api-contract/test/contracts/ink/erc721.json similarity index 100% rename from packages/api-contract/test/contracts/erc721.json rename to packages/api-contract/test/contracts/ink/erc721.json diff --git a/packages/api-contract/test/contracts/erc721.wasm b/packages/api-contract/test/contracts/ink/erc721.wasm similarity index 100% rename from packages/api-contract/test/contracts/erc721.wasm rename to packages/api-contract/test/contracts/ink/erc721.wasm diff --git a/packages/api-contract/test/contracts/flipper.json b/packages/api-contract/test/contracts/ink/flipper.json similarity index 100% rename from packages/api-contract/test/contracts/flipper.json rename to packages/api-contract/test/contracts/ink/flipper.json diff --git a/packages/api-contract/test/contracts/flipper.wasm b/packages/api-contract/test/contracts/ink/flipper.wasm similarity index 100% rename from packages/api-contract/test/contracts/flipper.wasm rename to packages/api-contract/test/contracts/ink/flipper.wasm diff --git a/packages/api-contract/test/contracts/incrementer.json b/packages/api-contract/test/contracts/ink/incrementer.json similarity index 100% rename from packages/api-contract/test/contracts/incrementer.json rename to packages/api-contract/test/contracts/ink/incrementer.json diff --git a/packages/api-contract/test/contracts/incrementer.wasm b/packages/api-contract/test/contracts/ink/incrementer.wasm similarity index 100% rename from packages/api-contract/test/contracts/incrementer.wasm rename to packages/api-contract/test/contracts/ink/incrementer.wasm diff --git a/packages/api-contract/test/contracts/ink/index.ts b/packages/api-contract/test/contracts/ink/index.ts new file mode 100644 index 0000000000..6472e1093d --- /dev/null +++ b/packages/api-contract/test/contracts/ink/index.ts @@ -0,0 +1,10 @@ +// Copyright 2017-2020 @polkadot/api-contract authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +export { default as delegator } from './delegator.json'; +export { default as dns } from './dns.json'; +export { default as erc20 } from './erc20.json'; +export { default as erc721 } from './erc721.json'; +export { default as flipper } from './flipper.json'; +export { default as incrementer } from './incrementer.json'; +export { default as multisigPlain } from './multisig_plain.json'; diff --git a/packages/api-contract/test/contracts/multisig_plain.json b/packages/api-contract/test/contracts/ink/multisig_plain.json similarity index 100% rename from packages/api-contract/test/contracts/multisig_plain.json rename to packages/api-contract/test/contracts/ink/multisig_plain.json diff --git a/packages/api-contract/test/contracts/multisig_plain.wasm b/packages/api-contract/test/contracts/ink/multisig_plain.wasm similarity index 100% rename from packages/api-contract/test/contracts/multisig_plain.wasm rename to packages/api-contract/test/contracts/ink/multisig_plain.wasm diff --git a/packages/api-contract/test/contracts/subber.wasm b/packages/api-contract/test/contracts/ink/subber.wasm similarity index 100% rename from packages/api-contract/test/contracts/subber.wasm rename to packages/api-contract/test/contracts/ink/subber.wasm diff --git a/packages/api-contract/test/contracts/trait-flipper.json b/packages/api-contract/test/contracts/ink/trait-flipper.json similarity index 100% rename from packages/api-contract/test/contracts/trait-flipper.json rename to packages/api-contract/test/contracts/ink/trait-flipper.json diff --git a/packages/api-contract/test/contracts/trait-flipper.wasm b/packages/api-contract/test/contracts/ink/trait-flipper.wasm similarity index 100% rename from packages/api-contract/test/contracts/trait-flipper.wasm rename to packages/api-contract/test/contracts/ink/trait-flipper.wasm diff --git a/packages/api-contract/test/contracts/solang/index.ts b/packages/api-contract/test/contracts/solang/index.ts new file mode 100644 index 0000000000..a822158159 --- /dev/null +++ b/packages/api-contract/test/contracts/solang/index.ts @@ -0,0 +1,4 @@ +// Copyright 2017-2020 @polkadot/api-contract authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +export { default as ints256 } from './ints256.json'; diff --git a/packages/api-contract/test/contracts/solang/ints256.json b/packages/api-contract/test/contracts/solang/ints256.json new file mode 100644 index 0000000000..8263c74fed --- /dev/null +++ b/packages/api-contract/test/contracts/solang/ints256.json @@ -0,0 +1,113 @@ +{ + "contract": { + "authors": [ + "Sean Young " + ], + "description": "Test 256 bits types", + "name": "ints256", + "version": "0.0.1" + }, + "metadataVersion": "0.1.0", + "source": { + "compiler": "solang 0.1.4", + "hash": "0xa85fb5c61a09d71dce84c15a8bd87e6f4eafac498a1aec3869e8cf7ea4389697", + "language": "Solidity 0.1.4" + }, + "spec": { + "constructors": [ + { + "args": [], + "docs": [ + "" + ], + "name": "new", + "selector": "0x861731d5" + } + ], + "events": [], + "messages": [ + { + "args": [ + { + "name": "a", + "type": { + "display_name": [ + "u256" + ], + "type": 1 + } + }, + { + "name": "b", + "type": { + "display_name": [ + "u256" + ], + "type": 1 + } + } + ], + "docs": [ + "Multiply two 256 bit values\n\n" + ], + "mutates": false, + "name": "multiply", + "payable": false, + "return_type": { + "display_name": [ + "u256" + ], + "type": 1 + }, + "selector": "0x165c4a16" + }, + { + "args": [ + { + "name": "a", + "type": { + "display_name": [ + "u256" + ], + "type": 1 + } + }, + { + "name": "b", + "type": { + "display_name": [ + "u256" + ], + "type": 1 + } + } + ], + "docs": [ + "Add two 256 bit values\n\n" + ], + "mutates": false, + "name": "add", + "payable": false, + "return_type": { + "display_name": [ + "u256" + ], + "type": 1 + }, + "selector": "0x771602f7" + } + ] + }, + "storage": { + "struct": { + "fields": [] + } + }, + "types": [ + { + "def": { + "primitive": "u256" + } + } + ] +} \ No newline at end of file diff --git a/packages/api-contract/test/contracts/solang/ints256.sol b/packages/api-contract/test/contracts/solang/ints256.sol new file mode 100644 index 0000000000..1225a6b912 --- /dev/null +++ b/packages/api-contract/test/contracts/solang/ints256.sol @@ -0,0 +1,13 @@ +/// @title Test 256 bits types +/// @author Sean Young +contract ints256 { + /// Multiply two 256 bit values + function multiply(uint256 a, uint256 b) public pure returns (uint256) { + return a * b; + } + + /// Add two 256 bit values + function add(uint256 a, uint256 b) public pure returns (uint256) { + return a + b; + } +} diff --git a/packages/api-contract/test/contracts/solang/ints256.wasm b/packages/api-contract/test/contracts/solang/ints256.wasm new file mode 100644 index 0000000000000000000000000000000000000000..1973316be540b38ba3e463b1d11c950650335872 GIT binary patch literal 1782 zcmbtU%WfQ15Ur|v`{C*7xRESmDJ;&tcwtKs$|9NBAToCpV}nC@S!`n~86?_|_!$u~ zOwYoyX2F_IK#If&iB*ZpRG^%Jr^lsE6pV{beu(^G^rO!uS?Cu>O(YY(DT?d1sgW1D@)Y%9fcEIrec z9(YmOIq8vl0ezTDrUrS=DGTH{(4wSHGU-7;At}R```&DM3G?r1B1{>I($^5=ZAVCY zu**5Yf;wU|5G3rC9Z6BQ+6I9;V!`^pM(9YIfdhA>4Gu+_{U$c4cw{OW!2~%1m0?&q z3*#bf9FdO$ujY(6RHchx7lm8`+e9VHIb~Us$^Xero6Pk3OzFXB5P=nNCXj3O$>}`W zfn20>F+H@9K6JV07$ZbTSAA0Y8(_2$KP)}3<EHXrQg<$UrjfTEJwtmyi!Un79k@gj#a2b+Nl|BK#Uvt(Ht_?v; z3!!*N2t^+g%$~RmH(Z2P;L^8XRy02QlzF6dmvh~l31_sgyJMJeZ-08~q)(2udk$v= zvo)PSV5Z)lo;U%+p1PWvbWN&@?HalcQyR>P<32f2OgYCq)p}EJCnt^}uoEY>Y%XCA zn5)7B3gfYKBn?GKi(30CT-8~<1`6hb{M=orn?T|8ho4@2y`t{roCE83QZQwgZgqzG z{)og@>F7-gztWZ`$Djp$SzMG9Epz!7Xvq}%m_O;$Cplf)qp0LX`>Q)xl)@YBPjr(~ z&;HNvCoijabAk!qzI^c`ujCT$K*C(;6-%Oyh!rr1Se6lz>@r;R%eoJW^7aZZ=l@<{3OT3$1| z)lm9}ZcTo!Vf~=tdA}il6;S&C4bO?)NeLCzK3Y;gGy1z