github.com/ipld/go-ipld-prime@v0.21.0/node/tests/listSpecs.go (about)

     1  package tests
     2  
     3  import (
     4  	"testing"
     5  
     6  	qt "github.com/frankban/quicktest"
     7  
     8  	"github.com/ipld/go-ipld-prime/datamodel"
     9  	"github.com/ipld/go-ipld-prime/fluent"
    10  	"github.com/ipld/go-ipld-prime/must"
    11  )
    12  
    13  func SpecTestListString(t *testing.T, np datamodel.NodePrototype) {
    14  	t.Run("list<string>, 3 entries", func(t *testing.T) {
    15  		n := fluent.MustBuildList(np, 3, func(la fluent.ListAssembler) {
    16  			la.AssembleValue().AssignString("one")
    17  			la.AssembleValue().AssignString("two")
    18  			la.AssembleValue().AssignString("three")
    19  		})
    20  		t.Run("reads back out", func(t *testing.T) {
    21  			qt.Check(t, n.Length(), qt.Equals, int64(3))
    22  
    23  			v, err := n.LookupByIndex(0)
    24  			qt.Check(t, err, qt.IsNil)
    25  			qt.Check(t, must.String(v), qt.Equals, "one")
    26  
    27  			v, err = n.LookupByIndex(1)
    28  			qt.Check(t, err, qt.IsNil)
    29  			qt.Check(t, must.String(v), qt.Equals, "two")
    30  
    31  			v, err = n.LookupByIndex(2)
    32  			qt.Check(t, err, qt.IsNil)
    33  			qt.Check(t, must.String(v), qt.Equals, "three")
    34  		})
    35  		t.Run("reads via iteration", func(t *testing.T) {
    36  			itr := n.ListIterator()
    37  
    38  			qt.Check(t, itr.Done(), qt.IsFalse)
    39  			idx, v, err := itr.Next()
    40  			qt.Check(t, err, qt.IsNil)
    41  			qt.Check(t, idx, qt.Equals, int64(0))
    42  			qt.Check(t, must.String(v), qt.Equals, "one")
    43  
    44  			qt.Check(t, itr.Done(), qt.IsFalse)
    45  			idx, v, err = itr.Next()
    46  			qt.Check(t, err, qt.IsNil)
    47  			qt.Check(t, idx, qt.Equals, int64(1))
    48  			qt.Check(t, must.String(v), qt.Equals, "two")
    49  
    50  			qt.Check(t, itr.Done(), qt.IsFalse)
    51  			idx, v, err = itr.Next()
    52  			qt.Check(t, err, qt.IsNil)
    53  			qt.Check(t, idx, qt.Equals, int64(2))
    54  			qt.Check(t, must.String(v), qt.Equals, "three")
    55  
    56  			qt.Check(t, itr.Done(), qt.IsTrue)
    57  			idx, v, err = itr.Next()
    58  			qt.Check(t, err, qt.Equals, datamodel.ErrIteratorOverread{})
    59  			qt.Check(t, idx, qt.Equals, int64(-1))
    60  			qt.Check(t, v, qt.IsNil)
    61  		})
    62  	})
    63  }