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  }