github.com/algorand/go-algorand-sdk@v1.24.0/encoding/msgpack/msgpack_test.go (about) 1 package msgpack 2 3 import ( 4 "bytes" 5 "testing" 6 7 "github.com/stretchr/testify/assert" 8 ) 9 10 type object struct { 11 subsetObject 12 Name string `codec:"name"` 13 } 14 15 type subsetObject struct { 16 Data string `codec:"data"` 17 } 18 19 func TestDecode(t *testing.T) { 20 obj := object{ 21 subsetObject: subsetObject{Data: "data"}, 22 Name: "name", 23 } 24 encodedOb := Encode(obj) 25 26 t.Run("basic encode/decode test", func(t *testing.T) { 27 // basic encode/decode test. 28 var decoded object 29 err := Decode(encodedOb, &decoded) 30 assert.NoError(t, err) 31 assert.Equal(t, obj, decoded) 32 }) 33 34 t.Run("strict decode, pass", func(t *testing.T) { 35 // strict decode test 36 decoder := NewDecoder(bytes.NewReader(encodedOb)) 37 var decoded object 38 err := decoder.Decode(&decoded) 39 assert.NoError(t, err) 40 assert.Equal(t, obj, decoded) 41 }) 42 43 t.Run("strict decode subset, fail", func(t *testing.T) { 44 // strict decode test 45 decoder := NewDecoder(bytes.NewReader(encodedOb)) 46 var decoded subsetObject 47 err := decoder.Decode(&decoded) 48 assert.Error(t, err) 49 assert.Contains(t, err.Error(), "no matching struct field found when decoding stream map with key name") 50 }) 51 52 t.Run("lenient decode subset, pass", func(t *testing.T) { 53 // strict decode test 54 decoder := NewLenientDecoder(bytes.NewReader(encodedOb)) 55 var decoded subsetObject 56 err := decoder.Decode(&decoded) 57 assert.NoError(t, err) 58 assert.Equal(t, obj.subsetObject, decoded) 59 }) 60 }