github.com/nspcc-dev/neo-go@v0.105.2-0.20240517133400-6be757af3eba/pkg/smartcontract/manifest/parameter_test.go (about) 1 package manifest 2 3 import ( 4 "math/big" 5 "testing" 6 7 "github.com/nspcc-dev/neo-go/pkg/smartcontract" 8 "github.com/nspcc-dev/neo-go/pkg/vm/stackitem" 9 "github.com/stretchr/testify/require" 10 ) 11 12 func TestParametersAreValid(t *testing.T) { 13 ps := Parameters{} 14 require.NoError(t, ps.AreValid()) // No parameters. 15 16 ps = append(ps, Parameter{}) 17 require.Error(t, ps.AreValid()) 18 19 ps[0].Name = "qwerty" 20 require.NoError(t, ps.AreValid()) 21 22 ps[0].Type = 0x42 // Invalid type. 23 require.Error(t, ps.AreValid()) 24 25 ps[0].Type = smartcontract.VoidType 26 require.Error(t, ps.AreValid()) 27 28 ps[0].Type = smartcontract.BoolType 29 require.NoError(t, ps.AreValid()) 30 31 ps = append(ps, Parameter{Name: "qwerty"}) 32 require.Error(t, ps.AreValid()) 33 } 34 35 func TestParameter_ToStackItemFromStackItem(t *testing.T) { 36 p := &Parameter{ 37 Name: "param", 38 Type: smartcontract.StringType, 39 } 40 expected := stackitem.NewStruct([]stackitem.Item{ 41 stackitem.NewByteArray([]byte(p.Name)), 42 stackitem.NewBigInteger(big.NewInt(int64(p.Type))), 43 }) 44 CheckToFromStackItem(t, p, expected) 45 } 46 47 func TestParameter_FromStackItemErrors(t *testing.T) { 48 errCases := map[string]stackitem.Item{ 49 "not a struct": stackitem.NewArray([]stackitem.Item{}), 50 "invalid length": stackitem.NewStruct([]stackitem.Item{}), 51 "invalid name type": stackitem.NewStruct([]stackitem.Item{stackitem.NewInterop(nil), stackitem.Null{}}), 52 "invalid type type": stackitem.NewStruct([]stackitem.Item{stackitem.NewByteArray([]byte{}), stackitem.Null{}}), 53 "invalid type value": stackitem.NewStruct([]stackitem.Item{stackitem.NewByteArray([]byte{}), stackitem.NewBigInteger(big.NewInt(-100500))}), 54 } 55 for name, errCase := range errCases { 56 t.Run(name, func(t *testing.T) { 57 p := new(Parameter) 58 require.Error(t, p.FromStackItem(errCase)) 59 }) 60 } 61 }