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 | },
|
284 | {
|
285 | "given": {
|
286 | "baz": "other",
|
287 | "foo": [
|
288 | {"bar": 1}, {"bar": 2}, {"bar": 3}, {"bar": 4}, {"bar": 1, "baz": 2}
|
289 | ]
|
290 | },
|
291 | "cases": [
|
292 | {
|
293 | "expression": "foo[?bar==`1`].bar[0]",
|
294 | "result": []
|
295 | }
|
296 | ]
|
297 | },
|
298 | {
|
299 | "given": {
|
300 | "foo": [
|
301 | {"a": 1, "b": {"c": "x"}},
|
302 | {"a": 1, "b": {"c": "y"}},
|
303 | {"a": 1, "b": {"c": "z"}},
|
304 | {"a": 2, "b": {"c": "z"}},
|
305 | {"a": 1, "baz": 2}
|
306 | ]
|
307 | },
|
308 | "cases": [
|
309 | {
|
310 | "expression": "foo[?a==`1`].b.c",
|
311 | "result": ["x", "y", "z"]
|
312 | }
|
313 | ]
|
314 | }
|
315 | ]
|