'use strict' var examples = require('../../src/app/editor/example-contracts') var init = require('../helpers/init') var sauce = require('./sauce') var sources = [ {'browser/Untitled.sol': {content: examples.ballot.content}} ] module.exports = { before: function (browser, done) { init(browser, done) }, '@sources': function () { return sources }, 'Deploy Ballot': function (browser) { browser .waitForElementVisible('#icon-panel', 10000) .clickLaunchIcon('solidity') .testContracts('Untitled.sol', sources[0]['browser/Untitled.sol'], ['Ballot']) .clickLaunchIcon('udapp') .selectAccount('0xCA35b7d915458EF540aDe6068dFe2F44E8fa733c') .setValue('input[placeholder="bytes32[] proposalNames"]', '["0x48656c6c6f20576f726c64210000000000000000000000000000000000000000"]') .click('#runTabView button[class^="instanceButton"]') .waitForElementPresent('.instance:nth-of-type(2)') .click('.instance:nth-of-type(2) > div > button') .createContract(["0x41fab8ea5b1d9fba5e0a6545ca1a2d62fff518578802c033c2b9a031a01c31b3"]) .testTransactionLog('0x57f7ac07a894739a8bbf059248f47aa49935bfcf673494114b1c5c0c183890f0', { status: '0x1 Transaction mined and execution succeed', 'transaction hash': '0x57f7ac07a894739a8bbf059248f47aa49935bfcf673494114b1c5c0c183890f0', 'decoded input': { 'bytes32[] proposalNames': [ '0x48656c6c6f20576f726c64210000000000000000000000000000000000000000' ] } }) }, 'Debug Ballot / delegate': function (browser) { browser.pause(500) .click('span#tx0x41fab8ea5b1d9fba5e0a6545ca1a2d62fff518578802c033c2b9a031a01c31b3 button[class^="debug"]') .pause(2000) .clickLaunchIcon('debugger') .click('#jumppreviousbreakpoint') .pause(2000) .goToVMTraceStep(79) .pause(1000) .checkVariableDebug('soliditystate', stateCheck) .checkVariableDebug('soliditylocals', localsCheck) }, 'Access Ballot via at address': function (browser) { browser.clickLaunchIcon('udapp') .click('button[class^="udappClose"]') .addFile('ballot.abi', { content: ballotABI }) .addAtAddressInstance('0x692a70D2e424a56D2C6C27aA97D1a86395877b3B', true, false) .clickLaunchIcon('fileExplorers') .addAtAddressInstance('0x692a70D2e424a56D2C6C27aA97D1a86395877b3A', true, true) .pause(500) .waitForElementPresent('.instance:nth-of-type(2)') .click('.instance:nth-of-type(2) > div > button') .createContract(["0xca58080c8099429caeeffe43b8104df919c2c543dceb9edf9242fa55f045c803"]) .pause(100000) .testTransactionLog('0x57f7ac07a894739a8bbf059248f47aa49935bfcf673494114b1c5c0c183890f0', { status: '0x1 Transaction mined and execution succeed', 'transaction hash': '0x57f7ac07a894739a8bbf059248f47aa49935bfcf673494114b1c5c0c183890f0', 'decoded input': { 'bytes32[] proposalNames': [ '0x48656c6c6f20576f726c64210000000000000000000000000000000000000000' ] } }) }, 'Deploy and use Ballot using external web3': function (browser) { browser .click('#selectExEnvOptions #web3-mode') .modalFooterOKClick() .clickLaunchIcon('solidity') .testContracts('Untitled.sol', sources[0]['browser/Untitled.sol'], ['Ballot']) .clickLaunchIcon('udapp') .setValue('input[placeholder="bytes32[] proposalNames"]', '["0x48656c6c6f20576f726c64210000000000000000000000000000000000000000"]') .click('#runTabView button[class^="instanceButton"]') .clickInstance(0) .click('#clearConsole') .clickFunction('delegate - transact (not payable)', {types: 'address to', values: '0xCA35b7d915458EF540aDe6068dFe2F44E8fa733c'}) .journalLastChildIncludes('Ballot.delegate(address)') .journalLastChildIncludes('data:0x5c1...a733c') .end() }, tearDown: sauce } var localsCheck = { 'to': { 'value': '0x4B0897B0513FDC7C541B6D9D7E929C4E5364D2DB', 'type': 'address' } } var stateCheck = { 'chairperson': { 'value': '0xCA35B7D915458EF540ADE6068DFE2F44E8FA733C', 'type': 'address', 'constant': false }, 'voters': { 'value': { '000000000000000000000000ca35b7d915458ef540ade6068dfe2f44e8fa733c': { 'value': { 'weight': { 'value': '1', 'type': 'uint256' }, 'voted': { 'value': false, 'type': 'bool' }, 'delegate': { 'value': '0x0000000000000000000000000000000000000000', 'type': 'address' }, 'vote': { 'value': '0', 'type': 'uint256' } }, 'type': 'struct Ballot.Voter' } }, 'type': 'mapping(address => struct Ballot.Voter)', 'constant': false }, 'proposals': { 'value': [ { 'value': { 'name': { 'value': '0x48656C6C6F20576F726C64210000000000000000000000000000000000000000', 'type': 'bytes32' }, 'voteCount': { 'value': '0', 'type': 'uint256' } }, 'type': 'struct Ballot.Proposal' } ], 'length': '0x1', 'type': 'struct Ballot.Proposal[]', 'constant': false } } var ballotABI = `[ { "inputs": [ { "internalType": "bytes32[]", "name": "proposalNames", "type": "bytes32[]" } ], "payable": false, "stateMutability": "nonpayable", "type": "constructor" }, { "constant": true, "inputs": [], "name": "chairperson", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "delegate", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "voter", "type": "address" } ], "name": "giveRightToVote", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "proposals", "outputs": [ { "internalType": "bytes32", "name": "name", "type": "bytes32" }, { "internalType": "uint256", "name": "voteCount", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "uint256", "name": "proposal", "type": "uint256" } ], "name": "vote", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "voters", "outputs": [ { "internalType": "uint256", "name": "weight", "type": "uint256" }, { "internalType": "bool", "name": "voted", "type": "bool" }, { "internalType": "address", "name": "delegate", "type": "address" }, { "internalType": "uint256", "name": "vote", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "winnerName", "outputs": [ { "internalType": "bytes32", "name": "winnerName_", "type": "bytes32" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "winningProposal", "outputs": [ { "internalType": "uint256", "name": "winningProposal_", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" } ]`