2021-02-08 15:00:40 +00:00
|
|
|
package manifest
|
|
|
|
|
|
|
|
import (
|
|
|
|
"math/big"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/nspcc-dev/neo-go/pkg/smartcontract"
|
|
|
|
"github.com/nspcc-dev/neo-go/pkg/vm/stackitem"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
)
|
|
|
|
|
2021-02-08 15:50:40 +00:00
|
|
|
func TestParametersAreValid(t *testing.T) {
|
|
|
|
ps := Parameters{}
|
|
|
|
require.NoError(t, ps.AreValid()) // No parameters.
|
|
|
|
|
|
|
|
ps = append(ps, Parameter{})
|
|
|
|
require.Error(t, ps.AreValid())
|
|
|
|
|
|
|
|
ps[0].Name = "qwerty"
|
|
|
|
require.NoError(t, ps.AreValid())
|
|
|
|
|
|
|
|
ps[0].Type = 0x42 // Invalid type.
|
|
|
|
require.Error(t, ps.AreValid())
|
|
|
|
|
|
|
|
ps[0].Type = smartcontract.VoidType
|
|
|
|
require.Error(t, ps.AreValid())
|
|
|
|
|
|
|
|
ps[0].Type = smartcontract.BoolType
|
|
|
|
require.NoError(t, ps.AreValid())
|
|
|
|
|
|
|
|
ps = append(ps, Parameter{Name: "qwerty"})
|
|
|
|
require.Error(t, ps.AreValid())
|
|
|
|
}
|
|
|
|
|
2021-02-08 15:00:40 +00:00
|
|
|
func TestParameter_ToStackItemFromStackItem(t *testing.T) {
|
|
|
|
p := &Parameter{
|
|
|
|
Name: "param",
|
|
|
|
Type: smartcontract.StringType,
|
|
|
|
}
|
|
|
|
expected := stackitem.NewStruct([]stackitem.Item{
|
|
|
|
stackitem.NewByteArray([]byte(p.Name)),
|
|
|
|
stackitem.NewBigInteger(big.NewInt(int64(p.Type))),
|
|
|
|
})
|
|
|
|
CheckToFromStackItem(t, p, expected)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestParameter_FromStackItemErrors(t *testing.T) {
|
|
|
|
errCases := map[string]stackitem.Item{
|
|
|
|
"not a struct": stackitem.NewArray([]stackitem.Item{}),
|
|
|
|
"invalid length": stackitem.NewStruct([]stackitem.Item{}),
|
|
|
|
"invalid name type": stackitem.NewStruct([]stackitem.Item{stackitem.NewInterop(nil), stackitem.Null{}}),
|
|
|
|
"invalid type type": stackitem.NewStruct([]stackitem.Item{stackitem.NewByteArray([]byte{}), stackitem.Null{}}),
|
|
|
|
"invalid type value": stackitem.NewStruct([]stackitem.Item{stackitem.NewByteArray([]byte{}), stackitem.NewBigInteger(big.NewInt(-100500))}),
|
|
|
|
}
|
|
|
|
for name, errCase := range errCases {
|
|
|
|
t.Run(name, func(t *testing.T) {
|
|
|
|
p := new(Parameter)
|
|
|
|
require.Error(t, p.FromStackItem(errCase))
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|