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  }