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  }