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 }