github.com/nspcc-dev/neo-go@v0.105.2-0.20240517133400-6be757af3eba/pkg/vm/debug_test.go (about) 1 package vm 2 3 import ( 4 "math/big" 5 "testing" 6 7 "github.com/nspcc-dev/neo-go/pkg/smartcontract/callflag" 8 "github.com/nspcc-dev/neo-go/pkg/util" 9 "github.com/nspcc-dev/neo-go/pkg/vm/opcode" 10 "github.com/stretchr/testify/require" 11 ) 12 13 func TestVM_Debug(t *testing.T) { 14 prog := makeProgram(opcode.CALL, 3, opcode.RET, 15 opcode.PUSH2, opcode.PUSH3, opcode.ADD, opcode.RET) 16 t.Run("BreakPoint", func(t *testing.T) { 17 v := load(prog) 18 v.AddBreakPoint(3) 19 v.AddBreakPoint(5) 20 require.NoError(t, v.Run()) 21 require.Equal(t, 3, v.Context().NextIP()) 22 require.NoError(t, v.Run()) 23 require.Equal(t, 5, v.Context().NextIP()) 24 require.NoError(t, v.Run()) 25 require.Equal(t, 1, v.estack.Len()) 26 require.Equal(t, big.NewInt(5), v.estack.Top().Value()) 27 }) 28 t.Run("StepInto", func(t *testing.T) { 29 v := load(prog) 30 require.NoError(t, v.StepInto()) 31 require.Equal(t, 3, v.Context().NextIP()) 32 require.NoError(t, v.StepOut()) 33 require.Equal(t, 2, v.Context().NextIP()) 34 require.Equal(t, 1, v.estack.Len()) 35 require.Equal(t, big.NewInt(5), v.estack.Top().Value()) 36 }) 37 t.Run("StepOver", func(t *testing.T) { 38 v := load(prog) 39 require.NoError(t, v.StepOver()) 40 require.Equal(t, 2, v.Context().NextIP()) 41 require.Equal(t, 1, v.estack.Len()) 42 require.Equal(t, big.NewInt(5), v.estack.Top().Value()) 43 }) 44 } 45 46 func TestContext_BreakPoints(t *testing.T) { 47 prog := makeProgram(opcode.CALL, 3, opcode.RET, 48 opcode.PUSH2, opcode.PUSH3, opcode.ADD, opcode.RET) 49 v := load(prog) 50 v.AddBreakPoint(3) 51 v.AddBreakPoint(5) 52 require.Equal(t, []int{3, 5}, v.Context().BreakPoints()) 53 54 // Preserve the set of breakpoints on Call. 55 v.Call(3) 56 require.Equal(t, []int{3, 5}, v.Context().BreakPoints()) 57 58 // New context -> clean breakpoints. 59 v.loadScriptWithCallingHash(prog, nil, util.Uint160{}, util.Uint160{}, callflag.All, 1, 3, nil) 60 require.Equal(t, []int{}, v.Context().BreakPoints()) 61 }