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 }