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  }