...

Text file src/github.com/jmespath/go-jmespath/compliance/filters.json

Documentation: github.com/jmespath/go-jmespath/compliance

     1[
     2  {
     3    "given": {"foo": [{"name": "a"}, {"name": "b"}]},
     4    "cases": [
     5      {
     6        "comment": "Matching a literal",
     7        "expression": "foo[?name == 'a']",
     8        "result": [{"name": "a"}]
     9      }
    10    ]
    11  },
    12  {
    13    "given": {"foo": [0, 1], "bar": [2, 3]},
    14    "cases": [
    15      {
    16        "comment": "Matching a literal",
    17        "expression": "*[?[0] == `0`]",
    18        "result": [[], []]
    19      }
    20    ]
    21  },
    22  {
    23    "given": {"foo": [{"first": "foo", "last": "bar"},
    24      {"first": "foo", "last": "foo"},
    25      {"first": "foo", "last": "baz"}]},
    26    "cases": [
    27      {
    28        "comment": "Matching an expression",
    29        "expression": "foo[?first == last]",
    30        "result": [{"first": "foo", "last": "foo"}]
    31      },
    32      {
    33        "comment": "Verify projection created from filter",
    34        "expression": "foo[?first == last].first",
    35        "result": ["foo"]
    36      }
    37    ]
    38  },
    39  {
    40    "given": {"foo": [{"age": 20},
    41      {"age": 25},
    42      {"age": 30}]},
    43    "cases": [
    44      {
    45        "comment": "Greater than with a number",
    46        "expression": "foo[?age > `25`]",
    47        "result": [{"age": 30}]
    48      },
    49      {
    50        "expression": "foo[?age >= `25`]",
    51        "result": [{"age": 25}, {"age": 30}]
    52      },
    53      {
    54        "comment": "Greater than with a number",
    55        "expression": "foo[?age > `30`]",
    56        "result": []
    57      },
    58      {
    59        "comment": "Greater than with a number",
    60        "expression": "foo[?age < `25`]",
    61        "result": [{"age": 20}]
    62      },
    63      {
    64        "comment": "Greater than with a number",
    65        "expression": "foo[?age <= `25`]",
    66        "result": [{"age": 20}, {"age": 25}]
    67      },
    68      {
    69        "comment": "Greater than with a number",
    70        "expression": "foo[?age < `20`]",
    71        "result": []
    72      },
    73      {
    74        "expression": "foo[?age == `20`]",
    75        "result": [{"age": 20}]
    76      },
    77      {
    78        "expression": "foo[?age != `20`]",
    79        "result": [{"age": 25}, {"age": 30}]
    80      }
    81    ]
    82  },
    83  {
    84    "given": {"foo": [{"top": {"name": "a"}},
    85      {"top": {"name": "b"}}]},
    86    "cases": [
    87      {
    88        "comment": "Filter with subexpression",
    89        "expression": "foo[?top.name == 'a']",
    90        "result": [{"top": {"name": "a"}}]
    91      }
    92    ]
    93  },
    94  {
    95    "given": {"foo": [{"top": {"first": "foo", "last": "bar"}},
    96      {"top": {"first": "foo", "last": "foo"}},
    97      {"top": {"first": "foo", "last": "baz"}}]},
    98    "cases": [
    99      {
   100        "comment": "Matching an expression",
   101        "expression": "foo[?top.first == top.last]",
   102        "result": [{"top": {"first": "foo", "last": "foo"}}]
   103      },
   104      {
   105        "comment": "Matching a JSON array",
   106        "expression": "foo[?top == `{\"first\": \"foo\", \"last\": \"bar\"}`]",
   107        "result": [{"top": {"first": "foo", "last": "bar"}}]
   108      }
   109    ]
   110  },
   111  {
   112    "given": {"foo": [
   113      {"key": true},
   114      {"key": false},
   115      {"key": 0},
   116      {"key": 1},
   117      {"key": [0]},
   118      {"key": {"bar": [0]}},
   119      {"key": null},
   120      {"key": [1]},
   121      {"key": {"a":2}}
   122    ]},
   123    "cases": [
   124      {
   125        "expression": "foo[?key == `true`]",
   126        "result": [{"key": true}]
   127      },
   128      {
   129        "expression": "foo[?key == `false`]",
   130        "result": [{"key": false}]
   131      },
   132      {
   133        "expression": "foo[?key == `0`]",
   134        "result": [{"key": 0}]
   135      },
   136      {
   137        "expression": "foo[?key == `1`]",
   138        "result": [{"key": 1}]
   139      },
   140      {
   141        "expression": "foo[?key == `[0]`]",
   142        "result": [{"key": [0]}]
   143      },
   144      {
   145        "expression": "foo[?key == `{\"bar\": [0]}`]",
   146        "result": [{"key": {"bar": [0]}}]
   147      },
   148      {
   149        "expression": "foo[?key == `null`]",
   150        "result": [{"key": null}]
   151      },
   152      {
   153        "expression": "foo[?key == `[1]`]",
   154        "result": [{"key": [1]}]
   155      },
   156      {
   157        "expression": "foo[?key == `{\"a\":2}`]",
   158        "result": [{"key": {"a":2}}]
   159      },
   160      {
   161        "expression": "foo[?`true` == key]",
   162        "result": [{"key": true}]
   163      },
   164      {
   165        "expression": "foo[?`false` == key]",
   166        "result": [{"key": false}]
   167      },
   168      {
   169        "expression": "foo[?`0` == key]",
   170        "result": [{"key": 0}]
   171      },
   172      {
   173        "expression": "foo[?`1` == key]",
   174        "result": [{"key": 1}]
   175      },
   176      {
   177        "expression": "foo[?`[0]` == key]",
   178        "result": [{"key": [0]}]
   179      },
   180      {
   181        "expression": "foo[?`{\"bar\": [0]}` == key]",
   182        "result": [{"key": {"bar": [0]}}]
   183      },
   184      {
   185        "expression": "foo[?`null` == key]",
   186        "result": [{"key": null}]
   187      },
   188      {
   189        "expression": "foo[?`[1]` == key]",
   190        "result": [{"key": [1]}]
   191      },
   192      {
   193        "expression": "foo[?`{\"a\":2}` == key]",
   194        "result": [{"key": {"a":2}}]
   195      },
   196      {
   197        "expression": "foo[?key != `true`]",
   198        "result": [{"key": false}, {"key": 0}, {"key": 1}, {"key": [0]},
   199          {"key": {"bar": [0]}}, {"key": null}, {"key": [1]}, {"key": {"a":2}}]
   200      },
   201      {
   202        "expression": "foo[?key != `false`]",
   203        "result": [{"key": true}, {"key": 0}, {"key": 1}, {"key": [0]},
   204          {"key": {"bar": [0]}}, {"key": null}, {"key": [1]}, {"key": {"a":2}}]
   205      },
   206      {
   207        "expression": "foo[?key != `0`]",
   208        "result": [{"key": true}, {"key": false}, {"key": 1}, {"key": [0]},
   209          {"key": {"bar": [0]}}, {"key": null}, {"key": [1]}, {"key": {"a":2}}]
   210      },
   211      {
   212        "expression": "foo[?key != `1`]",
   213        "result": [{"key": true}, {"key": false}, {"key": 0}, {"key": [0]},
   214          {"key": {"bar": [0]}}, {"key": null}, {"key": [1]}, {"key": {"a":2}}]
   215      },
   216      {
   217        "expression": "foo[?key != `null`]",
   218        "result": [{"key": true}, {"key": false}, {"key": 0}, {"key": 1}, {"key": [0]},
   219          {"key": {"bar": [0]}}, {"key": [1]}, {"key": {"a":2}}]
   220      },
   221      {
   222        "expression": "foo[?key != `[1]`]",
   223        "result": [{"key": true}, {"key": false}, {"key": 0}, {"key": 1}, {"key": [0]},
   224          {"key": {"bar": [0]}}, {"key": null}, {"key": {"a":2}}]
   225      },
   226      {
   227        "expression": "foo[?key != `{\"a\":2}`]",
   228        "result": [{"key": true}, {"key": false}, {"key": 0}, {"key": 1}, {"key": [0]},
   229          {"key": {"bar": [0]}}, {"key": null}, {"key": [1]}]
   230      },
   231      {
   232        "expression": "foo[?`true` != key]",
   233        "result": [{"key": false}, {"key": 0}, {"key": 1}, {"key": [0]},
   234          {"key": {"bar": [0]}}, {"key": null}, {"key": [1]}, {"key": {"a":2}}]
   235      },
   236      {
   237        "expression": "foo[?`false` != key]",
   238        "result": [{"key": true}, {"key": 0}, {"key": 1}, {"key": [0]},
   239          {"key": {"bar": [0]}}, {"key": null}, {"key": [1]}, {"key": {"a":2}}]
   240      },
   241      {
   242        "expression": "foo[?`0` != key]",
   243        "result": [{"key": true}, {"key": false}, {"key": 1}, {"key": [0]},
   244          {"key": {"bar": [0]}}, {"key": null}, {"key": [1]}, {"key": {"a":2}}]
   245      },
   246      {
   247        "expression": "foo[?`1` != key]",
   248        "result": [{"key": true}, {"key": false}, {"key": 0}, {"key": [0]},
   249          {"key": {"bar": [0]}}, {"key": null}, {"key": [1]}, {"key": {"a":2}}]
   250      },
   251      {
   252        "expression": "foo[?`null` != key]",
   253        "result": [{"key": true}, {"key": false}, {"key": 0}, {"key": 1}, {"key": [0]},
   254          {"key": {"bar": [0]}}, {"key": [1]}, {"key": {"a":2}}]
   255      },
   256      {
   257        "expression": "foo[?`[1]` != key]",
   258        "result": [{"key": true}, {"key": false}, {"key": 0}, {"key": 1}, {"key": [0]},
   259          {"key": {"bar": [0]}}, {"key": null}, {"key": {"a":2}}]
   260      },
   261      {
   262        "expression": "foo[?`{\"a\":2}` != key]",
   263        "result": [{"key": true}, {"key": false}, {"key": 0}, {"key": 1}, {"key": [0]},
   264          {"key": {"bar": [0]}}, {"key": null}, {"key": [1]}]
   265      }
   266    ]
   267  },
   268  {
   269    "given": {"reservations": [
   270      {"instances": [
   271        {"foo": 1, "bar": 2}, {"foo": 1, "bar": 3},
   272        {"foo": 1, "bar": 2}, {"foo": 2, "bar": 1}]}]},
   273    "cases": [
   274      {
   275        "expression": "reservations[].instances[?bar==`1`]",
   276        "result": [[{"foo": 2, "bar": 1}]]
   277      },
   278      {
   279        "expression": "reservations[*].instances[?bar==`1`]",
   280        "result": [[{"foo": 2, "bar": 1}]]
   281      },
   282      {
   283        "expression": "reservations[].instances[?bar==`1`][]",
   284        "result": [{"foo": 2, "bar": 1}]
   285      }
   286    ]
   287  },
   288  {
   289    "given": {
   290      "baz": "other",
   291      "foo": [
   292        {"bar": 1}, {"bar": 2}, {"bar": 3}, {"bar": 4}, {"bar": 1, "baz": 2}
   293      ]
   294    },
   295    "cases": [
   296      {
   297        "expression": "foo[?bar==`1`].bar[0]",
   298        "result": []
   299      }
   300    ]
   301  },
   302  {
   303    "given": {
   304      "foo": [
   305        {"a": 1, "b": {"c": "x"}},
   306	{"a": 1, "b": {"c": "y"}},
   307	{"a": 1, "b": {"c": "z"}},
   308	{"a": 2, "b": {"c": "z"}},
   309	{"a": 1, "baz": 2}
   310      ]
   311    },
   312    "cases": [
   313      {
   314        "expression": "foo[?a==`1`].b.c",
   315        "result": ["x", "y", "z"]
   316      }
   317    ]
   318  },
   319  {
   320    "given": {"foo": [{"name": "a"}, {"name": "b"}, {"name": "c"}]},
   321    "cases": [
   322      {
   323        "comment": "Filter with or expression",
   324        "expression": "foo[?name == 'a' || name == 'b']",
   325        "result": [{"name": "a"}, {"name": "b"}]
   326      },
   327      {
   328        "expression": "foo[?name == 'a' || name == 'e']",
   329        "result": [{"name": "a"}]
   330      },
   331      {
   332        "expression": "foo[?name == 'a' || name == 'b' || name == 'c']",
   333        "result": [{"name": "a"}, {"name": "b"}, {"name": "c"}]
   334      }
   335    ]
   336  },
   337  {
   338    "given": {"foo": [{"a": 1, "b": 2}, {"a": 1, "b": 3}]},
   339    "cases": [
   340      {
   341        "comment": "Filter with and expression",
   342        "expression": "foo[?a == `1` && b == `2`]",
   343        "result": [{"a": 1, "b": 2}]
   344      },
   345      {
   346        "expression": "foo[?a == `1` && b == `4`]",
   347        "result": []
   348      }
   349    ]
   350  },
   351  {
   352    "given": {"foo": [{"a": 1, "b": 2, "c": 3}, {"a": 3, "b": 4}]},
   353    "cases": [
   354      {
   355        "comment": "Filter with Or and And expressions",
   356        "expression": "foo[?c == `3` || a == `1` && b == `4`]",
   357        "result": [{"a": 1, "b": 2, "c": 3}]
   358      },
   359      {
   360        "expression": "foo[?b == `2` || a == `3` && b == `4`]",
   361        "result": [{"a": 1, "b": 2, "c": 3}, {"a": 3, "b": 4}]
   362      },
   363      {
   364        "expression": "foo[?a == `3` && b == `4` || b == `2`]",
   365        "result": [{"a": 1, "b": 2, "c": 3}, {"a": 3, "b": 4}]
   366      },
   367      {
   368        "expression": "foo[?(a == `3` && b == `4`) || b == `2`]",
   369        "result": [{"a": 1, "b": 2, "c": 3}, {"a": 3, "b": 4}]
   370      },
   371      {
   372        "expression": "foo[?((a == `3` && b == `4`)) || b == `2`]",
   373        "result": [{"a": 1, "b": 2, "c": 3}, {"a": 3, "b": 4}]
   374      },
   375      {
   376        "expression": "foo[?a == `3` && (b == `4` || b == `2`)]",
   377        "result": [{"a": 3, "b": 4}]
   378      },
   379      {
   380        "expression": "foo[?a == `3` && ((b == `4` || b == `2`))]",
   381        "result": [{"a": 3, "b": 4}]
   382      }
   383    ]
   384  },
   385  {
   386    "given": {"foo": [{"a": 1, "b": 2, "c": 3}, {"a": 3, "b": 4}]},
   387    "cases": [
   388      {
   389        "comment": "Verify precedence of or/and expressions",
   390        "expression": "foo[?a == `1` || b ==`2` && c == `5`]",
   391        "result": [{"a": 1, "b": 2, "c": 3}]
   392      },
   393      {
   394        "comment": "Parentheses can alter precedence",
   395        "expression": "foo[?(a == `1` || b ==`2`) && c == `5`]",
   396        "result": []
   397      },
   398      {
   399        "comment": "Not expressions combined with and/or",
   400        "expression": "foo[?!(a == `1` || b ==`2`)]",
   401        "result": [{"a": 3, "b": 4}]
   402      }
   403    ]
   404  },
   405  {
   406    "given": {
   407      "foo": [
   408        {"key": true},
   409        {"key": false},
   410        {"key": []},
   411        {"key": {}},
   412        {"key": [0]},
   413        {"key": {"a": "b"}},
   414        {"key": 0},
   415        {"key": 1},
   416        {"key": null},
   417        {"notkey": true}
   418      ]
   419    },
   420    "cases": [
   421      {
   422        "comment": "Unary filter expression",
   423        "expression": "foo[?key]",
   424        "result": [
   425          {"key": true}, {"key": [0]}, {"key": {"a": "b"}},
   426          {"key": 0}, {"key": 1}
   427        ]
   428      },
   429      {
   430        "comment": "Unary not filter expression",
   431        "expression": "foo[?!key]",
   432        "result": [
   433          {"key": false}, {"key": []}, {"key": {}},
   434          {"key": null}, {"notkey": true}
   435        ]
   436      },
   437      {
   438        "comment": "Equality with null RHS",
   439        "expression": "foo[?key == `null`]",
   440        "result": [
   441          {"key": null}, {"notkey": true}
   442        ]
   443      }
   444    ]
   445  },
   446  {
   447    "given": {
   448      "foo": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
   449    },
   450    "cases": [
   451      {
   452        "comment": "Using @ in a filter expression",
   453        "expression": "foo[?@ < `5`]",
   454        "result": [0, 1, 2, 3, 4]
   455      },
   456      {
   457        "comment": "Using @ in a filter expression",
   458        "expression": "foo[?`5` > @]",
   459        "result": [0, 1, 2, 3, 4]
   460      },
   461      {
   462        "comment": "Using @ in a filter expression",
   463        "expression": "foo[?@ == @]",
   464        "result": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
   465      }
   466    ]
   467  }
   468]

View as plain text