123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692 |
- [{
- "comment": "Dot syntax",
- "given": {"type": "object"},
- "cases": [
- {
- "expression": "foo.bar",
- "result": null
- },
- {
- "expression": "foo",
- "result": null
- },
- {
- "expression": "foo.1",
- "error": "syntax"
- },
- {
- "expression": "foo.-11",
- "error": "syntax"
- },
- {
- "expression": "foo.",
- "error": "syntax"
- },
- {
- "expression": ".foo",
- "error": "syntax"
- },
- {
- "expression": "foo..bar",
- "error": "syntax"
- },
- {
- "expression": "foo.bar.",
- "error": "syntax"
- },
- {
- "expression": "foo[.]",
- "error": "syntax"
- }
- ]
- },
- {
- "comment": "Simple token errors",
- "given": {"type": "object"},
- "cases": [
- {
- "expression": ".",
- "error": "syntax"
- },
- {
- "expression": ":",
- "error": "syntax"
- },
- {
- "expression": ",",
- "error": "syntax"
- },
- {
- "expression": "]",
- "error": "syntax"
- },
- {
- "expression": "[",
- "error": "syntax"
- },
- {
- "expression": "}",
- "error": "syntax"
- },
- {
- "expression": "{",
- "error": "syntax"
- },
- {
- "expression": ")",
- "error": "syntax"
- },
- {
- "expression": "(",
- "error": "syntax"
- },
- {
- "expression": "((&",
- "error": "syntax"
- },
- {
- "expression": "a[",
- "error": "syntax"
- },
- {
- "expression": "a]",
- "error": "syntax"
- },
- {
- "expression": "a][",
- "error": "syntax"
- },
- {
- "expression": "!",
- "error": "syntax"
- },
- {
- "expression": "@=",
- "error": "syntax"
- },
- {
- "expression": "@``",
- "error": "syntax"
- }
- ]
- },
- {
- "comment": "Boolean syntax errors",
- "given": {"type": "object"},
- "cases": [
- {
- "expression": "![!(!",
- "error": "syntax"
- }
- ]
- },
- {
- "comment": "Paren syntax errors",
- "given": {},
- "cases": [
- {
- "comment": "missing closing paren",
- "expression": "(@",
- "error": "syntax"
- }
- ]
- },
- {
- "comment": "Function syntax errors",
- "given": {},
- "cases": [
- {
- "comment": "invalid start of function",
- "expression": "@(foo)",
- "error": "syntax"
- },
- {
- "comment": "function names cannot be quoted",
- "expression": "\"foo\"(bar)",
- "error": "syntax"
- }
- ]
- },
- {
- "comment": "Wildcard syntax",
- "given": {"type": "object"},
- "cases": [
- {
- "expression": "*",
- "result": ["object"]
- },
- {
- "expression": "*.*",
- "result": []
- },
- {
- "expression": "*.foo",
- "result": []
- },
- {
- "expression": "*[0]",
- "result": []
- },
- {
- "expression": ".*",
- "error": "syntax"
- },
- {
- "expression": "*foo",
- "error": "syntax"
- },
- {
- "expression": "*0",
- "error": "syntax"
- },
- {
- "expression": "foo[*]bar",
- "error": "syntax"
- },
- {
- "expression": "foo[*]*",
- "error": "syntax"
- }
- ]
- },
- {
- "comment": "Flatten syntax",
- "given": {"type": "object"},
- "cases": [
- {
- "expression": "[]",
- "result": null
- }
- ]
- },
- {
- "comment": "Simple bracket syntax",
- "given": {"type": "object"},
- "cases": [
- {
- "expression": "[0]",
- "result": null
- },
- {
- "expression": "[*]",
- "result": null
- },
- {
- "expression": "*.[0]",
- "error": "syntax"
- },
- {
- "expression": "*.[\"0\"]",
- "result": [[null]]
- },
- {
- "expression": "[*].bar",
- "result": null
- },
- {
- "expression": "[*][0]",
- "result": null
- },
- {
- "expression": "foo[#]",
- "error": "syntax"
- },
- {
- "comment": "missing rbracket for led wildcard index",
- "expression": "led[*",
- "error": "syntax"
- }
- ]
- },
- {
- "comment": "slice syntax",
- "given": {},
- "cases": [
- {
- "comment": "slice expected colon or rbracket",
- "expression": "[:@]",
- "error": "syntax"
- },
- {
- "comment": "slice has too many colons",
- "expression": "[:::]",
- "error": "syntax"
- },
- {
- "comment": "slice expected number",
- "expression": "[:@:]",
- "error": "syntax"
- },
- {
- "comment": "slice expected number of colon",
- "expression": "[:1@]",
- "error": "syntax"
- }
- ]
- },
- {
- "comment": "Multi-select list syntax",
- "given": {"type": "object"},
- "cases": [
- {
- "expression": "foo[0]",
- "result": null
- },
- {
- "comment": "Valid multi-select of a list",
- "expression": "foo[0, 1]",
- "error": "syntax"
- },
- {
- "expression": "foo.[0]",
- "error": "syntax"
- },
- {
- "expression": "foo.[*]",
- "result": null
- },
- {
- "comment": "Multi-select of a list with trailing comma",
- "expression": "foo[0, ]",
- "error": "syntax"
- },
- {
- "comment": "Multi-select of a list with trailing comma and no close",
- "expression": "foo[0,",
- "error": "syntax"
- },
- {
- "comment": "Multi-select of a list with trailing comma and no close",
- "expression": "foo.[a",
- "error": "syntax"
- },
- {
- "comment": "Multi-select of a list with extra comma",
- "expression": "foo[0,, 1]",
- "error": "syntax"
- },
- {
- "comment": "Multi-select of a list using an identifier index",
- "expression": "foo[abc]",
- "error": "syntax"
- },
- {
- "comment": "Multi-select of a list using identifier indices",
- "expression": "foo[abc, def]",
- "error": "syntax"
- },
- {
- "comment": "Multi-select of a list using an identifier index",
- "expression": "foo[abc, 1]",
- "error": "syntax"
- },
- {
- "comment": "Multi-select of a list using an identifier index with trailing comma",
- "expression": "foo[abc, ]",
- "error": "syntax"
- },
- {
- "comment": "Valid multi-select of a hash using an identifier index",
- "expression": "foo.[abc]",
- "result": null
- },
- {
- "comment": "Valid multi-select of a hash",
- "expression": "foo.[abc, def]",
- "result": null
- },
- {
- "comment": "Multi-select of a hash using a numeric index",
- "expression": "foo.[abc, 1]",
- "error": "syntax"
- },
- {
- "comment": "Multi-select of a hash with a trailing comma",
- "expression": "foo.[abc, ]",
- "error": "syntax"
- },
- {
- "comment": "Multi-select of a hash with extra commas",
- "expression": "foo.[abc,, def]",
- "error": "syntax"
- },
- {
- "comment": "Multi-select of a hash using number indices",
- "expression": "foo.[0, 1]",
- "error": "syntax"
- }
- ]
- },
- {
- "comment": "Multi-select hash syntax",
- "given": {"type": "object"},
- "cases": [
- {
- "comment": "No key or value",
- "expression": "a{}",
- "error": "syntax"
- },
- {
- "comment": "No closing token",
- "expression": "a{",
- "error": "syntax"
- },
- {
- "comment": "Not a key value pair",
- "expression": "a{foo}",
- "error": "syntax"
- },
- {
- "comment": "Missing value and closing character",
- "expression": "a{foo:",
- "error": "syntax"
- },
- {
- "comment": "Missing closing character",
- "expression": "a{foo: 0",
- "error": "syntax"
- },
- {
- "comment": "Missing value",
- "expression": "a{foo:}",
- "error": "syntax"
- },
- {
- "comment": "Trailing comma and no closing character",
- "expression": "a{foo: 0, ",
- "error": "syntax"
- },
- {
- "comment": "Missing value with trailing comma",
- "expression": "a{foo: ,}",
- "error": "syntax"
- },
- {
- "comment": "Accessing Array using an identifier",
- "expression": "a{foo: bar}",
- "error": "syntax"
- },
- {
- "expression": "a{foo: 0}",
- "error": "syntax"
- },
- {
- "comment": "Missing key-value pair",
- "expression": "a.{}",
- "error": "syntax"
- },
- {
- "comment": "Not a key-value pair",
- "expression": "a.{foo}",
- "error": "syntax"
- },
- {
- "comment": "Missing value",
- "expression": "a.{foo:}",
- "error": "syntax"
- },
- {
- "comment": "Missing value with trailing comma",
- "expression": "a.{foo: ,}",
- "error": "syntax"
- },
- {
- "comment": "Valid multi-select hash extraction",
- "expression": "a.{foo: bar}",
- "result": null
- },
- {
- "comment": "Valid multi-select hash extraction",
- "expression": "a.{foo: bar, baz: bam}",
- "result": null
- },
- {
- "comment": "Trailing comma",
- "expression": "a.{foo: bar, }",
- "error": "syntax"
- },
- {
- "comment": "Missing key in second key-value pair",
- "expression": "a.{foo: bar, baz}",
- "error": "syntax"
- },
- {
- "comment": "Missing value in second key-value pair",
- "expression": "a.{foo: bar, baz:}",
- "error": "syntax"
- },
- {
- "comment": "Trailing comma",
- "expression": "a.{foo: bar, baz: bam, }",
- "error": "syntax"
- },
- {
- "comment": "Nested multi select",
- "expression": "{\"\\\\\":{\" \":*}}",
- "result": {"\\": {" ": ["object"]}}
- },
- {
- "comment": "Missing closing } after a valid nud",
- "expression": "{a: @",
- "error": "syntax"
- }
- ]
- },
- {
- "comment": "Or expressions",
- "given": {"type": "object"},
- "cases": [
- {
- "expression": "foo || bar",
- "result": null
- },
- {
- "expression": "foo ||",
- "error": "syntax"
- },
- {
- "expression": "foo.|| bar",
- "error": "syntax"
- },
- {
- "expression": " || foo",
- "error": "syntax"
- },
- {
- "expression": "foo || || foo",
- "error": "syntax"
- },
- {
- "expression": "foo.[a || b]",
- "result": null
- },
- {
- "expression": "foo.[a ||]",
- "error": "syntax"
- },
- {
- "expression": "\"foo",
- "error": "syntax"
- }
- ]
- },
- {
- "comment": "Filter expressions",
- "given": {"type": "object"},
- "cases": [
- {
- "expression": "foo[?bar==`\"baz\"`]",
- "result": null
- },
- {
- "expression": "foo[? bar == `\"baz\"` ]",
- "result": null
- },
- {
- "expression": "foo[ ?bar==`\"baz\"`]",
- "error": "syntax"
- },
- {
- "expression": "foo[?bar==]",
- "error": "syntax"
- },
- {
- "expression": "foo[?==]",
- "error": "syntax"
- },
- {
- "expression": "foo[?==bar]",
- "error": "syntax"
- },
- {
- "expression": "foo[?bar==baz?]",
- "error": "syntax"
- },
- {
- "expression": "foo[?a.b.c==d.e.f]",
- "result": null
- },
- {
- "expression": "foo[?bar==`[0, 1, 2]`]",
- "result": null
- },
- {
- "expression": "foo[?bar==`[\"a\", \"b\", \"c\"]`]",
- "result": null
- },
- {
- "comment": "Literal char not escaped",
- "expression": "foo[?bar==`[\"foo`bar\"]`]",
- "error": "syntax"
- },
- {
- "comment": "Literal char escaped",
- "expression": "foo[?bar==`[\"foo\\`bar\"]`]",
- "result": null
- },
- {
- "comment": "Unknown comparator",
- "expression": "foo[?bar<>baz]",
- "error": "syntax"
- },
- {
- "comment": "Unknown comparator",
- "expression": "foo[?bar^baz]",
- "error": "syntax"
- },
- {
- "expression": "foo[bar==baz]",
- "error": "syntax"
- },
- {
- "comment": "Quoted identifier in filter expression no spaces",
- "expression": "[?\"\\\\\">`\"foo\"`]",
- "result": null
- },
- {
- "comment": "Quoted identifier in filter expression with spaces",
- "expression": "[?\"\\\\\" > `\"foo\"`]",
- "result": null
- }
- ]
- },
- {
- "comment": "Filter expression errors",
- "given": {"type": "object"},
- "cases": [
- {
- "expression": "bar.`\"anything\"`",
- "error": "syntax"
- },
- {
- "expression": "bar.baz.noexists.`\"literal\"`",
- "error": "syntax"
- },
- {
- "comment": "Literal wildcard projection",
- "expression": "foo[*].`\"literal\"`",
- "error": "syntax"
- },
- {
- "expression": "foo[*].name.`\"literal\"`",
- "error": "syntax"
- },
- {
- "expression": "foo[].name.`\"literal\"`",
- "error": "syntax"
- },
- {
- "expression": "foo[].name.`\"literal\"`.`\"subliteral\"`",
- "error": "syntax"
- },
- {
- "comment": "Projecting a literal onto an empty list",
- "expression": "foo[*].name.noexist.`\"literal\"`",
- "error": "syntax"
- },
- {
- "expression": "foo[].name.noexist.`\"literal\"`",
- "error": "syntax"
- },
- {
- "expression": "twolen[*].`\"foo\"`",
- "error": "syntax"
- },
- {
- "comment": "Two level projection of a literal",
- "expression": "twolen[*].threelen[*].`\"bar\"`",
- "error": "syntax"
- },
- {
- "comment": "Two level flattened projection of a literal",
- "expression": "twolen[].threelen[].`\"bar\"`",
- "error": "syntax"
- },
- {
- "comment": "expects closing ]",
- "expression": "foo[? @ | @",
- "error": "syntax"
- }
- ]
- },
- {
- "comment": "Identifiers",
- "given": {"type": "object"},
- "cases": [
- {
- "expression": "foo",
- "result": null
- },
- {
- "expression": "\"foo\"",
- "result": null
- },
- {
- "expression": "\"\\\\\"",
- "result": null
- },
- {
- "expression": "\"\\u\"",
- "error": "syntax"
- }
- ]
- },
- {
- "comment": "Combined syntax",
- "given": [],
- "cases": [
- {
- "expression": "*||*|*|*",
- "result": []
- },
- {
- "expression": "*[]||[*]",
- "result": []
- },
- {
- "expression": "[*.*]",
- "result": [[]]
- }
- ]
- }
- ]
|