github.com/nspcc-dev/neo-go@v0.105.2-0.20240517133400-6be757af3eba/pkg/smartcontract/manifest/event_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 TestEventIsValid(t *testing.T) { 13 e := Event{} 14 require.Error(t, e.IsValid()) 15 16 e.Name = "some" 17 require.NoError(t, e.IsValid()) 18 19 e.Parameters = make([]Parameter, 0) 20 require.NoError(t, e.IsValid()) 21 22 e.Parameters = append(e.Parameters, NewParameter("p1", smartcontract.BoolType)) 23 require.NoError(t, e.IsValid()) 24 25 e.Parameters = append(e.Parameters, NewParameter("p2", smartcontract.IntegerType)) 26 require.NoError(t, e.IsValid()) 27 28 e.Parameters = append(e.Parameters, NewParameter("p3", smartcontract.IntegerType)) 29 require.NoError(t, e.IsValid()) 30 31 e.Parameters = append(e.Parameters, NewParameter("p1", smartcontract.IntegerType)) 32 require.Error(t, e.IsValid()) 33 } 34 35 func TestEvent_ToStackItemFromStackItem(t *testing.T) { 36 m := &Event{ 37 Name: "mur", 38 Parameters: []Parameter{{Name: "p1", Type: smartcontract.BoolType}}, 39 } 40 expected := stackitem.NewStruct([]stackitem.Item{ 41 stackitem.NewByteArray([]byte(m.Name)), 42 stackitem.NewArray([]stackitem.Item{ 43 stackitem.NewStruct([]stackitem.Item{ 44 stackitem.NewByteArray([]byte(m.Parameters[0].Name)), 45 stackitem.NewBigInteger(big.NewInt(int64(m.Parameters[0].Type))), 46 }), 47 }), 48 }) 49 CheckToFromStackItem(t, m, expected) 50 } 51 52 func TestEvent_FromStackItemErrors(t *testing.T) { 53 errCases := map[string]stackitem.Item{ 54 "not a struct": stackitem.NewArray([]stackitem.Item{}), 55 "invalid length": stackitem.NewStruct([]stackitem.Item{}), 56 "invalid name type": stackitem.NewStruct([]stackitem.Item{stackitem.NewInterop(nil), stackitem.Null{}}), 57 "invalid parameters type": stackitem.NewStruct([]stackitem.Item{stackitem.NewByteArray([]byte{}), stackitem.Null{}}), 58 "invalid parameter": stackitem.NewStruct([]stackitem.Item{stackitem.NewByteArray([]byte{}), stackitem.NewArray([]stackitem.Item{stackitem.NewStruct([]stackitem.Item{})})}), 59 } 60 for name, errCase := range errCases { 61 t.Run(name, func(t *testing.T) { 62 p := new(Event) 63 require.Error(t, p.FromStackItem(errCase)) 64 }) 65 } 66 } 67 68 func TestEventCheckCompliance(t *testing.T) { 69 m := &Event{ 70 Name: "mur", 71 Parameters: []Parameter{{Name: "p1", Type: smartcontract.BoolType}}, 72 } 73 require.Error(t, m.CheckCompliance([]stackitem.Item{})) 74 require.Error(t, m.CheckCompliance([]stackitem.Item{stackitem.Make("something")})) 75 require.NoError(t, m.CheckCompliance([]stackitem.Item{stackitem.Make(true)})) 76 }