github.com/ipld/go-ipld-prime@v0.21.0/codec/cbor/roundtrip_test.go (about)

     1  package cbor
     2  
     3  import (
     4  	"bytes"
     5  	"strings"
     6  	"testing"
     7  
     8  	qt "github.com/frankban/quicktest"
     9  
    10  	"github.com/ipld/go-ipld-prime/fluent"
    11  	"github.com/ipld/go-ipld-prime/node/basicnode"
    12  	nodetests "github.com/ipld/go-ipld-prime/node/tests"
    13  )
    14  
    15  var n = fluent.MustBuildMap(basicnode.Prototype.Map, 4, func(na fluent.MapAssembler) {
    16  	na.AssembleEntry("plain").AssignString("olde string")
    17  	na.AssembleEntry("map").CreateMap(2, func(na fluent.MapAssembler) {
    18  		na.AssembleEntry("one").AssignInt(1)
    19  		na.AssembleEntry("two").AssignInt(2)
    20  	})
    21  	na.AssembleEntry("list").CreateList(2, func(na fluent.ListAssembler) {
    22  		na.AssembleValue().AssignString("three")
    23  		na.AssembleValue().AssignString("four")
    24  	})
    25  	na.AssembleEntry("nested").CreateMap(1, func(na fluent.MapAssembler) {
    26  		na.AssembleEntry("deeper").CreateList(1, func(na fluent.ListAssembler) {
    27  			na.AssembleValue().AssignString("things")
    28  		})
    29  	})
    30  })
    31  
    32  var serial = "\xa4eplainkolde stringcmap\xa2cone\x01ctwo\x02dlist\x82ethreedfourfnested\xa1fdeeper\x81fthings"
    33  
    34  func TestRoundtrip(t *testing.T) {
    35  	t.Run("encoding", func(t *testing.T) {
    36  		var buf bytes.Buffer
    37  		err := Encode(n, &buf)
    38  		qt.Assert(t, err, qt.IsNil)
    39  		qt.Check(t, buf.String(), qt.Equals, serial)
    40  	})
    41  	t.Run("decoding", func(t *testing.T) {
    42  		buf := strings.NewReader(serial)
    43  		nb := basicnode.Prototype.Map.NewBuilder()
    44  		err := Decode(nb, buf)
    45  		qt.Assert(t, err, qt.IsNil)
    46  		qt.Check(t, nb.Build(), nodetests.NodeContentEquals, n)
    47  	})
    48  }
    49  
    50  func TestRoundtripScalar(t *testing.T) {
    51  	nb := basicnode.Prototype__String{}.NewBuilder()
    52  	nb.AssignString("applesauce")
    53  	simple := nb.Build()
    54  	t.Run("encoding", func(t *testing.T) {
    55  		var buf bytes.Buffer
    56  		err := Encode(simple, &buf)
    57  		qt.Assert(t, err, qt.IsNil)
    58  		qt.Check(t, buf.String(), qt.Equals, `japplesauce`)
    59  	})
    60  	t.Run("decoding", func(t *testing.T) {
    61  		buf := strings.NewReader(`japplesauce`)
    62  		nb := basicnode.Prototype__String{}.NewBuilder()
    63  		err := Decode(nb, buf)
    64  		qt.Assert(t, err, qt.IsNil)
    65  		qt.Check(t, nb.Build(), nodetests.NodeContentEquals, simple)
    66  	})
    67  }