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