commit
7fad9dc864
@ -0,0 +1,36 @@ |
||||
#!/bin/bash |
||||
|
||||
|
||||
SAUCECONNECT_URL="http://saucelabs.com/downloads/sc-4.3.16-linux.tar.gz" |
||||
SAUCECONNECT_USERNAME="yann300" |
||||
SAUCECONNECT_ACCESSKEY="e6f430f2-daa0-48bb-90fd-8bee20f429eb" |
||||
SAUCECONNECT_JOBIDENTIFIER="remix_tests_${TRAVIS_JOB_NUMBER}" |
||||
SAUCECONNECT_READYFILE="sc.ready" |
||||
TEST_EXITCODE=0 |
||||
|
||||
npm run build |
||||
npm run serve & |
||||
|
||||
wget $SAUCECONNECT_URL |
||||
tar -zxvf sc-4.3.16-linux.tar.gz |
||||
./sc-4.3.16-linux/bin/sc -u $SAUCECONNECT_USERNAME -k $SAUCECONNECT_ACCESSKEY -i $SAUCECONNECT_JOBIDENTIFIER --readyfile $SAUCECONNECT_READYFILE & |
||||
while [ ! -f $SAUCECONNECT_READYFILE ]; do |
||||
sleep .5 |
||||
done |
||||
|
||||
npm run nightwatch_remote_firefox |
||||
npm run nightwatch_remote_chrome |
||||
npm run nightwatch_remote_safari |
||||
npm run nightwatch_remote_ie |
||||
|
||||
if [ $? -eq 1 ] |
||||
then |
||||
TEST_EXITCODE=1 |
||||
fi |
||||
|
||||
node ci/sauceDisconnect.js $SAUCECONNECT_USERNAME $SAUCECONNECT_ACCESSKEY $SAUCECONNECT_JOBIDENTIFIER |
||||
|
||||
if [ $TEST_EXITCODE -eq 1 ] |
||||
then |
||||
exit 1 |
||||
fi |
@ -0,0 +1,72 @@ |
||||
const https = require('https') |
||||
|
||||
var userName = process.argv[2] |
||||
var accessKey = process.argv[3] |
||||
var tunnelName = process.argv[4] |
||||
|
||||
function removeTunnel () { |
||||
const requestPath = `/rest/v1/${userName}/tunnels` |
||||
console.log(requestPath) |
||||
callSauce(requestPath, 'GET', function (error, result) { |
||||
if (error) { |
||||
console.log(error) |
||||
} else { |
||||
var data = JSON.parse(result) |
||||
for (var k in data) { |
||||
retrieveTunnel(data[k], function (error, result) { |
||||
if (error) { |
||||
console.log(error) |
||||
} else if (result.identtifier === tunnelName) { |
||||
deleteTunnel(result.id, function () { |
||||
console.log('tunnel deleted ' + data[k] + ' ' + tunnelName) |
||||
}) |
||||
} |
||||
}) |
||||
} |
||||
} |
||||
}) |
||||
} |
||||
|
||||
function retrieveTunnel (tunnelid, callback) { |
||||
const requestPath = `/rest/v1/${userName}/tunnels/${tunnelid}` |
||||
callSauce(requestPath, 'GET', function (error, result) { |
||||
if (error) { |
||||
callback(error) |
||||
} else { |
||||
callback(null, {'identtifier': JSON.parse(result).tunnel_identifier, 'id': tunnelid}) |
||||
} |
||||
}) |
||||
} |
||||
|
||||
function deleteTunnel (tunnelid, callback) { |
||||
const requestPath = `/rest/v1/${userName}/tunnels/${tunnelid}` |
||||
callSauce(requestPath, 'DELETE', callback) |
||||
} |
||||
|
||||
function callSauce (requestPath, type, callback) { |
||||
function responseCallback (res) { |
||||
res.setEncoding('utf8') |
||||
console.log('Response: ', res.statusCode, JSON.stringify(res.headers)) |
||||
res.on('data', function onData (chunk) { |
||||
console.log('BODY: ' + chunk) |
||||
callback(null, chunk) |
||||
}) |
||||
res.on('end', function onEnd () {}) |
||||
} |
||||
|
||||
var req = https.request({ |
||||
hostname: 'saucelabs.com', |
||||
path: requestPath, |
||||
method: type, |
||||
auth: userName + ':' + accessKey |
||||
}, responseCallback) |
||||
|
||||
req.on('error', function onError (e) { |
||||
console.log('problem with request: ' + e.message) |
||||
callback(e.message) |
||||
}) |
||||
req.write('') |
||||
req.end() |
||||
} |
||||
|
||||
removeTunnel() |
@ -0,0 +1,97 @@ |
||||
'use strict' |
||||
var TRAVIS_JOB_NUMBER = process.env.TRAVIS_JOB_NUMBER |
||||
|
||||
module.exports = { |
||||
'src_folders': ['./test-browser'], |
||||
'output_folder': './test-browser/reports', |
||||
'custom_commands_path': '', |
||||
'custom_assertions_path': '', |
||||
'globals_path': '', |
||||
'page_objects_path': '', |
||||
|
||||
'selenium': { |
||||
'start_process': false, |
||||
'server_path': '', |
||||
'log_path': '', |
||||
'host': '127.0.0.1', |
||||
'port': 4444, |
||||
'cli_args': { |
||||
'webdriver.chrome.driver': '', |
||||
'webdriver.ie.driver': '', |
||||
'webdriver.firefox.profile': '' |
||||
} |
||||
}, |
||||
|
||||
'test_settings': { |
||||
'default': { |
||||
'launch_url': 'http://ondemand.saucelabs.com:80', |
||||
'selenium_host': 'ondemand.saucelabs.com', |
||||
'selenium_port': 80, |
||||
'silent': true, |
||||
'username': 'yann300', |
||||
'access_key': 'e6f430f2-daa0-48bb-90fd-8bee20f429eb', |
||||
'use_ssl': false, |
||||
'globals': { |
||||
'waitForConditionTimeout': 10000, |
||||
'asyncHookTimeout': 100000 |
||||
}, |
||||
'screenshots': { |
||||
'enabled': false, |
||||
'path': '' |
||||
}, |
||||
'desiredCapabilities': { |
||||
'browserName': 'firefox', |
||||
'javascriptEnabled': true, |
||||
'acceptSslCerts': true, |
||||
'build': 'build-' + TRAVIS_JOB_NUMBER, |
||||
'tunnel-identifier': 'remix_tests_' + TRAVIS_JOB_NUMBER |
||||
} |
||||
}, |
||||
|
||||
'chrome': { |
||||
'desiredCapabilities': { |
||||
'browserName': 'chrome', |
||||
'javascriptEnabled': true, |
||||
'acceptSslCerts': true, |
||||
'build': 'build-' + TRAVIS_JOB_NUMBER, |
||||
'tunnel-identifier': 'remix_tests_' + TRAVIS_JOB_NUMBER |
||||
} |
||||
}, |
||||
|
||||
'safari': { |
||||
'desiredCapabilities': { |
||||
'browserName': 'safari', |
||||
'javascriptEnabled': true, |
||||
'acceptSslCerts': true, |
||||
'build': 'build-' + TRAVIS_JOB_NUMBER, |
||||
'tunnel-identifier': 'remix_tests_' + TRAVIS_JOB_NUMBER |
||||
} |
||||
}, |
||||
|
||||
'ie': { |
||||
'desiredCapabilities': { |
||||
'browserName': 'internet explorer', |
||||
'javascriptEnabled': true, |
||||
'acceptSslCerts': true, |
||||
'build': 'build-' + TRAVIS_JOB_NUMBER, |
||||
'tunnel-identifier': 'remix_tests_' + TRAVIS_JOB_NUMBER |
||||
} |
||||
}, |
||||
|
||||
'local': { |
||||
'launch_url': 'http://localhost', |
||||
'selenium_host': '127.0.0.1', |
||||
'selenium_port': 4444, |
||||
'silent': true, |
||||
'screenshots': { |
||||
'enabled': false, |
||||
'path': '' |
||||
}, |
||||
'desiredCapabilities': { |
||||
'browserName': 'firefox', |
||||
'javascriptEnabled': true, |
||||
'acceptSslCerts': true |
||||
} |
||||
} |
||||
} |
||||
} |
@ -1,9 +1,8 @@ |
||||
'use strict' |
||||
var Debugger = require('./Ethdebugger') |
||||
|
||||
function init () { |
||||
var ethdebugger = new Debugger() |
||||
document.getElementById('app').appendChild(ethdebugger.render()) |
||||
var container = document.getElementById('app') |
||||
container.vmdebugger = new Debugger() |
||||
container.appendChild(container.vmdebugger.render()) |
||||
} |
||||
|
||||
init() |
||||
|
@ -1,7 +0,0 @@ |
||||
module.exports = { |
||||
'Page Load': function (browser) { |
||||
browser |
||||
.url('http://127.0.0.1:8080') |
||||
.end() |
||||
} |
||||
} |
@ -0,0 +1,195 @@ |
||||
var init = require('../test/init') |
||||
module.exports = function (browser, callback) { |
||||
extendBrowser(browser) |
||||
browser |
||||
.url('http://127.0.0.1:8080') |
||||
.waitForElementPresent('#app div', 1000) |
||||
injectScript('./test/resources/testWeb3.json', browser, function () { |
||||
callback() |
||||
}) |
||||
} |
||||
|
||||
function injectScript (file, browser, callback) { |
||||
init.readFile(file, function (error, result) { |
||||
if (!error) { |
||||
browser.execute(function (data) { |
||||
var vmdebugger = document.getElementById('app').vmdebugger |
||||
data = JSON.parse(data) |
||||
vmdebugger.web3.eth.getCode = function (address, callback) { |
||||
if (callback) { |
||||
callback(null, data.testCodes[address]) |
||||
} else { |
||||
return data.testCodes[address] |
||||
} |
||||
} |
||||
|
||||
vmdebugger.web3.debug.traceTransaction = function (txHash, options, callback) { |
||||
callback(null, data.testTraces[txHash]) |
||||
} |
||||
|
||||
vmdebugger.web3.debug.storageAt = function (blockNumber, txIndex, address, callback) { |
||||
callback(null, {}) |
||||
} |
||||
|
||||
vmdebugger.web3.eth.getTransaction = function (txHash, callback) { |
||||
if (callback) { |
||||
callback(null, data.testTxs[txHash]) |
||||
} else { |
||||
return data.testTxs[txHash] |
||||
} |
||||
} |
||||
|
||||
vmdebugger.web3.eth.getTransactionFromBlock = function (blockNumber, txIndex, callback) { |
||||
if (callback) { |
||||
callback(null, data.testTxsByBlock[blockNumber + '-' + txIndex]) |
||||
} else { |
||||
return data.testTxsByBlock[blockNumber + '-' + txIndex] |
||||
} |
||||
} |
||||
|
||||
vmdebugger.web3.eth.getBlockNumber = function (callback) { callback(null, 'web3 modified for testing purposes :)') } |
||||
|
||||
vmdebugger.web3.currentProvider = {host: 'web3 modified for testing purposes :)'} |
||||
}, [result], function () { |
||||
callback() |
||||
}) |
||||
} |
||||
}) |
||||
} |
||||
|
||||
function extendBrowser (browser) { |
||||
browser.assertCurrentSelectedItem = function (expected) { |
||||
browser.getValue('#asmitems', function (result) { |
||||
browser.expect.element('#asmitems option[value="' + result.value + '"]').text.to.equal(expected) |
||||
}) |
||||
return browser |
||||
} |
||||
|
||||
browser.assertSticker = function (vmtracestepinfo, stepinfo, addmemoryinfo, gasinfo, remaininggasinfo, loadedaddressinfo) { |
||||
browser.expect.element('#vmtracestepinfo').text.to.equal(vmtracestepinfo) |
||||
browser.expect.element('#stepinfo').text.to.equal(stepinfo) |
||||
browser.expect.element('#addmemoryinfo').text.to.equal(addmemoryinfo) |
||||
browser.expect.element('#gasinfo').text.to.equal(gasinfo) |
||||
browser.expect.element('#remaininggasinfo').text.to.equal(remaininggasinfo) |
||||
browser.expect.element('#loadedaddressinfo').text.to.equal(loadedaddressinfo) |
||||
return browser |
||||
} |
||||
|
||||
browser.assertStack = function (value) { |
||||
return assertPanel('#stackpanel', browser, value) |
||||
} |
||||
|
||||
browser.assertStorageChanges = function (value) { |
||||
return assertPanel('#storagepanel', browser, value) |
||||
} |
||||
|
||||
browser.assertMemory = function (value) { |
||||
return assertPanel('#memorypanel', browser, value) |
||||
} |
||||
|
||||
browser.assertCallData = function (value) { |
||||
return assertPanel('#calldatapanel', browser, value) |
||||
} |
||||
|
||||
browser.assertCallStack = function (value) { |
||||
return assertPanel('#callstackpanel', browser, value) |
||||
} |
||||
|
||||
browser.assertStackValue = function (index, value) { |
||||
return assertPanelValue('#stackpanel', browser, index, value) |
||||
} |
||||
|
||||
browser.assertStorageChangesValue = function (index, value) { |
||||
return assertPanelValue('#storagepanel', browser, index, value) |
||||
} |
||||
|
||||
browser.assertMemoryValue = function (index, value) { |
||||
return assertPanelValue('#memorypanel', browser, index, value) |
||||
} |
||||
|
||||
browser.assertCallStackValue = function (index, value) { |
||||
return assertPanelValue('#callstackpanel', browser, index, value) |
||||
} |
||||
|
||||
browser.debugerKeyCode = { |
||||
'Enter': 13, |
||||
'Up': 38, |
||||
'Down': 40, |
||||
'Right': '39', |
||||
'Left': 37, |
||||
'Esc': 27, |
||||
'SpaceBar': 32, |
||||
'Ctrl': 17, |
||||
'Alt': 18, |
||||
'Shift': 16 |
||||
} |
||||
|
||||
/* browser.sendKeys is not working for safari */ |
||||
/* still not working properly |
||||
browser.fireEvent = function (el, key, times, callback) { |
||||
var data = { |
||||
'id': el.substring(1), |
||||
'key': key, |
||||
'times': times |
||||
} |
||||
browser.execute(function (data) { |
||||
data = JSON.parse(data) |
||||
var el = document.getElementById(data.id) |
||||
var eventObj |
||||
console.log(el) |
||||
console.log(data) |
||||
var k = 0 |
||||
if (document.createEventObject) { |
||||
eventObj = document.createEventObject() |
||||
eventObj.keyCode = data.key |
||||
while (k < data.times) { |
||||
console.log('firing brfore createEventObject') |
||||
el.fireEvent('onkeypress', eventObj) |
||||
console.log('firing') |
||||
k++ |
||||
} |
||||
} else if (typeof (KeyboardEvent) === 'function') { |
||||
eventObj = new KeyboardEvent('keyup') |
||||
eventObj.key = data.key |
||||
eventObj.which = data.key |
||||
while (k < data.times) { |
||||
console.log('firing brfore createEvent') |
||||
el.dispatchEvent(eventObj) |
||||
console.log('firing') |
||||
k++ |
||||
} |
||||
} |
||||
}, [JSON.stringify(data)], function () { |
||||
callback() |
||||
}) |
||||
} |
||||
*/ |
||||
} |
||||
|
||||
function assertPanel (id, browser, value) { |
||||
browser.expect.element(id + 'basicpanel').text.to.equal(value) |
||||
return browser |
||||
} |
||||
|
||||
function assertPanelValue (id, browser, index, value) { |
||||
getInnerText(id + 'basicpanel', browser, function (result) { |
||||
var values |
||||
if (result.value.indexOf('\r\n') !== -1) { |
||||
values = result.value.split('\r\n') |
||||
} else if (result.value.indexOf('\n') !== -1) { |
||||
values = result.value.split('\n') |
||||
} else if (result.value.indexOf('\r') !== -1) { |
||||
values = result.value.split('\r') |
||||
} |
||||
browser.assert.equal(values[index], value) |
||||
}) |
||||
return browser |
||||
} |
||||
|
||||
function getInnerText (id, browser, callback) { |
||||
browser.execute(function (data) { |
||||
return document.getElementById(data).innerText |
||||
}, [id.substring(1)], function (result) { |
||||
callback(result) |
||||
}) |
||||
} |
@ -0,0 +1,61 @@ |
||||
const https = require('https') |
||||
|
||||
module.exports = function sauce (callback) { |
||||
const currentTest = this.client.currentTest |
||||
const username = this.client.options.username |
||||
const sessionId = this.client.capabilities['webdriver.remote.sessionid'] |
||||
const accessKey = this.client.options.accessKey |
||||
|
||||
if (!this.client.launch_url.match(/saucelabs/)) { |
||||
console.log('Not saucelabs ...') |
||||
return callback() |
||||
} |
||||
|
||||
if (!username || !accessKey || !sessionId) { |
||||
console.log(this.client) |
||||
console.log('No username, accessKey or sessionId') |
||||
return callback() |
||||
} |
||||
|
||||
const passed = currentTest.results.passed === currentTest.results.tests |
||||
|
||||
const data = JSON.stringify({passed}) |
||||
|
||||
const requestPath = `/rest/v1/${username}/jobs/${sessionId}` |
||||
|
||||
function responseCallback (res) { |
||||
res.setEncoding('utf8') |
||||
console.log('Response: ', res.statusCode, JSON.stringify(res.headers)) |
||||
res.on('data', function onData (chunk) { |
||||
console.log('BODY: ' + chunk) |
||||
}) |
||||
res.on('end', function onEnd () { |
||||
console.info('Finished updating saucelabs') |
||||
callback() |
||||
}) |
||||
} |
||||
|
||||
try { |
||||
console.log('Updating saucelabs', requestPath) |
||||
|
||||
const req = https.request({ |
||||
hostname: 'saucelabs.com', |
||||
path: requestPath, |
||||
method: 'PUT', |
||||
auth: `${username}:${accessKey}`, |
||||
headers: { |
||||
'Content-Type': 'application/json', |
||||
'Content-Length': data.length |
||||
} |
||||
}, responseCallback) |
||||
|
||||
req.on('error', function onError (e) { |
||||
console.log('problem with request: ' + e.message) |
||||
}) |
||||
req.write(data) |
||||
req.end() |
||||
} catch (error) { |
||||
console.log('Error', error) |
||||
callback() |
||||
} |
||||
} |
@ -0,0 +1,173 @@ |
||||
'use strict' |
||||
var init = require('./init') |
||||
var sauce = require('./sauce') |
||||
|
||||
module.exports = { |
||||
beforeEach: function (browser, done) { |
||||
try { |
||||
init(browser, done) |
||||
} catch (e) { |
||||
var mes = 'error ' + e.message |
||||
console.log(mes) |
||||
done(mes) |
||||
} |
||||
}, |
||||
|
||||
'vmdebugger': function (browser) { |
||||
loadTrace(browser) |
||||
browser.click('#unload') |
||||
loadTraceNotFound(browser) |
||||
browser.click('#unload') |
||||
panels(browser) |
||||
browser.click('#unload') |
||||
slider(browser) |
||||
browser.click('#unload') |
||||
stepping(browser) |
||||
browser.click('#unload') |
||||
sticker(browser) |
||||
browser.end() |
||||
}, |
||||
|
||||
tearDown: sauce |
||||
} |
||||
|
||||
function loadTrace (browser) { |
||||
browser |
||||
.clearValue('#txinput') |
||||
.setValue('#txinput', '0x20ef65b8b186ca942zcccd634f37074dde49b541c27994fc7596740ef44cfd51') |
||||
.click('#load') |
||||
.assert.containsText('#txhash', '<not found>') |
||||
return browser |
||||
} |
||||
|
||||
function loadTraceNotFound (browser) { |
||||
browser |
||||
.clearValue('#txinput') |
||||
.setValue('#txinput', '0x20ef65b8b186ca942fcccd634f37074dde49b541c27994fc7596740ef44cfd51') |
||||
.click('#load') |
||||
.waitForElementVisible('#vmdebugger', 1000) |
||||
.expect.element('#txhash').text.to.equal('0x20ef65b8b186ca942fcccd634f37074dde49b541c27994fc7596740ef44cfd51') |
||||
browser.expect.element('#txfrom').text.to.equal('0x00101c5bfa3fc8bad02c9f5fd65b069306251915') |
||||
browser.expect.element('#txto').text.to.equal('0x0d3a18d64dfe4f927832ab58d6451cecc4e517c5') |
||||
browser.expect.element('#txto').text.to.equal('0x0d3a18d64dfe4f927832ab58d6451cecc4e517c5') |
||||
browser.click('#unload') |
||||
.waitForElementNotVisible('#vmdebugger', 1000) |
||||
return browser |
||||
} |
||||
|
||||
function panels (browser) { |
||||
browser |
||||
.clearValue('#txinput') |
||||
.setValue('#txinput', '0x20ef65b8b186ca942fcccd634f37074dde49b541c27994fc7596740ef44cfd51') |
||||
.click('#load') |
||||
.waitForElementVisible('#vmdebugger', 1000) |
||||
.click('#nextcall') |
||||
.assertStack('0x\n0x60\n0x65\n0x38\n0x55\n0x60fe47b1') |
||||
.assertStorageChanges('0x00 0x38') |
||||
.assertCallData('0x60fe47b10000000000000000000000000000000000000000000000000000000000000038') |
||||
.assertCallStack('0x0d3a18d64dfe4f927832ab58d6451cecc4e517c5') |
||||
.assertStackValue(1, '0x60') |
||||
.assertMemoryValue(6, '0xc0 60 60 60 40 52 60 40 51 60 20 80 60 45 83 39 81 ????R??Q????E?9?') |
||||
.assertMemoryValue(7, '0xe0 01 60 40 52 80 80 51 90 60 20 01 90 91 90 50 50 ???R??Q???????PP') |
||||
.assertMemoryValue(8, '0x100 5b 80 60 01 01 60 00 60 00 50 81 90 55 50 5b 50 ?????????P??UP?P') |
||||
.click('#intoforward') // CREATE
|
||||
.assertStack('') |
||||
.assertStorageChanges('') |
||||
.assertMemory('') |
||||
.assertCallData('0x0000000000000000000000000000000000000000000000000000000000000000000000000000006060606040526040516020806045833981016040528080519060200190919050505b806001016000600050819055') |
||||
.assertCallStack('0x0d3a18d64dfe4f927832ab58d6451cecc4e517c5\n(Contract Creation - Step 63)') |
||||
return browser |
||||
} |
||||
|
||||
function slider (browser) { |
||||
browser |
||||
.clearValue('#txinput') |
||||
.setValue('#txinput', '0x20ef65b8b186ca942fcccd634f37074dde49b541c27994fc7596740ef44cfd51') |
||||
.click('#load') |
||||
.waitForElementVisible('#vmdebugger', 1000) |
||||
.click('#intoforward') |
||||
.click('#intoforward') |
||||
.click('#intoforward') |
||||
.click('#intoforward') |
||||
.click('#intoforward') |
||||
.click('#intoforward') |
||||
.click('#intoforward') |
||||
.click('#intoforward') |
||||
.click('#intoforward') |
||||
/* |
||||
.sendKeys('#slider', browser.Keys.RIGHT_ARROW) |
||||
.sendKeys('#slider', browser.Keys.RIGHT_ARROW) |
||||
.sendKeys('#slider', browser.Keys.RIGHT_ARROW) |
||||
.sendKeys('#slider', browser.Keys.RIGHT_ARROW) |
||||
.sendKeys('#slider', browser.Keys.RIGHT_ARROW) |
||||
.sendKeys('#slider', browser.Keys.RIGHT_ARROW) |
||||
.sendKeys('#slider', browser.Keys.RIGHT_ARROW) |
||||
.sendKeys('#slider', browser.Keys.RIGHT_ARROW) |
||||
.sendKeys('#slider', browser.Keys.LEFT_ARROW) |
||||
*/ |
||||
.assertCurrentSelectedItem('041 PUSH 60fe47b1') |
||||
return browser |
||||
} |
||||
|
||||
function stepping (browser) { |
||||
browser |
||||
.clearValue('#txinput') |
||||
.setValue('#txinput', '0x20ef65b8b186ca942fcccd634f37074dde49b541c27994fc7596740ef44cfd51') |
||||
.click('#load') |
||||
.waitForElementVisible('#vmdebugger', 1000) |
||||
.click('#intoforward') |
||||
.click('#intoforward') |
||||
.assertCurrentSelectedItem('004 MSTORE') |
||||
.click('#intoforward') |
||||
.click('#intoback') |
||||
.click('#intoback') |
||||
.assertCurrentSelectedItem('002 PUSH 40') |
||||
.click('#nextcall') |
||||
.assertCurrentSelectedItem('181 CREATE') |
||||
.click('#intoforward') |
||||
.click('#intoforward') |
||||
.click('#intoforward') |
||||
.click('#intoforward') |
||||
.click('#overforward') |
||||
.assertCurrentSelectedItem('058 RETURN') |
||||
.click('#intoforward') |
||||
.click('#overback') |
||||
.assertCurrentSelectedItem('181 CREATE') |
||||
return browser |
||||
} |
||||
|
||||
function sticker (browser) { |
||||
browser |
||||
.clearValue('#txinput') |
||||
.setValue('#txinput', '0x20ef65b8b186ca942fcccd634f37074dde49b541c27994fc7596740ef44cfd51') |
||||
.click('#load') |
||||
.waitForElementVisible('#vmdebugger', 1000) |
||||
.click('#intoforward') |
||||
.click('#intoforward') |
||||
.click('#intoforward') |
||||
.click('#intoforward') |
||||
.click('#intoforward') |
||||
.click('#intoforward') |
||||
/* |
||||
.fireEvent('#slider', browser.debugerKeyCode.Right, 4, function () { |
||||
browser.assertSticker('6', '6', '', '3', '84476', '0x0d3a18d64dfe4f927832ab58d6451cecc4e517c5') |
||||
.click('#nextcall') |
||||
.assertSticker('63', '63', '', '32000', '79283', '0x0d3a18d64dfe4f927832ab58d6451cecc4e517c5') |
||||
.click('#intoforward') |
||||
.click('#overforward') |
||||
.assertSticker('108', '44', '', '0', '27145', '(Contract Creation - Step 63)') |
||||
.click('#intoforward') |
||||
.assertSticker('109', '64', '', '3', '25145', '0x0d3a18d64dfe4f927832ab58d6451cecc4e517c5') |
||||
.end() |
||||
}) |
||||
*/ |
||||
.assertSticker('6', '6', '', '3', '84476', '0x0d3a18d64dfe4f927832ab58d6451cecc4e517c5') |
||||
.click('#nextcall') |
||||
.assertSticker('63', '63', '', '32000', '79283', '0x0d3a18d64dfe4f927832ab58d6451cecc4e517c5') |
||||
.click('#intoforward') |
||||
.click('#overforward') |
||||
.assertSticker('108', '44', '', '0', '27145', '(Contract Creation - Step 63)') |
||||
.click('#intoforward') |
||||
.assertSticker('109', '64', '', '3', '25145', '0x0d3a18d64dfe4f927832ab58d6451cecc4e517c5') |
||||
return browser |
||||
} |
@ -1,38 +0,0 @@ |
||||
'use strict' |
||||
var traceHelper = require('../src/helpers/traceHelper') |
||||
var traceInvokation = require('./resources/contractInvokationTrace') |
||||
|
||||
function TestTraceRetriever () { |
||||
this.storages = {} // contains all intial storage (by addresses)
|
||||
} |
||||
|
||||
TestTraceRetriever.prototype.getTrace = function (txHash, callback) { |
||||
console.log(traceInvokation) |
||||
callback(null, traceInvokation) |
||||
} |
||||
|
||||
/* not used */ |
||||
TestTraceRetriever.prototype.getStorage = function (tx, address, callback) { |
||||
if (traceHelper.isContractCreation(address)) { |
||||
callback(null, {}) |
||||
} else if (this.storages[address]) { |
||||
callback(null, this.storages[address]) |
||||
} else { |
||||
/* |
||||
return storage |
||||
*/ |
||||
/* |
||||
var self = this |
||||
this.web3.debug.storageAt(tx.blockNumber.toString(), tx.transactionIndex, address, function (error, result) { |
||||
self.storages[address] = result |
||||
callback(error, result) |
||||
}) |
||||
*/ |
||||
} |
||||
} |
||||
|
||||
TestTraceRetriever.prototype.debugStorageAtAvailable = function () { |
||||
return false // test scenario does not require web3.
|
||||
} |
||||
|
||||
module.exports = TestTraceRetriever |
@ -0,0 +1,31 @@ |
||||
var init = { |
||||
overrideWeb3: function (web3, web3Override) { |
||||
web3.eth.getCode = web3Override.getCode |
||||
web3.debug.traceTransaction = web3Override.traceTransaction |
||||
web3.debug.storageAt = web3Override.storageAt |
||||
web3.eth.getTransaction = web3Override.getTransaction |
||||
web3.eth.getTransactionFromBlock = web3Override.getTransactionFromBlock |
||||
web3.eth.getBlockNumber = web3Override.getBlockNumber |
||||
}, |
||||
|
||||
readFile: function (filename, callback) { |
||||
var fs = require('fs') |
||||
try { |
||||
console.log('reading ' + filename) |
||||
if (callback) { |
||||
fs.readFile(filename, 'utf8', callback) |
||||
} else { |
||||
return fs.readFileSync(filename, 'utf8') |
||||
} |
||||
} catch (e) { |
||||
console.log(e) |
||||
if (callback) { |
||||
callback(e) |
||||
} else { |
||||
return e |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
module.exports = init |
@ -1 +0,0 @@ |
||||
module.exports = '0x60606040526000357c01000000000000000000000000000000000000000000000000000000009004806360fe47b11460415780636d4ce63c14605757603f565b005b605560048080359060200190919050506089565b005b606260048050506078565b6040518082815260200191505060405180910390f35b600060006000505490506086565b90565b80600060005081905550602d6040516045806100f083390180828152602001915050604051809103906000f0600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff02191690830217905550602281016000600050819055505b505660606040526040516020806045833981016040528080519060200190919050505b806001016000600050819055505b50600a80603b6000396000f360606040526008565b00' |
File diff suppressed because one or more lines are too long
@ -1,2 +0,0 @@ |
||||
module.exports = |
||||
{'blockHash':'0xd1d34932f8733e0485b7d9bf8500c4046d650f20ed7792508c304304fa7bbfac','blockNumber':89,'from':'0x00101c5bfa3fc8bad02c9f5fd65b069306251915','gas':105967,'gasPrice':'20000000000','hash':'0x20ef65b8b186ca942fcccd634f37074dde49b541c27994fc7596740ef44cfd51','input':'0x60fe47b10000000000000000000000000000000000000000000000000000000000000038','nonce':3,'to':'0x0d3a18d64dfe4f927832ab58d6451cecc4e517c5','transactionIndex':0,'value':'0'} |
@ -0,0 +1,43 @@ |
||||
'use strict' |
||||
var init = require('../init') |
||||
var web3Override = {} |
||||
var data = init.readFile(require('path').resolve(__dirname, 'testWeb3.json')) |
||||
var data = JSON.parse(data) |
||||
|
||||
web3Override.getCode = function (address, callback) { |
||||
if (callback) { |
||||
callback(null, data.testCodes[address]) |
||||
} else { |
||||
return data.testCodes[address] |
||||
} |
||||
} |
||||
|
||||
web3Override.traceTransaction = function (txHash, options, callback) { |
||||
callback(null, data.testTraces[txHash]) |
||||
} |
||||
|
||||
web3Override.storageAt = function (blockNumber, txIndex, address, callback) { |
||||
callback(null, {}) |
||||
} |
||||
|
||||
web3Override.getTransaction = function (txHash, callback) { |
||||
if (callback) { |
||||
callback(null, data.testTxs[txHash]) |
||||
} else { |
||||
return data.testTxs[txHash] |
||||
} |
||||
} |
||||
|
||||
web3Override.getTransactionFromBlock = function (blockNumber, txIndex, callback) { |
||||
if (callback) { |
||||
callback(null, data.testTxsByBlock[blockNumber + '-' + txIndex]) |
||||
} else { |
||||
return data.testTxsByBlock[blockNumber + '-' + txIndex] |
||||
} |
||||
} |
||||
|
||||
web3Override.getBlockNumber = function (callback) { callback('web3 modified testing purposes :)') } |
||||
|
||||
if (typeof (module) !== 'undefined' && typeof (module.exports) !== 'undefined') { |
||||
module.exports = web3Override |
||||
} |
File diff suppressed because one or more lines are too long
Loading…
Reference in new issue