1 | [{
|
2 | "given": {
|
3 | "foo": {
|
4 | "bar": "bar",
|
5 | "baz": "baz",
|
6 | "qux": "qux",
|
7 | "nested": {
|
8 | "one": {
|
9 | "a": "first",
|
10 | "b": "second",
|
11 | "c": "third"
|
12 | },
|
13 | "two": {
|
14 | "a": "first",
|
15 | "b": "second",
|
16 | "c": "third"
|
17 | },
|
18 | "three": {
|
19 | "a": "first",
|
20 | "b": "second",
|
21 | "c": {"inner": "third"}
|
22 | }
|
23 | }
|
24 | },
|
25 | "bar": 1,
|
26 | "baz": 2,
|
27 | "qux\"": 3
|
28 | },
|
29 | "cases": [
|
30 | {
|
31 | "expression": "foo.{bar: bar}",
|
32 | "result": {"bar": "bar"}
|
33 | },
|
34 | {
|
35 | "expression": "foo.{\"bar\": bar}",
|
36 | "result": {"bar": "bar"}
|
37 | },
|
38 | {
|
39 | "expression": "foo.{\"foo.bar\": bar}",
|
40 | "result": {"foo.bar": "bar"}
|
41 | },
|
42 | {
|
43 | "expression": "foo.{bar: bar, baz: baz}",
|
44 | "result": {"bar": "bar", "baz": "baz"}
|
45 | },
|
46 | {
|
47 | "expression": "foo.{\"bar\": bar, \"baz\": baz}",
|
48 | "result": {"bar": "bar", "baz": "baz"}
|
49 | },
|
50 | {
|
51 | "expression": "{\"baz\": baz, \"qux\\\"\": \"qux\\\"\"}",
|
52 | "result": {"baz": 2, "qux\"": 3}
|
53 | },
|
54 | {
|
55 | "expression": "foo.{bar:bar,baz:baz}",
|
56 | "result": {"bar": "bar", "baz": "baz"}
|
57 | },
|
58 | {
|
59 | "expression": "foo.{bar: bar,qux: qux}",
|
60 | "result": {"bar": "bar", "qux": "qux"}
|
61 | },
|
62 | {
|
63 | "expression": "foo.{bar: bar, noexist: noexist}",
|
64 | "result": {"bar": "bar", "noexist": null}
|
65 | },
|
66 | {
|
67 | "expression": "foo.{noexist: noexist, alsonoexist: alsonoexist}",
|
68 | "result": {"noexist": null, "alsonoexist": null}
|
69 | },
|
70 | {
|
71 | "expression": "foo.badkey.{nokey: nokey, alsonokey: alsonokey}",
|
72 | "result": null
|
73 | },
|
74 | {
|
75 | "expression": "foo.nested.*.{a: a,b: b}",
|
76 | "result": [{"a": "first", "b": "second"},
|
77 | {"a": "first", "b": "second"},
|
78 | {"a": "first", "b": "second"}]
|
79 | },
|
80 | {
|
81 | "expression": "foo.nested.three.{a: a, cinner: c.inner}",
|
82 | "result": {"a": "first", "cinner": "third"}
|
83 | },
|
84 | {
|
85 | "expression": "foo.nested.three.{a: a, c: c.inner.bad.key}",
|
86 | "result": {"a": "first", "c": null}
|
87 | },
|
88 | {
|
89 | "expression": "foo.{a: nested.one.a, b: nested.two.b}",
|
90 | "result": {"a": "first", "b": "second"}
|
91 | },
|
92 | {
|
93 | "expression": "{bar: bar, baz: baz}",
|
94 | "result": {"bar": 1, "baz": 2}
|
95 | },
|
96 | {
|
97 | "expression": "{bar: bar}",
|
98 | "result": {"bar": 1}
|
99 | },
|
100 | {
|
101 | "expression": "{otherkey: bar}",
|
102 | "result": {"otherkey": 1}
|
103 | },
|
104 | {
|
105 | "expression": "{no: no, exist: exist}",
|
106 | "result": {"no": null, "exist": null}
|
107 | },
|
108 | {
|
109 | "expression": "foo.[bar]",
|
110 | "result": ["bar"]
|
111 | },
|
112 | {
|
113 | "expression": "foo.[bar,baz]",
|
114 | "result": ["bar", "baz"]
|
115 | },
|
116 | {
|
117 | "expression": "foo.[bar,qux]",
|
118 | "result": ["bar", "qux"]
|
119 | },
|
120 | {
|
121 | "expression": "foo.[bar,noexist]",
|
122 | "result": ["bar", null]
|
123 | },
|
124 | {
|
125 | "expression": "foo.[noexist,alsonoexist]",
|
126 | "result": [null, null]
|
127 | }
|
128 | ]
|
129 | }, {
|
130 | "given": {
|
131 | "foo": {"bar": 1, "baz": [2, 3, 4]}
|
132 | },
|
133 | "cases": [
|
134 | {
|
135 | "expression": "foo.{bar:bar,baz:baz}",
|
136 | "result": {"bar": 1, "baz": [2, 3, 4]}
|
137 | },
|
138 | {
|
139 | "expression": "foo.[bar,baz[0]]",
|
140 | "result": [1, 2]
|
141 | },
|
142 | {
|
143 | "expression": "foo.[bar,baz[1]]",
|
144 | "result": [1, 3]
|
145 | },
|
146 | {
|
147 | "expression": "foo.[bar,baz[2]]",
|
148 | "result": [1, 4]
|
149 | },
|
150 | {
|
151 | "expression": "foo.[bar,baz[3]]",
|
152 | "result": [1, null]
|
153 | },
|
154 | {
|
155 | "expression": "foo.[bar[0],baz[3]]",
|
156 | "result": [null, null]
|
157 | }
|
158 | ]
|
159 | }, {
|
160 | "given": {
|
161 | "foo": {"bar": 1, "baz": 2}
|
162 | },
|
163 | "cases": [
|
164 | {
|
165 | "expression": "foo.{bar: bar, baz: baz}",
|
166 | "result": {"bar": 1, "baz": 2}
|
167 | },
|
168 | {
|
169 | "expression": "foo.[bar,baz]",
|
170 | "result": [1, 2]
|
171 | }
|
172 | ]
|
173 | }, {
|
174 | "given": {
|
175 | "foo": {
|
176 | "bar": {"baz": [{"common": "first", "one": 1},
|
177 | {"common": "second", "two": 2}]},
|
178 | "ignoreme": 1,
|
179 | "includeme": true
|
180 | }
|
181 | },
|
182 | "cases": [
|
183 | {
|
184 | "expression": "foo.{bar: bar.baz[1],includeme: includeme}",
|
185 | "result": {"bar": {"common": "second", "two": 2}, "includeme": true}
|
186 | },
|
187 | {
|
188 | "expression": "foo.{\"bar.baz.two\": bar.baz[1].two, includeme: includeme}",
|
189 | "result": {"bar.baz.two": 2, "includeme": true}
|
190 | },
|
191 | {
|
192 | "expression": "foo.[includeme, bar.baz[*].common]",
|
193 | "result": [true, ["first", "second"]]
|
194 | },
|
195 | {
|
196 | "expression": "foo.[includeme, bar.baz[*].none]",
|
197 | "result": [true, []]
|
198 | },
|
199 | {
|
200 | "expression": "foo.[includeme, bar.baz[].common]",
|
201 | "result": [true, ["first", "second"]]
|
202 | }
|
203 | ]
|
204 | }, {
|
205 | "given": {
|
206 | "reservations": [{
|
207 | "instances": [
|
208 | {"id": "id1",
|
209 | "name": "first"},
|
210 | {"id": "id2",
|
211 | "name": "second"}
|
212 | ]}, {
|
213 | "instances": [
|
214 | {"id": "id3",
|
215 | "name": "third"},
|
216 | {"id": "id4",
|
217 | "name": "fourth"}
|
218 | ]}
|
219 | ]},
|
220 | "cases": [
|
221 | {
|
222 | "expression": "reservations[*].instances[*].{id: id, name: name}",
|
223 | "result": [[{"id": "id1", "name": "first"}, {"id": "id2", "name": "second"}],
|
224 | [{"id": "id3", "name": "third"}, {"id": "id4", "name": "fourth"}]]
|
225 | },
|
226 | {
|
227 | "expression": "reservations[].instances[].{id: id, name: name}",
|
228 | "result": [{"id": "id1", "name": "first"},
|
229 | {"id": "id2", "name": "second"},
|
230 | {"id": "id3", "name": "third"},
|
231 | {"id": "id4", "name": "fourth"}]
|
232 | },
|
233 | {
|
234 | "expression": "reservations[].instances[].[id, name]",
|
235 | "result": [["id1", "first"],
|
236 | ["id2", "second"],
|
237 | ["id3", "third"],
|
238 | ["id4", "fourth"]]
|
239 | }
|
240 | ]
|
241 | },
|
242 | {
|
243 | "given": {
|
244 | "foo": [{
|
245 | "bar": [
|
246 | {
|
247 | "qux": 2,
|
248 | "baz": 1
|
249 | },
|
250 | {
|
251 | "qux": 4,
|
252 | "baz": 3
|
253 | }
|
254 | ]
|
255 | },
|
256 | {
|
257 | "bar": [
|
258 | {
|
259 | "qux": 6,
|
260 | "baz": 5
|
261 | },
|
262 | {
|
263 | "qux": 8,
|
264 | "baz": 7
|
265 | }
|
266 | ]
|
267 | }
|
268 | ]
|
269 | },
|
270 | "cases": [
|
271 | {
|
272 | "expression": "foo",
|
273 | "result": [{"bar": [{"qux": 2, "baz": 1}, {"qux": 4, "baz": 3}]},
|
274 | {"bar": [{"qux": 6, "baz": 5}, {"qux": 8, "baz": 7}]}]
|
275 | },
|
276 | {
|
277 | "expression": "foo[]",
|
278 | "result": [{"bar": [{"qux": 2, "baz": 1}, {"qux": 4, "baz": 3}]},
|
279 | {"bar": [{"qux": 6, "baz": 5}, {"qux": 8, "baz": 7}]}]
|
280 | },
|
281 | {
|
282 | "expression": "foo[].bar",
|
283 | "result": [[{"qux": 2, "baz": 1}, {"qux": 4, "baz": 3}],
|
284 | [{"qux": 6, "baz": 5}, {"qux": 8, "baz": 7}]]
|
285 | },
|
286 | {
|
287 | "expression": "foo[].bar[]",
|
288 | "result": [{"qux": 2, "baz": 1}, {"qux": 4, "baz": 3},
|
289 | {"qux": 6, "baz": 5}, {"qux": 8, "baz": 7}]
|
290 | },
|
291 | {
|
292 | "expression": "foo[].bar[].[baz, qux]",
|
293 | "result": [[1, 2], [3, 4], [5, 6], [7, 8]]
|
294 | },
|
295 | {
|
296 | "expression": "foo[].bar[].[baz]",
|
297 | "result": [[1], [3], [5], [7]]
|
298 | },
|
299 | {
|
300 | "expression": "foo[].bar[].[baz, qux][]",
|
301 | "result": [1, 2, 3, 4, 5, 6, 7, 8]
|
302 | }
|
303 | ]
|
304 | },
|
305 | {
|
306 | "given": {
|
307 | "foo": {
|
308 | "baz": [
|
309 | {
|
310 | "bar": "abc"
|
311 | }, {
|
312 | "bar": "def"
|
313 | }
|
314 | ],
|
315 | "qux": ["zero"]
|
316 | }
|
317 | },
|
318 | "cases": [
|
319 | {
|
320 | "expression": "foo.[baz[*].bar, qux[0]]",
|
321 | "result": [["abc", "def"], "zero"]
|
322 | }
|
323 | ]
|
324 | },
|
325 | {
|
326 | "given": {
|
327 | "foo": {
|
328 | "baz": [
|
329 | {
|
330 | "bar": "a",
|
331 | "bam": "b",
|
332 | "boo": "c"
|
333 | }, {
|
334 | "bar": "d",
|
335 | "bam": "e",
|
336 | "boo": "f"
|
337 | }
|
338 | ],
|
339 | "qux": ["zero"]
|
340 | }
|
341 | },
|
342 | "cases": [
|
343 | {
|
344 | "expression": "foo.[baz[*].[bar, boo], qux[0]]",
|
345 | "result": [[["a", "c" ], ["d", "f" ]], "zero"]
|
346 | }
|
347 | ]
|
348 | },
|
349 | {
|
350 | "given": {
|
351 | "foo": {
|
352 | "baz": [
|
353 | {
|
354 | "bar": "a",
|
355 | "bam": "b",
|
356 | "boo": "c"
|
357 | }, {
|
358 | "bar": "d",
|
359 | "bam": "e",
|
360 | "boo": "f"
|
361 | }
|
362 | ],
|
363 | "qux": ["zero"]
|
364 | }
|
365 | },
|
366 | "cases": [
|
367 | {
|
368 | "expression": "foo.[baz[*].not_there || baz[*].bar, qux[0]]",
|
369 | "result": [["a", "d"], "zero"]
|
370 | }
|
371 | ]
|
372 | },
|
373 | {
|
374 | "given": {"type": "object"},
|
375 | "cases": [
|
376 | {
|
377 | "comment": "Nested multiselect",
|
378 | "expression": "[[*],*]",
|
379 | "result": [null, ["object"]]
|
380 | }
|
381 | ]
|
382 | },
|
383 | {
|
384 | "given": [],
|
385 | "cases": [
|
386 | {
|
387 | "comment": "Nested multiselect",
|
388 | "expression": "[[*]]",
|
389 | "result": [[]]
|
390 | }
|
391 | ]
|
392 | }
|
393 | ]
|