github.com/ipld/go-ipld-prime@v0.21.0/node/tests/schemaStructReprTuple.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 "github.com/ipld/go-ipld-prime/schema" 12 ) 13 14 func SchemaTestStructReprTuple(t *testing.T, engine Engine) { 15 ts := schema.TypeSystem{} 16 ts.Init() 17 ts.Accumulate(schema.SpawnString("String")) 18 ts.Accumulate(schema.SpawnStruct("OneTuple", 19 []schema.StructField{ 20 schema.SpawnStructField("field", "String", false, false), 21 }, 22 schema.SpawnStructRepresentationTuple(), 23 )) 24 ts.Accumulate(schema.SpawnStruct("FourTuple", 25 []schema.StructField{ 26 schema.SpawnStructField("foo", "String", false, false), 27 schema.SpawnStructField("bar", "String", false, true), 28 schema.SpawnStructField("baz", "String", true, true), 29 schema.SpawnStructField("qux", "String", true, false), 30 }, 31 schema.SpawnStructRepresentationTuple(), 32 )) 33 engine.Init(t, ts) 34 35 t.Run("onetuple works", func(t *testing.T) { 36 np := engine.PrototypeByName("OneTuple") 37 nrp := engine.PrototypeByName("OneTuple.Repr") 38 var n schema.TypedNode 39 t.Run("typed-create", func(t *testing.T) { 40 n = fluent.MustBuildMap(np, 1, func(ma fluent.MapAssembler) { 41 ma.AssembleEntry("field").AssignString("valoo") 42 }).(schema.TypedNode) 43 t.Run("typed-read", func(t *testing.T) { 44 qt.Assert(t, n.Kind(), qt.Equals, datamodel.Kind_Map) 45 qt.Check(t, n.Length(), qt.Equals, int64(1)) 46 qt.Check(t, must.String(must.Node(n.LookupByString("field"))), qt.Equals, "valoo") 47 }) 48 t.Run("repr-read", func(t *testing.T) { 49 nr := n.Representation() 50 qt.Assert(t, nr.Kind(), qt.Equals, datamodel.Kind_List) 51 qt.Check(t, nr.Length(), qt.Equals, int64(1)) 52 qt.Check(t, must.String(must.Node(nr.LookupByIndex(0))), qt.Equals, "valoo") 53 }) 54 }) 55 t.Run("repr-create", func(t *testing.T) { 56 nr := fluent.MustBuildList(nrp, 1, func(la fluent.ListAssembler) { 57 la.AssembleValue().AssignString("valoo") 58 }) 59 qt.Check(t, n, NodeContentEquals, nr) 60 }) 61 }) 62 63 t.Run("fourtuple works", func(t *testing.T) { 64 np := engine.PrototypeByName("FourTuple") 65 nrp := engine.PrototypeByName("FourTuple.Repr") 66 var n schema.TypedNode 67 t.Run("typed-create", func(t *testing.T) { 68 n = fluent.MustBuildMap(np, 4, func(ma fluent.MapAssembler) { 69 ma.AssembleEntry("foo").AssignString("0") 70 ma.AssembleEntry("bar").AssignString("1") 71 ma.AssembleEntry("baz").AssignString("2") 72 ma.AssembleEntry("qux").AssignString("3") 73 }).(schema.TypedNode) 74 t.Run("typed-read", func(t *testing.T) { 75 qt.Assert(t, n.Kind(), qt.Equals, datamodel.Kind_Map) 76 qt.Check(t, n.Length(), qt.Equals, int64(4)) 77 qt.Check(t, must.String(must.Node(n.LookupByString("foo"))), qt.Equals, "0") 78 qt.Check(t, must.String(must.Node(n.LookupByString("bar"))), qt.Equals, "1") 79 qt.Check(t, must.String(must.Node(n.LookupByString("baz"))), qt.Equals, "2") 80 qt.Check(t, must.String(must.Node(n.LookupByString("qux"))), qt.Equals, "3") 81 }) 82 t.Run("repr-read", func(t *testing.T) { 83 nr := n.Representation() 84 qt.Assert(t, nr.Kind(), qt.Equals, datamodel.Kind_List) 85 qt.Check(t, nr.Length(), qt.Equals, int64(4)) 86 qt.Check(t, must.String(must.Node(nr.LookupByIndex(0))), qt.Equals, "0") 87 qt.Check(t, must.String(must.Node(nr.LookupByIndex(1))), qt.Equals, "1") 88 qt.Check(t, must.String(must.Node(nr.LookupByIndex(2))), qt.Equals, "2") 89 qt.Check(t, must.String(must.Node(nr.LookupByIndex(3))), qt.Equals, "3") 90 }) 91 }) 92 t.Run("repr-create", func(t *testing.T) { 93 nr := fluent.MustBuildList(nrp, 4, func(la fluent.ListAssembler) { 94 la.AssembleValue().AssignString("0") 95 la.AssembleValue().AssignString("1") 96 la.AssembleValue().AssignString("2") 97 la.AssembleValue().AssignString("3") 98 }) 99 qt.Check(t, n, NodeContentEquals, nr) 100 }) 101 }) 102 103 t.Run("fourtuple with absents", func(t *testing.T) { 104 np := engine.PrototypeByName("FourTuple") 105 nrp := engine.PrototypeByName("FourTuple.Repr") 106 var n schema.TypedNode 107 t.Run("typed-create", func(t *testing.T) { 108 n = fluent.MustBuildMap(np, 2, func(ma fluent.MapAssembler) { 109 ma.AssembleEntry("foo").AssignString("0") 110 ma.AssembleEntry("bar").AssignNull() 111 }).(schema.TypedNode) 112 t.Run("typed-read", func(t *testing.T) { 113 qt.Assert(t, n.Kind(), qt.Equals, datamodel.Kind_Map) 114 qt.Check(t, n.Length(), qt.Equals, int64(4)) 115 qt.Check(t, must.String(must.Node(n.LookupByString("foo"))), qt.Equals, "0") 116 qt.Check(t, must.Node(n.LookupByString("bar")), qt.Equals, datamodel.Null) 117 qt.Check(t, must.Node(n.LookupByString("baz")), qt.Equals, datamodel.Absent) 118 qt.Check(t, must.Node(n.LookupByString("qux")), qt.Equals, datamodel.Absent) 119 }) 120 t.Run("repr-read", func(t *testing.T) { 121 nr := n.Representation() 122 qt.Assert(t, nr.Kind(), qt.Equals, datamodel.Kind_List) 123 qt.Check(t, nr.Length(), qt.Equals, int64(2)) 124 qt.Check(t, must.String(must.Node(nr.LookupByIndex(0))), qt.Equals, "0") 125 qt.Check(t, must.Node(nr.LookupByIndex(1)), qt.Equals, datamodel.Null) 126 }) 127 }) 128 t.Run("repr-create", func(t *testing.T) { 129 nr := fluent.MustBuildList(nrp, 4, func(la fluent.ListAssembler) { 130 la.AssembleValue().AssignString("0") 131 la.AssembleValue().AssignNull() 132 }) 133 qt.Check(t, n, NodeContentEquals, nr) 134 }) 135 }) 136 }