github.com/ipld/go-ipld-prime@v0.21.0/traversal/selector/builder/builder_test.go (about) 1 package builder_test 2 3 import ( 4 "testing" 5 6 qt "github.com/frankban/quicktest" 7 8 "github.com/ipld/go-ipld-prime/fluent" 9 "github.com/ipld/go-ipld-prime/node/basicnode" 10 nodetests "github.com/ipld/go-ipld-prime/node/tests" 11 "github.com/ipld/go-ipld-prime/traversal/selector" 12 "github.com/ipld/go-ipld-prime/traversal/selector/builder" 13 ) 14 15 func TestBuildingSelectors(t *testing.T) { 16 np := basicnode.Prototype.Any 17 ssb := builder.NewSelectorSpecBuilder(np) 18 t.Run("Matcher builds matcher nodes", func(t *testing.T) { 19 sn := ssb.Matcher().Node() 20 esn := fluent.MustBuildMap(np, 1, func(na fluent.MapAssembler) { 21 na.AssembleEntry(selector.SelectorKey_Matcher).CreateMap(0, func(na fluent.MapAssembler) {}) 22 }) 23 qt.Check(t, sn, nodetests.NodeContentEquals, esn) 24 }) 25 t.Run("ExploreRecursiveEdge builds ExploreRecursiveEdge nodes", func(t *testing.T) { 26 sn := ssb.ExploreRecursiveEdge().Node() 27 esn := fluent.MustBuildMap(np, 1, func(na fluent.MapAssembler) { 28 na.AssembleEntry(selector.SelectorKey_ExploreRecursiveEdge).CreateMap(0, func(na fluent.MapAssembler) {}) 29 }) 30 qt.Check(t, sn, nodetests.NodeContentEquals, esn) 31 }) 32 t.Run("ExploreAll builds ExploreAll nodes", func(t *testing.T) { 33 sn := ssb.ExploreAll(ssb.Matcher()).Node() 34 esn := fluent.MustBuildMap(np, 1, func(na fluent.MapAssembler) { 35 na.AssembleEntry(selector.SelectorKey_ExploreAll).CreateMap(1, func(na fluent.MapAssembler) { 36 na.AssembleEntry(selector.SelectorKey_Next).CreateMap(1, func(na fluent.MapAssembler) { 37 na.AssembleEntry(selector.SelectorKey_Matcher).CreateMap(0, func(na fluent.MapAssembler) {}) 38 }) 39 }) 40 }) 41 qt.Check(t, sn, nodetests.NodeContentEquals, esn) 42 }) 43 t.Run("ExploreIndex builds ExploreIndex nodes", func(t *testing.T) { 44 sn := ssb.ExploreIndex(2, ssb.Matcher()).Node() 45 esn := fluent.MustBuildMap(np, 1, func(na fluent.MapAssembler) { 46 na.AssembleEntry(selector.SelectorKey_ExploreIndex).CreateMap(2, func(na fluent.MapAssembler) { 47 na.AssembleEntry(selector.SelectorKey_Index).AssignInt(2) 48 na.AssembleEntry(selector.SelectorKey_Next).CreateMap(1, func(na fluent.MapAssembler) { 49 na.AssembleEntry(selector.SelectorKey_Matcher).CreateMap(0, func(na fluent.MapAssembler) {}) 50 }) 51 }) 52 }) 53 qt.Check(t, sn, nodetests.NodeContentEquals, esn) 54 }) 55 t.Run("ExploreRange builds ExploreRange nodes", func(t *testing.T) { 56 sn := ssb.ExploreRange(2, 3, ssb.Matcher()).Node() 57 esn := fluent.MustBuildMap(np, 1, func(na fluent.MapAssembler) { 58 na.AssembleEntry(selector.SelectorKey_ExploreRange).CreateMap(3, func(na fluent.MapAssembler) { 59 na.AssembleEntry(selector.SelectorKey_Start).AssignInt(2) 60 na.AssembleEntry(selector.SelectorKey_End).AssignInt(3) 61 na.AssembleEntry(selector.SelectorKey_Next).CreateMap(1, func(na fluent.MapAssembler) { 62 na.AssembleEntry(selector.SelectorKey_Matcher).CreateMap(0, func(na fluent.MapAssembler) {}) 63 }) 64 }) 65 }) 66 qt.Check(t, sn, nodetests.NodeContentEquals, esn) 67 }) 68 t.Run("ExploreRecursive builds ExploreRecursive nodes", func(t *testing.T) { 69 sn := ssb.ExploreRecursive(selector.RecursionLimitDepth(2), ssb.ExploreAll(ssb.ExploreRecursiveEdge())).Node() 70 esn := fluent.MustBuildMap(np, 1, func(na fluent.MapAssembler) { 71 na.AssembleEntry(selector.SelectorKey_ExploreRecursive).CreateMap(2, func(na fluent.MapAssembler) { 72 na.AssembleEntry(selector.SelectorKey_Limit).CreateMap(1, func(na fluent.MapAssembler) { 73 na.AssembleEntry(selector.SelectorKey_LimitDepth).AssignInt(2) 74 }) 75 na.AssembleEntry(selector.SelectorKey_Sequence).CreateMap(1, func(na fluent.MapAssembler) { 76 na.AssembleEntry(selector.SelectorKey_ExploreAll).CreateMap(1, func(na fluent.MapAssembler) { 77 na.AssembleEntry(selector.SelectorKey_Next).CreateMap(1, func(na fluent.MapAssembler) { 78 na.AssembleEntry(selector.SelectorKey_ExploreRecursiveEdge).CreateMap(0, func(na fluent.MapAssembler) {}) 79 }) 80 }) 81 }) 82 }) 83 }) 84 qt.Check(t, sn, nodetests.NodeContentEquals, esn) 85 sn = ssb.ExploreRecursive(selector.RecursionLimitNone(), ssb.ExploreAll(ssb.ExploreRecursiveEdge())).Node() 86 esn = fluent.MustBuildMap(np, 1, func(na fluent.MapAssembler) { 87 na.AssembleEntry(selector.SelectorKey_ExploreRecursive).CreateMap(2, func(na fluent.MapAssembler) { 88 na.AssembleEntry(selector.SelectorKey_Limit).CreateMap(1, func(na fluent.MapAssembler) { 89 na.AssembleEntry(selector.SelectorKey_LimitNone).CreateMap(0, func(na fluent.MapAssembler) {}) 90 }) 91 na.AssembleEntry(selector.SelectorKey_Sequence).CreateMap(1, func(na fluent.MapAssembler) { 92 na.AssembleEntry(selector.SelectorKey_ExploreAll).CreateMap(1, func(na fluent.MapAssembler) { 93 na.AssembleEntry(selector.SelectorKey_Next).CreateMap(1, func(na fluent.MapAssembler) { 94 na.AssembleEntry(selector.SelectorKey_ExploreRecursiveEdge).CreateMap(0, func(na fluent.MapAssembler) {}) 95 }) 96 }) 97 }) 98 }) 99 }) 100 qt.Check(t, sn, nodetests.NodeContentEquals, esn) 101 }) 102 t.Run("ExploreUnion builds ExploreUnion nodes", func(t *testing.T) { 103 sn := ssb.ExploreUnion(ssb.Matcher(), ssb.ExploreIndex(2, ssb.Matcher())).Node() 104 esn := fluent.MustBuildMap(np, 1, func(na fluent.MapAssembler) { 105 na.AssembleEntry(selector.SelectorKey_ExploreUnion).CreateList(2, func(na fluent.ListAssembler) { 106 na.AssembleValue().CreateMap(1, func(na fluent.MapAssembler) { 107 na.AssembleEntry(selector.SelectorKey_Matcher).CreateMap(0, func(na fluent.MapAssembler) {}) 108 }) 109 na.AssembleValue().CreateMap(1, func(na fluent.MapAssembler) { 110 na.AssembleEntry(selector.SelectorKey_ExploreIndex).CreateMap(2, func(na fluent.MapAssembler) { 111 na.AssembleEntry(selector.SelectorKey_Index).AssignInt(2) 112 na.AssembleEntry(selector.SelectorKey_Next).CreateMap(1, func(na fluent.MapAssembler) { 113 na.AssembleEntry(selector.SelectorKey_Matcher).CreateMap(0, func(na fluent.MapAssembler) {}) 114 }) 115 }) 116 }) 117 }) 118 }) 119 qt.Check(t, sn, nodetests.NodeContentEquals, esn) 120 }) 121 t.Run("ExploreFields builds ExploreFields nodes", func(t *testing.T) { 122 sn := ssb.ExploreFields(func(efsb builder.ExploreFieldsSpecBuilder) { efsb.Insert("applesauce", ssb.Matcher()) }).Node() 123 esn := fluent.MustBuildMap(np, 1, func(na fluent.MapAssembler) { 124 na.AssembleEntry(selector.SelectorKey_ExploreFields).CreateMap(1, func(na fluent.MapAssembler) { 125 na.AssembleEntry(selector.SelectorKey_Fields).CreateMap(1, func(na fluent.MapAssembler) { 126 na.AssembleEntry("applesauce").CreateMap(1, func(na fluent.MapAssembler) { 127 na.AssembleEntry(selector.SelectorKey_Matcher).CreateMap(0, func(na fluent.MapAssembler) {}) 128 }) 129 }) 130 }) 131 }) 132 qt.Check(t, sn, nodetests.NodeContentEquals, esn) 133 }) 134 }