'use strict' var init = require('../helpers/init') var sauce = require('./sauce') module.exports = { before: function (browser, done) { init(browser, done) }, '@sources': function () { return sources }, 'Should launch debugger': function (browser) { browser.addFile('blah.sol', sources[0]['browser/blah.sol']) .clickLaunchIcon('udapp') .waitForElementPresent('*[title="Deploy - transact (not payable)"]') .click('*[title="Deploy - transact (not payable)"]') .debugTransaction(0) .assert.containsText('*[data-id="sidePanelSwapitTitle"]', 'DEBUGGER') }, 'Should debug failing transaction': function (browser) { browser.waitForElementVisible('*[data-id="verticalIconsKindudapp"]') .clickLaunchIcon('udapp') .waitForElementPresent('*[data-id="universalDappUiTitleExpander"]') .click('*[data-id="universalDappUiTitleExpander"]') .scrollAndClick('*[title="string name, uint256 goal"]') .setValue('*[title="string name, uint256 goal"]', '"toast", 999') .click('*[data-id="createProject - transact (not payable)"]') .debugTransaction(1) .pause(2000) .scrollAndClick('*[data-id="solidityLocals"]') .assert.containsText('*[data-id="solidityLocals"]', 'toast') .assert.containsText('*[data-id="solidityLocals"]', '999') }, 'Should debug transaction using slider': function (browser) { browser.waitForElementVisible('*[data-id="verticalIconsKindudapp"]') .waitForElementVisible('*[data-id="slider"]') .click('*[data-id="slider"]') .setValue('*[data-id="slider"]', 50) .pause(2000) .assert.containsText('*[data-id="solidityLocals"]', 'no locals') .assert.containsText('*[data-id="stepdetail"]', 'vm trace step: 92') }, 'Should step back and forward transaction': function (browser) { browser.waitForElementVisible('*[data-id="verticalIconsKindudapp"]') .waitForElementPresent('*[data-id="buttonNavigatorIntoBack"]') .scrollAndClick('*[data-id="buttonNavigatorIntoBack"]') .pause(2000) .assert.containsText('*[data-id="stepdetail"]', 'vm trace step: 91') .assert.containsText('*[data-id="stepdetail"]', 'execution step: 91') .click('*[data-id="buttonNavigatorIntoForward"]') .pause(2000) .assert.containsText('*[data-id="stepdetail"]', 'vm trace step: 92') .assert.containsText('*[data-id="stepdetail"]', 'execution step: 92') }, 'Should jump through breakpoints': function (browser) { browser.waitForElementVisible('*[data-id="editorInput"]') .click('.ace_gutter-cell:nth-of-type(10)') .click('.ace_gutter-cell:nth-of-type(20)') .waitForElementVisible('*[data-id="buttonNavigatorJumpPreviousBreakpoint"]') .click('*[data-id="buttonNavigatorJumpPreviousBreakpoint"]') .pause(2000) .assert.containsText('*[data-id="stepdetail"]', 'vm trace step: 0') .assert.containsText('*[data-id="stepdetail"]', 'execution step: 0') .click('*[data-id="buttonNavigatorJumpNextBreakpoint"]') .pause(2000) .assert.containsText('*[data-id="stepdetail"]', 'vm trace step: 140') .assert.containsText('*[data-id="stepdetail"]', 'execution step: 140') .end() }, tearDown: sauce } var sources = [ { 'browser/blah.sol': { content: ` pragma solidity >=0.4.22 <0.6.0; contract Kickstarter { enum State { Started, Completed } struct Project { address owner; string name; uint goal; State state; } Project[] public projects; constructor() public { } function createProject(string memory name, uint goal) public { Project storage project = projects[projects.length]; project.name = name; project.owner = msg.sender; project.state = State.Started; project.goal = goal; } } ` } } ]