7 "github.com/stretchr/testify/assert"
8 "github.com/stretchr/testify/require"
9 data "github.com/tendermint/go-wire/data"
20 func (p *PStr) Point() string {
27 func (p *PInt) Point() string {
31 return fmt.Sprintf("int: %d", int(*p))
34 var ptrMapper data.Mapper
36 // we register pointers to those structs, as they fulfill the interface
37 // but mainly so we can test how they handle nil values in the struct
39 ps, pi := PStr(""), PInt(0)
40 ptrMapper = data.NewMapper(KeyS{}).
41 RegisterImplementation(&ps, "str", 5).
42 RegisterImplementation(&pi, "int", 25)
45 // PtrS adds json serialization to Ptr
50 func (p PtrS) MarshalJSON() ([]byte, error) {
51 return ptrMapper.ToJSON(p.Ptr)
54 func (p *PtrS) UnmarshalJSON(data []byte) (err error) {
55 parsed, err := ptrMapper.FromJSON(data)
56 if err == nil && parsed != nil {
62 // TestEncodingNil happens when we have a nil inside the embedding struct
63 func TestEncodingNil(t *testing.T) {
64 assert, require := assert.New(t), require.New(t)
68 ptrs := []Ptr{&s, &i, nil}
70 for i, p := range ptrs {
73 js, err := data.ToJSON(wrap)
74 require.Nil(err, "%d: %+v", i, err)
77 err = data.FromJSON(js, &parsed)
78 require.Nil(err, "%d: %+v", i, err)
80 assert.Equal(parsed.Point(), wrap.Point())
82 assert.Equal(parsed.Ptr, wrap.Ptr)