UNPKG

13.8 kBJSONView Raw
1[{
2 "comment": "Dot syntax",
3 "given": {"type": "object"},
4 "cases": [
5 {
6 "expression": "foo.bar",
7 "result": null
8 },
9 {
10 "expression": "foo.1",
11 "error": "syntax"
12 },
13 {
14 "expression": "foo.-11",
15 "error": "syntax"
16 },
17 {
18 "expression": "foo",
19 "result": null
20 },
21 {
22 "expression": "foo.",
23 "error": "syntax"
24 },
25 {
26 "expression": "foo.",
27 "error": "syntax"
28 },
29 {
30 "expression": ".foo",
31 "error": "syntax"
32 },
33 {
34 "expression": "foo..bar",
35 "error": "syntax"
36 },
37 {
38 "expression": "foo.bar.",
39 "error": "syntax"
40 },
41 {
42 "expression": "foo[.]",
43 "error": "syntax"
44 }
45 ]
46},
47 {
48 "comment": "Simple token errors",
49 "given": {"type": "object"},
50 "cases": [
51 {
52 "expression": ".",
53 "error": "syntax"
54 },
55 {
56 "expression": ":",
57 "error": "syntax"
58 },
59 {
60 "expression": ",",
61 "error": "syntax"
62 },
63 {
64 "expression": "]",
65 "error": "syntax"
66 },
67 {
68 "expression": "[",
69 "error": "syntax"
70 },
71 {
72 "expression": "}",
73 "error": "syntax"
74 },
75 {
76 "expression": "{",
77 "error": "syntax"
78 },
79 {
80 "expression": ")",
81 "error": "syntax"
82 },
83 {
84 "expression": "(",
85 "error": "syntax"
86 },
87 {
88 "expression": "a[",
89 "error": "syntax"
90 },
91 {
92 "expression": "a]",
93 "error": "syntax"
94 },
95 {
96 "expression": "a][",
97 "error": "syntax"
98 }
99 ]
100 },
101 {
102 "comment": "Wildcard syntax",
103 "given": {"type": "object"},
104 "cases": [
105 {
106 "expression": "*",
107 "result": ["object"]
108 },
109 {
110 "expression": "*.*",
111 "result": []
112 },
113 {
114 "expression": "*.foo",
115 "result": []
116 },
117 {
118 "expression": "*[0]",
119 "result": []
120 },
121 {
122 "expression": ".*",
123 "error": "syntax"
124 },
125 {
126 "expression": "*foo",
127 "error": "syntax"
128 },
129 {
130 "expression": "*0",
131 "error": "syntax"
132 },
133 {
134 "expression": "foo[*]bar",
135 "error": "syntax"
136 },
137 {
138 "expression": "foo[*]*",
139 "error": "syntax"
140 }
141 ]
142 },
143 {
144 "comment": "Flatten syntax",
145 "given": {"type": "object"},
146 "cases": [
147 {
148 "expression": "[]",
149 "result": null
150 }
151 ]
152 },
153 {
154 "comment": "Simple bracket syntax",
155 "given": {"type": "object"},
156 "cases": [
157 {
158 "expression": "[0]",
159 "result": null
160 },
161 {
162 "expression": "[*]",
163 "result": null
164 },
165 {
166 "expression": "*.[0]",
167 "error": "syntax"
168 },
169 {
170 "expression": "*.[\"0\"]",
171 "result": [[null]]
172 },
173 {
174 "expression": "[*].bar",
175 "result": null
176 },
177 {
178 "expression": "[*][0]",
179 "result": null
180 },
181 {
182 "expression": "foo[#]",
183 "error": "syntax"
184 }
185 ]
186 },
187 {
188 "comment": "Multi-select list syntax",
189 "given": {"type": "object"},
190 "cases": [
191 {
192 "expression": "foo[0]",
193 "result": null
194 },
195 {
196 "comment": "Valid multi-select of a list",
197 "expression": "foo[0, 1]",
198 "error": "syntax"
199 },
200 {
201 "expression": "foo.[0]",
202 "error": "syntax"
203 },
204 {
205 "expression": "foo.[*]",
206 "result": null
207 },
208 {
209 "comment": "Multi-select of a list with trailing comma",
210 "expression": "foo[0, ]",
211 "error": "syntax"
212 },
213 {
214 "comment": "Multi-select of a list with trailing comma and no close",
215 "expression": "foo[0,",
216 "error": "syntax"
217 },
218 {
219 "comment": "Multi-select of a list with trailing comma and no close",
220 "expression": "foo.[a",
221 "error": "syntax"
222 },
223 {
224 "comment": "Multi-select of a list with extra comma",
225 "expression": "foo[0,, 1]",
226 "error": "syntax"
227 },
228 {
229 "comment": "Multi-select of a list using an identifier index",
230 "expression": "foo[abc]",
231 "error": "syntax"
232 },
233 {
234 "comment": "Multi-select of a list using identifier indices",
235 "expression": "foo[abc, def]",
236 "error": "syntax"
237 },
238 {
239 "comment": "Multi-select of a list using an identifier index",
240 "expression": "foo[abc, 1]",
241 "error": "syntax"
242 },
243 {
244 "comment": "Multi-select of a list using an identifier index with trailing comma",
245 "expression": "foo[abc, ]",
246 "error": "syntax"
247 },
248 {
249 "comment": "Valid multi-select of a hash using an identifier index",
250 "expression": "foo.[abc]",
251 "result": null
252 },
253 {
254 "comment": "Valid multi-select of a hash",
255 "expression": "foo.[abc, def]",
256 "result": null
257 },
258 {
259 "comment": "Multi-select of a hash using a numeric index",
260 "expression": "foo.[abc, 1]",
261 "error": "syntax"
262 },
263 {
264 "comment": "Multi-select of a hash with a trailing comma",
265 "expression": "foo.[abc, ]",
266 "error": "syntax"
267 },
268 {
269 "comment": "Multi-select of a hash with extra commas",
270 "expression": "foo.[abc,, def]",
271 "error": "syntax"
272 },
273 {
274 "comment": "Multi-select of a hash using number indices",
275 "expression": "foo.[0, 1]",
276 "error": "syntax"
277 }
278 ]
279 },
280 {
281 "comment": "Multi-select hash syntax",
282 "given": {"type": "object"},
283 "cases": [
284 {
285 "comment": "No key or value",
286 "expression": "a{}",
287 "error": "syntax"
288 },
289 {
290 "comment": "No closing token",
291 "expression": "a{",
292 "error": "syntax"
293 },
294 {
295 "comment": "Not a key value pair",
296 "expression": "a{foo}",
297 "error": "syntax"
298 },
299 {
300 "comment": "Missing value and closing character",
301 "expression": "a{foo:",
302 "error": "syntax"
303 },
304 {
305 "comment": "Missing closing character",
306 "expression": "a{foo: 0",
307 "error": "syntax"
308 },
309 {
310 "comment": "Missing value",
311 "expression": "a{foo:}",
312 "error": "syntax"
313 },
314 {
315 "comment": "Trailing comma and no closing character",
316 "expression": "a{foo: 0, ",
317 "error": "syntax"
318 },
319 {
320 "comment": "Missing value with trailing comma",
321 "expression": "a{foo: ,}",
322 "error": "syntax"
323 },
324 {
325 "comment": "Accessing Array using an identifier",
326 "expression": "a{foo: bar}",
327 "error": "syntax"
328 },
329 {
330 "expression": "a{foo: 0}",
331 "error": "syntax"
332 },
333 {
334 "comment": "Missing key-value pair",
335 "expression": "a.{}",
336 "error": "syntax"
337 },
338 {
339 "comment": "Not a key-value pair",
340 "expression": "a.{foo}",
341 "error": "syntax"
342 },
343 {
344 "comment": "Missing value",
345 "expression": "a.{foo:}",
346 "error": "syntax"
347 },
348 {
349 "comment": "Missing value with trailing comma",
350 "expression": "a.{foo: ,}",
351 "error": "syntax"
352 },
353 {
354 "comment": "Valid multi-select hash extraction",
355 "expression": "a.{foo: bar}",
356 "result": null
357 },
358 {
359 "comment": "Valid multi-select hash extraction",
360 "expression": "a.{foo: bar, baz: bam}",
361 "result": null
362 },
363 {
364 "comment": "Trailing comma",
365 "expression": "a.{foo: bar, }",
366 "error": "syntax"
367 },
368 {
369 "comment": "Missing key in second key-value pair",
370 "expression": "a.{foo: bar, baz}",
371 "error": "syntax"
372 },
373 {
374 "comment": "Missing value in second key-value pair",
375 "expression": "a.{foo: bar, baz:}",
376 "error": "syntax"
377 },
378 {
379 "comment": "Trailing comma",
380 "expression": "a.{foo: bar, baz: bam, }",
381 "error": "syntax"
382 },
383 {
384 "comment": "Nested multi select",
385 "expression": "{\"\\\\\":{\" \":*}}",
386 "result": {"\\": {" ": ["object"]}}
387 }
388 ]
389 },
390 {
391 "comment": "Or expressions",
392 "given": {"type": "object"},
393 "cases": [
394 {
395 "expression": "foo || bar",
396 "result": null
397 },
398 {
399 "expression": "foo ||",
400 "error": "syntax"
401 },
402 {
403 "expression": "foo.|| bar",
404 "error": "syntax"
405 },
406 {
407 "expression": " || foo",
408 "error": "syntax"
409 },
410 {
411 "expression": "foo || || foo",
412 "error": "syntax"
413 },
414 {
415 "expression": "foo.[a || b]",
416 "result": null
417 },
418 {
419 "expression": "foo.[a ||]",
420 "error": "syntax"
421 },
422 {
423 "expression": "\"foo",
424 "error": "syntax"
425 }
426 ]
427 },
428 {
429 "comment": "Filter expressions",
430 "given": {"type": "object"},
431 "cases": [
432 {
433 "expression": "foo[?bar==`baz`]",
434 "result": null
435 },
436 {
437 "expression": "foo[? bar == `baz` ]",
438 "result": null
439 },
440 {
441 "expression": "foo[ ?bar==`baz`]",
442 "error": "syntax"
443 },
444 {
445 "expression": "foo[?bar==]",
446 "error": "syntax"
447 },
448 {
449 "expression": "foo[?==]",
450 "error": "syntax"
451 },
452 {
453 "expression": "foo[?==bar]",
454 "error": "syntax"
455 },
456 {
457 "expression": "foo[?bar==baz?]",
458 "error": "syntax"
459 },
460 {
461 "expression": "foo[?a.b.c==d.e.f]",
462 "result": null
463 },
464 {
465 "expression": "foo[?bar==`[0, 1, 2]`]",
466 "result": null
467 },
468 {
469 "expression": "foo[?bar==`[\"a\", \"b\", \"c\"]`]",
470 "result": null
471 },
472 {
473 "comment": "Literal char not escaped",
474 "expression": "foo[?bar==`[\"foo`bar\"]`]",
475 "error": "syntax"
476 },
477 {
478 "comment": "Literal char escaped",
479 "expression": "foo[?bar==`[\"foo\\`bar\"]`]",
480 "result": null
481 },
482 {
483 "comment": "Unknown comparator",
484 "expression": "foo[?bar<>baz]",
485 "error": "syntax"
486 },
487 {
488 "comment": "Unknown comparator",
489 "expression": "foo[?bar^baz]",
490 "error": "syntax"
491 },
492 {
493 "expression": "foo[bar==baz]",
494 "error": "syntax"
495 },
496 {
497 "comment": "Quoted identifier in filter expression no spaces",
498 "expression": "[?\"\\\\\">`\"foo\"`]",
499 "result": null
500 },
501 {
502 "comment": "Quoted identifier in filter expression with spaces",
503 "expression": "[?\"\\\\\" > `\"foo\"`]",
504 "result": null
505 }
506 ]
507 },
508 {
509 "comment": "Filter expression errors",
510 "given": {"type": "object"},
511 "cases": [
512 {
513 "expression": "bar.`anything`",
514 "error": "syntax"
515 },
516 {
517 "expression": "bar.`\"anything\"`",
518 "error": "syntax"
519 },
520 {
521 "expression": "bar.baz.noexists.`literal`",
522 "error": "syntax"
523 },
524 {
525 "comment": "Literal wildcard projection",
526 "expression": "foo[*].`literal`",
527 "error": "syntax"
528 },
529 {
530 "expression": "foo[*].name.`literal`",
531 "error": "syntax"
532 },
533 {
534 "expression": "foo[].name.`literal`",
535 "error": "syntax"
536 },
537 {
538 "expression": "foo[].name.`literal`.`subliteral`",
539 "error": "syntax"
540 },
541 {
542 "comment": "Projecting a literal onto an empty list",
543 "expression": "foo[*].name.noexist.`literal`",
544 "error": "syntax"
545 },
546 {
547 "expression": "foo[].name.noexist.`literal`",
548 "error": "syntax"
549 },
550 {
551 "expression": "twolen[*].`foo`",
552 "error": "syntax"
553 },
554 {
555 "comment": "Two level projection of a literal",
556 "expression": "twolen[*].threelen[*].`bar`",
557 "error": "syntax"
558 },
559 {
560 "comment": "Two level flattened projection of a literal",
561 "expression": "twolen[].threelen[].`bar`",
562 "error": "syntax"
563 }
564 ]
565 },
566 {
567 "comment": "Identifiers",
568 "given": {"type": "object"},
569 "cases": [
570 {
571 "expression": "foo",
572 "result": null
573 },
574 {
575 "expression": "\"foo\"",
576 "result": null
577 },
578 {
579 "expression": "\"\\\\\"",
580 "result": null
581 }
582 ]
583 },
584 {
585 "comment": "Literals",
586 "given": {"type": "object"},
587 "cases": [
588 {
589 "expression": "`foo`",
590 "result": "foo"
591 },
592 {
593 "comment": "Literal with leading whitespace",
594 "expression": "` {\"foo\": true}`",
595 "result": {"foo": true}
596 },
597 {
598 "comment": "Literal with trailing whitespace",
599 "expression": "`{\"foo\": true} `",
600 "result": {"foo": true}
601 },
602 {
603 "comment": "Literal on RHS of subexpr not allowed",
604 "expression": "foo.`bar`",
605 "error": "syntax"
606 }
607 ]
608 },
609 {
610 "comment": "Combined syntax",
611 "given": [],
612 "cases": [
613 {
614 "expression": "*||*|*|*",
615 "result": null
616 },
617 {
618 "expression": "*[]||[*]",
619 "result": []
620 },
621 {
622 "expression": "[*.*]",
623 "result": [null]
624 }
625 ]
626 }
627]