'use strict' var tape = require('tape') var init = require('../src/helpers/init') var TraceManager = require('../src/trace/traceManager') var CodeManager = require('../src/code/codeManager') var web3Test = require('./resources/testWeb3') var initWeb3 = require('./init') tape('CodeManager', function (t) { var codeManager var web3 = init.loadWeb3() initWeb3.overrideWeb3(web3, web3Test) var traceManager = new TraceManager(web3) codeManager = new CodeManager(web3, traceManager) var contractCode = web3.eth.getCode('0x0d3a18d64dfe4f927832ab58d6451cecc4e517c5') codeManager.codeResolver.cacheExecutingCode('0x0d3a18d64dfe4f927832ab58d6451cecc4e517c5', contractCode) // so a call to web3 is not necessary var tx = web3.eth.getTransaction('0x20ef65b8b186ca942fcccd634f37074dde49b541c27994fc7596740ef44cfd51') traceManager.resolveTrace(tx, function (error, result) { if (error) { t.fail(' - traceManager.resolveTrace - failed ' + result) } else { continueTesting(t, codeManager) } }) }) function continueTesting (t, codeManager) { t.test('CodeManager.init', function (st) { st.end() }) t.test('CodeManager.resolveStep', function (st) { st.plan(6) codeManager.register('indexChanged', this, function (index) { if (index === undefined || index === null) { st.fail(index) } else { st.ok(index === 6 || index === 0) } }) codeManager.register('codeChanged', this, function (code, address, index) { console.log(address + ' ' + index + ' ' + code) if (!code) { st.fail('no codes') } else { st.ok(address === '0x0d3a18d64dfe4f927832ab58d6451cecc4e517c5' || address === '(Contract Creation - Step 63)') if (address === '0x0d3a18d64dfe4f927832ab58d6451cecc4e517c5') { console.log(address + ' ' + code[25]) st.ok(code[25].indexOf('DUP') !== -1) } else if (address === '(Contract Creation - Step 63)') { console.log(address + ' ' + code[25]) st.ok(code[25].indexOf('JUMPDEST') !== -1) } } }) var tx = codeManager.web3.eth.getTransaction('0x20ef65b8b186ca942fcccd634f37074dde49b541c27994fc7596740ef44cfd51') codeManager.resolveStep(0, tx) codeManager.resolveStep(70, tx) }) t.test('CodeManager.getInstructionIndex', function (st) { st.plan(2) codeManager.getInstructionIndex('0x0d3a18d64dfe4f927832ab58d6451cecc4e517c5', 16, function (error, result) { console.log(result) if (error) { st.fail(error) } else { st.ok(result === 25) } }) codeManager.getInstructionIndex('(Contract Creation - Step 63)', 70, function (error, result) { console.log(result) if (error) { st.fail(error) } else { st.ok(result === 6) } }) }) }