github.com/nspcc-dev/neo-go@v0.105.2-0.20240517133400-6be757af3eba/pkg/smartcontract/nef/method_token_test.go (about)

     1  package nef
     2  
     3  import (
     4  	"strings"
     5  	"testing"
     6  
     7  	"github.com/nspcc-dev/neo-go/internal/random"
     8  	"github.com/nspcc-dev/neo-go/internal/testserdes"
     9  	"github.com/nspcc-dev/neo-go/pkg/smartcontract/callflag"
    10  	"github.com/stretchr/testify/require"
    11  )
    12  
    13  func TestMethodToken_Serializable(t *testing.T) {
    14  	getToken := func() *MethodToken {
    15  		return &MethodToken{
    16  			Hash:       random.Uint160(),
    17  			Method:     "MethodName",
    18  			ParamCount: 2,
    19  			HasReturn:  true,
    20  			CallFlag:   callflag.ReadStates,
    21  		}
    22  	}
    23  	t.Run("good", func(t *testing.T) {
    24  		testserdes.EncodeDecodeBinary(t, getToken(), new(MethodToken))
    25  	})
    26  	t.Run("too long name", func(t *testing.T) {
    27  		tok := getToken()
    28  		tok.Method = strings.Repeat("s", maxMethodLength+1)
    29  		data, err := testserdes.EncodeBinary(tok)
    30  		require.NoError(t, err)
    31  		require.Error(t, testserdes.DecodeBinary(data, new(MethodToken)))
    32  	})
    33  	t.Run("start with '_'", func(t *testing.T) {
    34  		tok := getToken()
    35  		tok.Method = "_method"
    36  		data, err := testserdes.EncodeBinary(tok)
    37  		require.NoError(t, err)
    38  		err = testserdes.DecodeBinary(data, new(MethodToken))
    39  		require.ErrorIs(t, err, errInvalidMethodName)
    40  	})
    41  	t.Run("invalid call flag", func(t *testing.T) {
    42  		tok := getToken()
    43  		tok.CallFlag = ^callflag.All
    44  		data, err := testserdes.EncodeBinary(tok)
    45  		require.NoError(t, err)
    46  		err = testserdes.DecodeBinary(data, new(MethodToken))
    47  		require.ErrorIs(t, err, errInvalidCallFlag)
    48  	})
    49  }