stackitem: introduce Convertible interface
We have a lot of native contract types that are converted to stack items before serialization, then deserialized as stack items and converted back to regular structures. stackitem.Convertible allows to remove a lot of repetitive io.Serializable code. This also introduces to/from converter in testserdes which unfortunately required to change util tests to avoid circular references.
This commit is contained in:
parent
2d993d0da5
commit
aab18c3083
23 changed files with 223 additions and 339 deletions
|
@ -11,49 +11,44 @@ import (
|
|||
|
||||
func TestEncodeDecodeDeposit(t *testing.T) {
|
||||
d := &Deposit{Amount: big.NewInt(100500), Till: 888}
|
||||
|
||||
depo := new(Deposit)
|
||||
testserdes.EncodeDecodeBinary(t, d, depo)
|
||||
item := stackitem.Make(42)
|
||||
data, err := stackitem.Serialize(item)
|
||||
require.NoError(t, err)
|
||||
require.Error(t, testserdes.DecodeBinary(data, depo))
|
||||
testserdes.ToFromStackItem(t, d, depo)
|
||||
}
|
||||
|
||||
func TestDepositFromStackItem(t *testing.T) {
|
||||
var d Deposit
|
||||
|
||||
item := stackitem.Make(42)
|
||||
require.Error(t, d.fromStackItem(item))
|
||||
require.Error(t, d.FromStackItem(item))
|
||||
|
||||
item = stackitem.NewStruct(nil)
|
||||
require.Error(t, d.fromStackItem(item))
|
||||
require.Error(t, d.FromStackItem(item))
|
||||
|
||||
item = stackitem.NewStruct([]stackitem.Item{
|
||||
stackitem.NewStruct(nil),
|
||||
stackitem.NewStruct(nil),
|
||||
})
|
||||
require.Error(t, d.fromStackItem(item))
|
||||
require.Error(t, d.FromStackItem(item))
|
||||
|
||||
item = stackitem.NewStruct([]stackitem.Item{
|
||||
stackitem.Make(777),
|
||||
stackitem.NewStruct(nil),
|
||||
})
|
||||
require.Error(t, d.fromStackItem(item))
|
||||
require.Error(t, d.FromStackItem(item))
|
||||
|
||||
item = stackitem.NewStruct([]stackitem.Item{
|
||||
stackitem.Make(777),
|
||||
stackitem.Make(-1),
|
||||
})
|
||||
require.Error(t, d.fromStackItem(item))
|
||||
require.Error(t, d.FromStackItem(item))
|
||||
item = stackitem.NewStruct([]stackitem.Item{
|
||||
stackitem.Make(777),
|
||||
stackitem.Make("somenonu64value"),
|
||||
})
|
||||
require.Error(t, d.fromStackItem(item))
|
||||
require.Error(t, d.FromStackItem(item))
|
||||
item = stackitem.NewStruct([]stackitem.Item{
|
||||
stackitem.Make(777),
|
||||
stackitem.Make(888),
|
||||
})
|
||||
require.NoError(t, d.fromStackItem(item))
|
||||
require.NoError(t, d.FromStackItem(item))
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue