1
+ [
2
+ {
3
+ "given" : {
4
+ "search_for" : " foo" ,
5
+ "people" : [
6
+ {
7
+ "name" : " a"
8
+ },
9
+ {
10
+ "name" : " b"
11
+ },
12
+ {
13
+ "name" : " c"
14
+ },
15
+ {
16
+ "name" : " foo"
17
+ },
18
+ {
19
+ "name" : " bar"
20
+ },
21
+ {
22
+ "name" : " baz"
23
+ },
24
+ {
25
+ "name" : " qux"
26
+ },
27
+ {
28
+ "name" : " x"
29
+ },
30
+ {
31
+ "name" : " y"
32
+ },
33
+ {
34
+ "name" : " z"
35
+ }
36
+ ]
37
+ },
38
+ "cases" : [
39
+ {
40
+ "description" : " Let function with filters" ,
41
+ "expression" : " let({search_for: search_for}, &people[?name==search_for].name | [0])" ,
42
+ "result" : " foo"
43
+ }
44
+ ]
45
+ },
46
+ {
47
+ "given" : {
48
+ "a" : {
49
+ "mylist" : [
50
+ {
51
+ "l1" : " 1" ,
52
+ "result" : " foo"
53
+ },
54
+ {
55
+ "l2" : " 2" ,
56
+ "result" : " bar"
57
+ },
58
+ {
59
+ "l1" : " 8" ,
60
+ "l2" : " 9"
61
+ },
62
+ {
63
+ "l1" : " 8" ,
64
+ "l2" : " 9"
65
+ }
66
+ ],
67
+ "level2" : " 2"
68
+ },
69
+ "level1" : " 1" ,
70
+ "nested" : {
71
+ "a" : {
72
+ "b" : {
73
+ "c" : {
74
+ "fourth" : " fourth"
75
+ },
76
+ "third" : " third"
77
+ },
78
+ "second" : " second"
79
+ },
80
+ "first" : " first"
81
+ },
82
+ "precedence" : {
83
+ "a" : {
84
+ "b" : {
85
+ "c" : {
86
+ "variable" : " fourth"
87
+ },
88
+ "variable" : " third" ,
89
+ "other" : " y"
90
+ },
91
+ "variable" : " second" ,
92
+ "other" : " x"
93
+ },
94
+ "variable" : " first" ,
95
+ "other" : " w"
96
+ }
97
+ },
98
+ "cases" : [
99
+ {
100
+ "description" : " Basic let from scope" ,
101
+ "expression" : " let({level1: level1}, &a.[level2, level1])" ,
102
+ "result" : [
103
+ " 2" ,
104
+ " 1"
105
+ ]
106
+ },
107
+ {
108
+ "description" : " Current object has precedence" ,
109
+ "expression" : " let({level1: `\" other\" `}, &level1)" ,
110
+ "result" : " 1"
111
+ },
112
+ {
113
+ "description" : " No scope specified using literal hash" ,
114
+ "expression" : " let(`{}`, &a.level2)" ,
115
+ "result" : " 2"
116
+ },
117
+ {
118
+ "description" : " Arbitrary variable added" ,
119
+ "expression" : " let({foo: `\" anything\" `}, &[level1, foo])" ,
120
+ "result" : [
121
+ " 1" ,
122
+ " anything"
123
+ ]
124
+ },
125
+ {
126
+ "description" : " Basic let from current object" ,
127
+ "expression" : " let({other: level1}, &level1)" ,
128
+ "result" : " 1"
129
+ },
130
+ {
131
+ "description" : " Nested let function with filters" ,
132
+ "expression" : " let({level1: level1}, &a.[mylist[?l1==level1].result, let({level2: level2}, &mylist[?l2==level2].result)])[]" ,
133
+ "result" : [
134
+ " foo" ,
135
+ " bar"
136
+ ]
137
+ },
138
+ {
139
+ "description" : " Nested let function with filters with literal scope binding" ,
140
+ "expression" : " let(`{\" level1\" : \" 1\" }`, &a.[mylist[?l1==level1].result, let({level2: level2}, &mylist[?l2==level2].result)])[]" ,
141
+ "result" : [
142
+ " foo" ,
143
+ " bar"
144
+ ]
145
+ },
146
+ {
147
+ "description" : " Nested let functions" ,
148
+ "expression" : " nested.let({level1: first}, &a.let({level2: second}, &b.let({level3: third}, &c.{first: level1, second: level2, third: level3, fourth: fourth})))" ,
149
+ "result" : {
150
+ "first" : " first" ,
151
+ "second" : " second" ,
152
+ "third" : " third" ,
153
+ "fourth" : " fourth"
154
+ }
155
+ },
156
+ {
157
+ "description" : " Precedence of lexical vars from scope object" ,
158
+ "expression" : " precedence.let({other: other}, &a.let({other: other}, &b.let({other: other}, &c.{other: other})))" ,
159
+ "result" : {
160
+ "other" : " y"
161
+ }
162
+ },
163
+ {
164
+ "description" : " Precedence of lexical vars from current object" ,
165
+ "expression" : " precedence.let({variable: variable}, &a.let({variable: variable}, &b.let({variable: variable}, &c.let({variable: `\" override\" `}, &variable))))" ,
166
+ "result" : " fourth"
167
+ }
168
+ ]
169
+ }
170
+ ]
0 commit comments