Эх сурвалжийг харах

Add testcase for issue #666

Signed-off-by: Sean Young <sean@mess.org>
Sean Young 3 жил өмнө
parent
commit
6c77997961

+ 17 - 0
integration/substrate/issue666.sol

@@ -0,0 +1,17 @@
+contract Flip {
+    function flip () pure public {
+	print("flip");
+    }
+}
+
+contract Inc {
+    Flip _flipper;
+
+    constructor (Flip _flipperContract) {
+	_flipper = _flipperContract;
+    }
+
+    function superFlip () pure public {
+	_flipper.flip();
+    }
+}

+ 32 - 0
integration/substrate/issue666.spec.ts

@@ -0,0 +1,32 @@
+import expect from 'expect';
+import { gasLimit, createConnection, deploy, transaction, aliceKeypair, } from './index';
+import { ContractPromise } from '@polkadot/api-contract';
+import { ApiPromise } from '@polkadot/api';
+
+describe('issue666 flip and inc', () => {
+    let conn: ApiPromise;
+
+    before(async function () {
+        conn = await createConnection();
+    });
+
+    after(async function () {
+        await conn.disconnect();
+    });
+
+    it('create_contract', async function () {
+        this.timeout(50000);
+
+        const alice = aliceKeypair();
+
+        // call the constructors
+        let flipper_contract = await deploy(conn, alice, 'Flip.contract');
+        let inc_contract = await deploy(conn, alice, 'Inc.contract', flipper_contract.address);
+
+        let contract = new ContractPromise(conn, inc_contract.abi, inc_contract.address);
+
+        let tx = contract.tx.superFlip({ gasLimit });
+
+        await transaction(tx, alice);
+    });
+});

+ 10 - 0
tests/substrate.rs

@@ -999,6 +999,16 @@ impl MockSubstrate {
         }
     }
 
+    pub fn set_program(&mut self, index: usize) {
+        let account = account_new();
+
+        let code = self.programs[index].code.clone();
+        self.accounts.insert(account, (code, 0));
+        self.vm = VirtualMachine::new(account, account_new(), 0);
+
+        self.current_program = index;
+    }
+
     pub fn constructor(&mut self, index: usize, args: Vec<u8>) {
         let m = &self.programs[self.current_program].abi.spec.constructors[index];
 

+ 38 - 0
tests/substrate_tests/contracts.rs

@@ -200,3 +200,41 @@ fn creation_code() {
         Ret(runtime.programs[1].code.clone()).encode()
     );
 }
+
+#[test]
+fn issue666() {
+    let mut runtime = build_solidity(
+        r##"
+        contract Flipper {
+            function flip () pure public {
+                print("flip");
+            }
+        }
+
+        contract Inc {
+            Flipper _flipper;
+
+            constructor (Flipper _flipperContract) {
+                _flipper = _flipperContract;
+            }
+
+            function superFlip () pure public {
+                _flipper.flip();
+            }
+        }"##,
+    );
+
+    runtime.constructor(0, Vec::new());
+
+    let flipper_address = runtime.vm.account;
+
+    println!("flipper_address={}", hex::encode(&flipper_address));
+
+    runtime.set_program(1);
+
+    runtime.constructor(0, flipper_address.to_vec());
+
+    runtime.function("superFlip", Vec::new());
+
+    assert!(runtime.vm.output.is_empty());
+}