UNPKG

3.1 kBJavaScriptView Raw
1'use strict'
2var tape = require('tape')
3var remixLib = require('remix-lib')
4var Web3Providers = remixLib.vm.Web3Providers
5var TraceManager = require('../src/trace/traceManager')
6var CodeManager = require('../src/code/codeManager')
7var web3Test = require('./resources/testWeb3')
8var global = remixLib.global
9
10tape('CodeManager', function (t) {
11 var codeManager
12 var web3Providers = new Web3Providers()
13 web3Providers.addProvider('TEST', web3Test)
14 web3Providers.get('TEST', function (error, obj) {
15 if (error) {
16 var mes = 'provider TEST not defined'
17 console.log(mes)
18 t.fail(mes)
19 } else {
20 global.web3 = obj
21 var traceManager = new TraceManager()
22 codeManager = new CodeManager(traceManager)
23 var contractCode = global.web3.eth.getCode('0x0d3a18d64dfe4f927832ab58d6451cecc4e517c5')
24 codeManager.codeResolver.cacheExecutingCode('0x0d3a18d64dfe4f927832ab58d6451cecc4e517c5', contractCode) // so a call to web3 is not necessary
25 var tx = global.web3.eth.getTransaction('0x20ef65b8b186ca942fcccd634f37074dde49b541c27994fc7596740ef44cfd51')
26 traceManager.resolveTrace(tx, function (error, result) {
27 if (error) {
28 t.fail(' - traceManager.resolveTrace - failed ' + result)
29 } else {
30 continueTesting(t, codeManager)
31 }
32 })
33 }
34 })
35})
36
37function continueTesting (t, codeManager) {
38 t.test('CodeManager.init', function (st) {
39 st.end()
40 })
41
42 t.test('CodeManager.resolveStep', function (st) {
43 st.plan(6)
44 codeManager.event.register('changed', this, function (code, address, index) {
45 if (index === undefined || index === null) {
46 st.fail(index)
47 } else {
48 st.ok(index === 6 || index === 0)
49 }
50 })
51
52 codeManager.event.register('changed', this, function (code, address, index) {
53 if (!code) {
54 st.fail('no codes')
55 } else {
56 st.ok(address === '0x0d3a18d64dfe4f927832ab58d6451cecc4e517c5' || address === '(Contract Creation - Step 63)')
57 if (address === '0x0d3a18d64dfe4f927832ab58d6451cecc4e517c5') {
58 console.log(address + ' ' + code[25])
59 st.ok(code[25].indexOf('DUP') !== -1)
60 } else if (address === '(Contract Creation - Step 63)') {
61 console.log(address + ' ' + code[25])
62 st.ok(code[25].indexOf('JUMPDEST') !== -1)
63 }
64 }
65 })
66 var tx = global.web3.eth.getTransaction('0x20ef65b8b186ca942fcccd634f37074dde49b541c27994fc7596740ef44cfd51')
67 codeManager.resolveStep(0, tx)
68 codeManager.resolveStep(70, tx)
69 })
70
71 t.test('CodeManager.getInstructionIndex', function (st) {
72 st.plan(2)
73 codeManager.getInstructionIndex('0x0d3a18d64dfe4f927832ab58d6451cecc4e517c5', 16, function (error, result) {
74 console.log(result)
75 if (error) {
76 st.fail(error)
77 } else {
78 st.ok(result === 25)
79 }
80 })
81
82 codeManager.getInstructionIndex('(Contract Creation - Step 63)', 70, function (error, result) {
83 console.log(result)
84 if (error) {
85 st.fail(error)
86 } else {
87 st.ok(result === 6)
88 }
89 })
90 })
91}