r - utils_test.go
1 package r
2
3 import (
4 "reflect"
5 "testing"
6
7 "vimagination.zapto.org/parser"
8 )
9
10 func TestWrapQuery(t *testing.T) {
11 tks := Tokens{
12 {
13 Token: parser.Token{
14 Type: TokenGrouping,
15 Data: "{",
16 },
17 },
18 {
19 Token: parser.Token{
20 Type: TokenIdentifier,
21 Data: "a",
22 },
23 },
24 {
25 Token: parser.Token{
26 Type: TokenGrouping,
27 Data: "}",
28 },
29 },
30 }
31 compound := &CompoundExpression{
32 Expressions: []Expression{
33 {
34 QueryExpression: &QueryExpression{
35 AssignmentExpression: &AssignmentExpression{
36 FormulaeExpression: FormulaeExpression{
37 OrExpression: &OrExpression{
38 AndExpression: AndExpression{
39 NotExpression: NotExpression{
40 RelationalExpression: RelationalExpression{
41 AdditionExpression: AdditionExpression{
42 MultiplicationExpression: MultiplicationExpression{
43 PipeOrSpecialExpression: PipeOrSpecialExpression{
44 SequenceExpression: SequenceExpression{
45 UnaryExpression: UnaryExpression{
46 ExponentiationExpression: ExponentiationExpression{
47 SubsetExpression: SubsetExpression{
48 ScopeExpression: ScopeExpression{
49 IndexOrCallExpression: IndexOrCallExpression{
50 SimpleExpression: &SimpleExpression{
51 Identifier: &tks[1],
52 Tokens: tks[1:2],
53 },
54 Tokens: tks[1:2],
55 },
56 Tokens: tks[1:2],
57 },
58 Tokens: tks[1:2],
59 },
60 Tokens: tks[1:2],
61 },
62 Tokens: tks[1:2],
63 },
64 Tokens: tks[1:2],
65 },
66 Tokens: tks[1:2],
67 },
68 Tokens: tks[1:2],
69 },
70 Tokens: tks[1:2],
71 },
72 Tokens: tks[1:2],
73 },
74 Tokens: tks[1:2],
75 },
76 Tokens: tks[1:2],
77 },
78 Tokens: tks[1:2],
79 },
80 Tokens: tks[1:2],
81 },
82 Tokens: tks[1:2],
83 },
84 Tokens: tks[1:2],
85 },
86 Tokens: tks[1:2],
87 },
88 },
89 Tokens: tks,
90 }
91 expectedOutput := QueryExpression{
92 AssignmentExpression: &AssignmentExpression{
93 FormulaeExpression: FormulaeExpression{
94 OrExpression: &OrExpression{
95 AndExpression: AndExpression{
96 NotExpression: NotExpression{
97 RelationalExpression: RelationalExpression{
98 AdditionExpression: AdditionExpression{
99 MultiplicationExpression: MultiplicationExpression{
100 PipeOrSpecialExpression: PipeOrSpecialExpression{
101 SequenceExpression: SequenceExpression{
102 UnaryExpression: UnaryExpression{
103 ExponentiationExpression: ExponentiationExpression{
104 SubsetExpression: SubsetExpression{
105 ScopeExpression: ScopeExpression{
106 IndexOrCallExpression: IndexOrCallExpression{
107 SimpleExpression: &SimpleExpression{
108 CompoundExpression: compound,
109 Tokens: tks,
110 },
111 Tokens: tks,
112 },
113 Tokens: tks,
114 },
115 Tokens: tks,
116 },
117 Tokens: tks,
118 },
119 Tokens: tks,
120 },
121 Tokens: tks,
122 },
123 Tokens: tks,
124 },
125 Tokens: tks,
126 },
127 Tokens: tks,
128 },
129 Tokens: tks,
130 },
131 Tokens: tks,
132 },
133 Tokens: tks,
134 },
135 Tokens: tks,
136 },
137 Tokens: tks,
138 },
139 Tokens: tks,
140 },
141 Tokens: tks,
142 }
143
144 for n, test := range [...]QueryWrappable{
145 compound, // 1
146 *compound, // 2
147 &SimpleExpression{ // 3
148 CompoundExpression: compound,
149 Tokens: tks,
150 },
151 SimpleExpression{ // 4
152 CompoundExpression: compound,
153 Tokens: tks,
154 },
155 &IndexOrCallExpression{ // 5
156 SimpleExpression: &SimpleExpression{
157 CompoundExpression: compound,
158 Tokens: tks,
159 },
160 Tokens: tks,
161 },
162 IndexOrCallExpression{ // 6
163 SimpleExpression: &SimpleExpression{
164 CompoundExpression: compound,
165 Tokens: tks,
166 },
167 Tokens: tks,
168 },
169 &ScopeExpression{ // 7
170 IndexOrCallExpression: IndexOrCallExpression{
171 SimpleExpression: &SimpleExpression{
172 CompoundExpression: compound,
173 Tokens: tks,
174 },
175 Tokens: tks,
176 },
177 Tokens: tks,
178 },
179 ScopeExpression{ // 8
180 IndexOrCallExpression: IndexOrCallExpression{
181 SimpleExpression: &SimpleExpression{
182 CompoundExpression: compound,
183 Tokens: tks,
184 },
185 Tokens: tks,
186 },
187 Tokens: tks,
188 },
189 &SubsetExpression{ // 9
190 ScopeExpression: ScopeExpression{
191 IndexOrCallExpression: IndexOrCallExpression{
192 SimpleExpression: &SimpleExpression{
193 CompoundExpression: compound,
194 Tokens: tks,
195 },
196 Tokens: tks,
197 },
198 Tokens: tks,
199 },
200 Tokens: tks,
201 },
202 SubsetExpression{ // 10
203 ScopeExpression: ScopeExpression{
204 IndexOrCallExpression: IndexOrCallExpression{
205 SimpleExpression: &SimpleExpression{
206 CompoundExpression: compound,
207 Tokens: tks,
208 },
209 Tokens: tks,
210 },
211 Tokens: tks,
212 },
213 Tokens: tks,
214 },
215 &ExponentiationExpression{ // 11
216 SubsetExpression: SubsetExpression{
217 ScopeExpression: ScopeExpression{
218 IndexOrCallExpression: IndexOrCallExpression{
219 SimpleExpression: &SimpleExpression{
220 CompoundExpression: compound,
221 Tokens: tks,
222 },
223 Tokens: tks,
224 },
225 Tokens: tks,
226 },
227 Tokens: tks,
228 },
229 Tokens: tks,
230 },
231 ExponentiationExpression{ // 12
232 SubsetExpression: SubsetExpression{
233 ScopeExpression: ScopeExpression{
234 IndexOrCallExpression: IndexOrCallExpression{
235 SimpleExpression: &SimpleExpression{
236 CompoundExpression: compound,
237 Tokens: tks,
238 },
239 Tokens: tks,
240 },
241 Tokens: tks,
242 },
243 Tokens: tks,
244 },
245 Tokens: tks,
246 },
247 &UnaryExpression{ // 13
248 ExponentiationExpression: ExponentiationExpression{
249 SubsetExpression: SubsetExpression{
250 ScopeExpression: ScopeExpression{
251 IndexOrCallExpression: IndexOrCallExpression{
252 SimpleExpression: &SimpleExpression{
253 CompoundExpression: compound,
254 Tokens: tks,
255 },
256 Tokens: tks,
257 },
258 Tokens: tks,
259 },
260 Tokens: tks,
261 },
262 Tokens: tks,
263 },
264 Tokens: tks,
265 },
266 UnaryExpression{ // 14
267 ExponentiationExpression: ExponentiationExpression{
268 SubsetExpression: SubsetExpression{
269 ScopeExpression: ScopeExpression{
270 IndexOrCallExpression: IndexOrCallExpression{
271 SimpleExpression: &SimpleExpression{
272 CompoundExpression: compound,
273 Tokens: tks,
274 },
275 Tokens: tks,
276 },
277 Tokens: tks,
278 },
279 Tokens: tks,
280 },
281 Tokens: tks,
282 },
283 Tokens: tks,
284 },
285 &SequenceExpression{ // 15
286 UnaryExpression: UnaryExpression{
287 ExponentiationExpression: ExponentiationExpression{
288 SubsetExpression: SubsetExpression{
289 ScopeExpression: ScopeExpression{
290 IndexOrCallExpression: IndexOrCallExpression{
291 SimpleExpression: &SimpleExpression{
292 CompoundExpression: compound,
293 Tokens: tks,
294 },
295 Tokens: tks,
296 },
297 Tokens: tks,
298 },
299 Tokens: tks,
300 },
301 Tokens: tks,
302 },
303 Tokens: tks,
304 },
305 Tokens: tks,
306 },
307 SequenceExpression{ // 16
308 UnaryExpression: UnaryExpression{
309 ExponentiationExpression: ExponentiationExpression{
310 SubsetExpression: SubsetExpression{
311 ScopeExpression: ScopeExpression{
312 IndexOrCallExpression: IndexOrCallExpression{
313 SimpleExpression: &SimpleExpression{
314 CompoundExpression: compound,
315 Tokens: tks,
316 },
317 Tokens: tks,
318 },
319 Tokens: tks,
320 },
321 Tokens: tks,
322 },
323 Tokens: tks,
324 },
325 Tokens: tks,
326 },
327 Tokens: tks,
328 },
329 &PipeOrSpecialExpression{ // 17
330 SequenceExpression: SequenceExpression{
331 UnaryExpression: UnaryExpression{
332 ExponentiationExpression: ExponentiationExpression{
333 SubsetExpression: SubsetExpression{
334 ScopeExpression: ScopeExpression{
335 IndexOrCallExpression: IndexOrCallExpression{
336 SimpleExpression: &SimpleExpression{
337 CompoundExpression: compound,
338 Tokens: tks,
339 },
340 Tokens: tks,
341 },
342 Tokens: tks,
343 },
344 Tokens: tks,
345 },
346 Tokens: tks,
347 },
348 Tokens: tks,
349 },
350 Tokens: tks,
351 },
352 Tokens: tks,
353 },
354 PipeOrSpecialExpression{ // 18
355 SequenceExpression: SequenceExpression{
356 UnaryExpression: UnaryExpression{
357 ExponentiationExpression: ExponentiationExpression{
358 SubsetExpression: SubsetExpression{
359 ScopeExpression: ScopeExpression{
360 IndexOrCallExpression: IndexOrCallExpression{
361 SimpleExpression: &SimpleExpression{
362 CompoundExpression: compound,
363 Tokens: tks,
364 },
365 Tokens: tks,
366 },
367 Tokens: tks,
368 },
369 Tokens: tks,
370 },
371 Tokens: tks,
372 },
373 Tokens: tks,
374 },
375 Tokens: tks,
376 },
377 Tokens: tks,
378 },
379 &MultiplicationExpression{ // 19
380 PipeOrSpecialExpression: PipeOrSpecialExpression{
381 SequenceExpression: SequenceExpression{
382 UnaryExpression: UnaryExpression{
383 ExponentiationExpression: ExponentiationExpression{
384 SubsetExpression: SubsetExpression{
385 ScopeExpression: ScopeExpression{
386 IndexOrCallExpression: IndexOrCallExpression{
387 SimpleExpression: &SimpleExpression{
388 CompoundExpression: compound,
389 Tokens: tks,
390 },
391 Tokens: tks,
392 },
393 Tokens: tks,
394 },
395 Tokens: tks,
396 },
397 Tokens: tks,
398 },
399 Tokens: tks,
400 },
401 Tokens: tks,
402 },
403 Tokens: tks,
404 },
405 Tokens: tks,
406 },
407 MultiplicationExpression{ // 20
408 PipeOrSpecialExpression: PipeOrSpecialExpression{
409 SequenceExpression: SequenceExpression{
410 UnaryExpression: UnaryExpression{
411 ExponentiationExpression: ExponentiationExpression{
412 SubsetExpression: SubsetExpression{
413 ScopeExpression: ScopeExpression{
414 IndexOrCallExpression: IndexOrCallExpression{
415 SimpleExpression: &SimpleExpression{
416 CompoundExpression: compound,
417 Tokens: tks,
418 },
419 Tokens: tks,
420 },
421 Tokens: tks,
422 },
423 Tokens: tks,
424 },
425 Tokens: tks,
426 },
427 Tokens: tks,
428 },
429 Tokens: tks,
430 },
431 Tokens: tks,
432 },
433 Tokens: tks,
434 },
435 &AdditionExpression{ // 21
436 MultiplicationExpression: MultiplicationExpression{
437 PipeOrSpecialExpression: PipeOrSpecialExpression{
438 SequenceExpression: SequenceExpression{
439 UnaryExpression: UnaryExpression{
440 ExponentiationExpression: ExponentiationExpression{
441 SubsetExpression: SubsetExpression{
442 ScopeExpression: ScopeExpression{
443 IndexOrCallExpression: IndexOrCallExpression{
444 SimpleExpression: &SimpleExpression{
445 CompoundExpression: compound,
446 Tokens: tks,
447 },
448 Tokens: tks,
449 },
450 Tokens: tks,
451 },
452 Tokens: tks,
453 },
454 Tokens: tks,
455 },
456 Tokens: tks,
457 },
458 Tokens: tks,
459 },
460 Tokens: tks,
461 },
462 Tokens: tks,
463 },
464 Tokens: tks,
465 },
466 AdditionExpression{ // 22
467 MultiplicationExpression: MultiplicationExpression{
468 PipeOrSpecialExpression: PipeOrSpecialExpression{
469 SequenceExpression: SequenceExpression{
470 UnaryExpression: UnaryExpression{
471 ExponentiationExpression: ExponentiationExpression{
472 SubsetExpression: SubsetExpression{
473 ScopeExpression: ScopeExpression{
474 IndexOrCallExpression: IndexOrCallExpression{
475 SimpleExpression: &SimpleExpression{
476 CompoundExpression: compound,
477 Tokens: tks,
478 },
479 Tokens: tks,
480 },
481 Tokens: tks,
482 },
483 Tokens: tks,
484 },
485 Tokens: tks,
486 },
487 Tokens: tks,
488 },
489 Tokens: tks,
490 },
491 Tokens: tks,
492 },
493 Tokens: tks,
494 },
495 Tokens: tks,
496 },
497 &RelationalExpression{ // 23
498 AdditionExpression: AdditionExpression{
499 MultiplicationExpression: MultiplicationExpression{
500 PipeOrSpecialExpression: PipeOrSpecialExpression{
501 SequenceExpression: SequenceExpression{
502 UnaryExpression: UnaryExpression{
503 ExponentiationExpression: ExponentiationExpression{
504 SubsetExpression: SubsetExpression{
505 ScopeExpression: ScopeExpression{
506 IndexOrCallExpression: IndexOrCallExpression{
507 SimpleExpression: &SimpleExpression{
508 CompoundExpression: compound,
509 Tokens: tks,
510 },
511 Tokens: tks,
512 },
513 Tokens: tks,
514 },
515 Tokens: tks,
516 },
517 Tokens: tks,
518 },
519 Tokens: tks,
520 },
521 Tokens: tks,
522 },
523 Tokens: tks,
524 },
525 Tokens: tks,
526 },
527 Tokens: tks,
528 },
529 Tokens: tks,
530 },
531 RelationalExpression{ // 24
532 AdditionExpression: AdditionExpression{
533 MultiplicationExpression: MultiplicationExpression{
534 PipeOrSpecialExpression: PipeOrSpecialExpression{
535 SequenceExpression: SequenceExpression{
536 UnaryExpression: UnaryExpression{
537 ExponentiationExpression: ExponentiationExpression{
538 SubsetExpression: SubsetExpression{
539 ScopeExpression: ScopeExpression{
540 IndexOrCallExpression: IndexOrCallExpression{
541 SimpleExpression: &SimpleExpression{
542 CompoundExpression: compound,
543 Tokens: tks,
544 },
545 Tokens: tks,
546 },
547 Tokens: tks,
548 },
549 Tokens: tks,
550 },
551 Tokens: tks,
552 },
553 Tokens: tks,
554 },
555 Tokens: tks,
556 },
557 Tokens: tks,
558 },
559 Tokens: tks,
560 },
561 Tokens: tks,
562 },
563 Tokens: tks,
564 },
565 &NotExpression{ // 25
566 RelationalExpression: RelationalExpression{
567 AdditionExpression: AdditionExpression{
568 MultiplicationExpression: MultiplicationExpression{
569 PipeOrSpecialExpression: PipeOrSpecialExpression{
570 SequenceExpression: SequenceExpression{
571 UnaryExpression: UnaryExpression{
572 ExponentiationExpression: ExponentiationExpression{
573 SubsetExpression: SubsetExpression{
574 ScopeExpression: ScopeExpression{
575 IndexOrCallExpression: IndexOrCallExpression{
576 SimpleExpression: &SimpleExpression{
577 CompoundExpression: compound,
578 Tokens: tks,
579 },
580 Tokens: tks,
581 },
582 Tokens: tks,
583 },
584 Tokens: tks,
585 },
586 Tokens: tks,
587 },
588 Tokens: tks,
589 },
590 Tokens: tks,
591 },
592 Tokens: tks,
593 },
594 Tokens: tks,
595 },
596 Tokens: tks,
597 },
598 Tokens: tks,
599 },
600 Tokens: tks,
601 },
602 NotExpression{ // 26
603 RelationalExpression: RelationalExpression{
604 AdditionExpression: AdditionExpression{
605 MultiplicationExpression: MultiplicationExpression{
606 PipeOrSpecialExpression: PipeOrSpecialExpression{
607 SequenceExpression: SequenceExpression{
608 UnaryExpression: UnaryExpression{
609 ExponentiationExpression: ExponentiationExpression{
610 SubsetExpression: SubsetExpression{
611 ScopeExpression: ScopeExpression{
612 IndexOrCallExpression: IndexOrCallExpression{
613 SimpleExpression: &SimpleExpression{
614 CompoundExpression: compound,
615 Tokens: tks,
616 },
617 Tokens: tks,
618 },
619 Tokens: tks,
620 },
621 Tokens: tks,
622 },
623 Tokens: tks,
624 },
625 Tokens: tks,
626 },
627 Tokens: tks,
628 },
629 Tokens: tks,
630 },
631 Tokens: tks,
632 },
633 Tokens: tks,
634 },
635 Tokens: tks,
636 },
637 Tokens: tks,
638 },
639 &AndExpression{ // 27
640 NotExpression: NotExpression{
641 RelationalExpression: RelationalExpression{
642 AdditionExpression: AdditionExpression{
643 MultiplicationExpression: MultiplicationExpression{
644 PipeOrSpecialExpression: PipeOrSpecialExpression{
645 SequenceExpression: SequenceExpression{
646 UnaryExpression: UnaryExpression{
647 ExponentiationExpression: ExponentiationExpression{
648 SubsetExpression: SubsetExpression{
649 ScopeExpression: ScopeExpression{
650 IndexOrCallExpression: IndexOrCallExpression{
651 SimpleExpression: &SimpleExpression{
652 CompoundExpression: compound,
653 Tokens: tks,
654 },
655 Tokens: tks,
656 },
657 Tokens: tks,
658 },
659 Tokens: tks,
660 },
661 Tokens: tks,
662 },
663 Tokens: tks,
664 },
665 Tokens: tks,
666 },
667 Tokens: tks,
668 },
669 Tokens: tks,
670 },
671 Tokens: tks,
672 },
673 Tokens: tks,
674 },
675 Tokens: tks,
676 },
677 Tokens: tks,
678 },
679 AndExpression{ // 28
680 NotExpression: NotExpression{
681 RelationalExpression: RelationalExpression{
682 AdditionExpression: AdditionExpression{
683 MultiplicationExpression: MultiplicationExpression{
684 PipeOrSpecialExpression: PipeOrSpecialExpression{
685 SequenceExpression: SequenceExpression{
686 UnaryExpression: UnaryExpression{
687 ExponentiationExpression: ExponentiationExpression{
688 SubsetExpression: SubsetExpression{
689 ScopeExpression: ScopeExpression{
690 IndexOrCallExpression: IndexOrCallExpression{
691 SimpleExpression: &SimpleExpression{
692 CompoundExpression: compound,
693 Tokens: tks,
694 },
695 Tokens: tks,
696 },
697 Tokens: tks,
698 },
699 Tokens: tks,
700 },
701 Tokens: tks,
702 },
703 Tokens: tks,
704 },
705 Tokens: tks,
706 },
707 Tokens: tks,
708 },
709 Tokens: tks,
710 },
711 Tokens: tks,
712 },
713 Tokens: tks,
714 },
715 Tokens: tks,
716 },
717 Tokens: tks,
718 },
719 &OrExpression{ // 29
720 AndExpression: AndExpression{
721 NotExpression: NotExpression{
722 RelationalExpression: RelationalExpression{
723 AdditionExpression: AdditionExpression{
724 MultiplicationExpression: MultiplicationExpression{
725 PipeOrSpecialExpression: PipeOrSpecialExpression{
726 SequenceExpression: SequenceExpression{
727 UnaryExpression: UnaryExpression{
728 ExponentiationExpression: ExponentiationExpression{
729 SubsetExpression: SubsetExpression{
730 ScopeExpression: ScopeExpression{
731 IndexOrCallExpression: IndexOrCallExpression{
732 SimpleExpression: &SimpleExpression{
733 CompoundExpression: compound,
734 Tokens: tks,
735 },
736 Tokens: tks,
737 },
738 Tokens: tks,
739 },
740 Tokens: tks,
741 },
742 Tokens: tks,
743 },
744 Tokens: tks,
745 },
746 Tokens: tks,
747 },
748 Tokens: tks,
749 },
750 Tokens: tks,
751 },
752 Tokens: tks,
753 },
754 Tokens: tks,
755 },
756 Tokens: tks,
757 },
758 Tokens: tks,
759 },
760 Tokens: tks,
761 },
762 OrExpression{ // 30
763 AndExpression: AndExpression{
764 NotExpression: NotExpression{
765 RelationalExpression: RelationalExpression{
766 AdditionExpression: AdditionExpression{
767 MultiplicationExpression: MultiplicationExpression{
768 PipeOrSpecialExpression: PipeOrSpecialExpression{
769 SequenceExpression: SequenceExpression{
770 UnaryExpression: UnaryExpression{
771 ExponentiationExpression: ExponentiationExpression{
772 SubsetExpression: SubsetExpression{
773 ScopeExpression: ScopeExpression{
774 IndexOrCallExpression: IndexOrCallExpression{
775 SimpleExpression: &SimpleExpression{
776 CompoundExpression: compound,
777 Tokens: tks,
778 },
779 Tokens: tks,
780 },
781 Tokens: tks,
782 },
783 Tokens: tks,
784 },
785 Tokens: tks,
786 },
787 Tokens: tks,
788 },
789 Tokens: tks,
790 },
791 Tokens: tks,
792 },
793 Tokens: tks,
794 },
795 Tokens: tks,
796 },
797 Tokens: tks,
798 },
799 Tokens: tks,
800 },
801 Tokens: tks,
802 },
803 Tokens: tks,
804 },
805 &FormulaeExpression{ // 31
806 OrExpression: &OrExpression{
807 AndExpression: AndExpression{
808 NotExpression: NotExpression{
809 RelationalExpression: RelationalExpression{
810 AdditionExpression: AdditionExpression{
811 MultiplicationExpression: MultiplicationExpression{
812 PipeOrSpecialExpression: PipeOrSpecialExpression{
813 SequenceExpression: SequenceExpression{
814 UnaryExpression: UnaryExpression{
815 ExponentiationExpression: ExponentiationExpression{
816 SubsetExpression: SubsetExpression{
817 ScopeExpression: ScopeExpression{
818 IndexOrCallExpression: IndexOrCallExpression{
819 SimpleExpression: &SimpleExpression{
820 CompoundExpression: compound,
821 Tokens: tks,
822 },
823 Tokens: tks,
824 },
825 Tokens: tks,
826 },
827 Tokens: tks,
828 },
829 Tokens: tks,
830 },
831 Tokens: tks,
832 },
833 Tokens: tks,
834 },
835 Tokens: tks,
836 },
837 Tokens: tks,
838 },
839 Tokens: tks,
840 },
841 Tokens: tks,
842 },
843 Tokens: tks,
844 },
845 Tokens: tks,
846 },
847 Tokens: tks,
848 },
849 Tokens: tks,
850 },
851 FormulaeExpression{ // 32
852 OrExpression: &OrExpression{
853 AndExpression: AndExpression{
854 NotExpression: NotExpression{
855 RelationalExpression: RelationalExpression{
856 AdditionExpression: AdditionExpression{
857 MultiplicationExpression: MultiplicationExpression{
858 PipeOrSpecialExpression: PipeOrSpecialExpression{
859 SequenceExpression: SequenceExpression{
860 UnaryExpression: UnaryExpression{
861 ExponentiationExpression: ExponentiationExpression{
862 SubsetExpression: SubsetExpression{
863 ScopeExpression: ScopeExpression{
864 IndexOrCallExpression: IndexOrCallExpression{
865 SimpleExpression: &SimpleExpression{
866 CompoundExpression: compound,
867 Tokens: tks,
868 },
869 Tokens: tks,
870 },
871 Tokens: tks,
872 },
873 Tokens: tks,
874 },
875 Tokens: tks,
876 },
877 Tokens: tks,
878 },
879 Tokens: tks,
880 },
881 Tokens: tks,
882 },
883 Tokens: tks,
884 },
885 Tokens: tks,
886 },
887 Tokens: tks,
888 },
889 Tokens: tks,
890 },
891 Tokens: tks,
892 },
893 Tokens: tks,
894 },
895 Tokens: tks,
896 },
897 &AssignmentExpression{ // 33
898 FormulaeExpression: FormulaeExpression{
899 OrExpression: &OrExpression{
900 AndExpression: AndExpression{
901 NotExpression: NotExpression{
902 RelationalExpression: RelationalExpression{
903 AdditionExpression: AdditionExpression{
904 MultiplicationExpression: MultiplicationExpression{
905 PipeOrSpecialExpression: PipeOrSpecialExpression{
906 SequenceExpression: SequenceExpression{
907 UnaryExpression: UnaryExpression{
908 ExponentiationExpression: ExponentiationExpression{
909 SubsetExpression: SubsetExpression{
910 ScopeExpression: ScopeExpression{
911 IndexOrCallExpression: IndexOrCallExpression{
912 SimpleExpression: &SimpleExpression{
913 CompoundExpression: compound,
914 Tokens: tks,
915 },
916 Tokens: tks,
917 },
918 Tokens: tks,
919 },
920 Tokens: tks,
921 },
922 Tokens: tks,
923 },
924 Tokens: tks,
925 },
926 Tokens: tks,
927 },
928 Tokens: tks,
929 },
930 Tokens: tks,
931 },
932 Tokens: tks,
933 },
934 Tokens: tks,
935 },
936 Tokens: tks,
937 },
938 Tokens: tks,
939 },
940 Tokens: tks,
941 },
942 Tokens: tks,
943 },
944 Tokens: tks,
945 },
946 AssignmentExpression{ // 34
947 FormulaeExpression: FormulaeExpression{
948 OrExpression: &OrExpression{
949 AndExpression: AndExpression{
950 NotExpression: NotExpression{
951 RelationalExpression: RelationalExpression{
952 AdditionExpression: AdditionExpression{
953 MultiplicationExpression: MultiplicationExpression{
954 PipeOrSpecialExpression: PipeOrSpecialExpression{
955 SequenceExpression: SequenceExpression{
956 UnaryExpression: UnaryExpression{
957 ExponentiationExpression: ExponentiationExpression{
958 SubsetExpression: SubsetExpression{
959 ScopeExpression: ScopeExpression{
960 IndexOrCallExpression: IndexOrCallExpression{
961 SimpleExpression: &SimpleExpression{
962 CompoundExpression: compound,
963 Tokens: tks,
964 },
965 Tokens: tks,
966 },
967 Tokens: tks,
968 },
969 Tokens: tks,
970 },
971 Tokens: tks,
972 },
973 Tokens: tks,
974 },
975 Tokens: tks,
976 },
977 Tokens: tks,
978 },
979 Tokens: tks,
980 },
981 Tokens: tks,
982 },
983 Tokens: tks,
984 },
985 Tokens: tks,
986 },
987 Tokens: tks,
988 },
989 Tokens: tks,
990 },
991 Tokens: tks,
992 },
993 Tokens: tks,
994 },
995 &QueryExpression{ // 35
996 AssignmentExpression: &AssignmentExpression{
997 FormulaeExpression: FormulaeExpression{
998 OrExpression: &OrExpression{
999 AndExpression: AndExpression{
1000 NotExpression: NotExpression{
1001 RelationalExpression: RelationalExpression{
1002 AdditionExpression: AdditionExpression{
1003 MultiplicationExpression: MultiplicationExpression{
1004 PipeOrSpecialExpression: PipeOrSpecialExpression{
1005 SequenceExpression: SequenceExpression{
1006 UnaryExpression: UnaryExpression{
1007 ExponentiationExpression: ExponentiationExpression{
1008 SubsetExpression: SubsetExpression{
1009 ScopeExpression: ScopeExpression{
1010 IndexOrCallExpression: IndexOrCallExpression{
1011 SimpleExpression: &SimpleExpression{
1012 CompoundExpression: compound,
1013 Tokens: tks,
1014 },
1015 Tokens: tks,
1016 },
1017 Tokens: tks,
1018 },
1019 Tokens: tks,
1020 },
1021 Tokens: tks,
1022 },
1023 Tokens: tks,
1024 },
1025 Tokens: tks,
1026 },
1027 Tokens: tks,
1028 },
1029 Tokens: tks,
1030 },
1031 Tokens: tks,
1032 },
1033 Tokens: tks,
1034 },
1035 Tokens: tks,
1036 },
1037 Tokens: tks,
1038 },
1039 Tokens: tks,
1040 },
1041 Tokens: tks,
1042 },
1043 Tokens: tks,
1044 },
1045 Tokens: tks,
1046 },
1047 QueryExpression{ // 36
1048 AssignmentExpression: &AssignmentExpression{
1049 FormulaeExpression: FormulaeExpression{
1050 OrExpression: &OrExpression{
1051 AndExpression: AndExpression{
1052 NotExpression: NotExpression{
1053 RelationalExpression: RelationalExpression{
1054 AdditionExpression: AdditionExpression{
1055 MultiplicationExpression: MultiplicationExpression{
1056 PipeOrSpecialExpression: PipeOrSpecialExpression{
1057 SequenceExpression: SequenceExpression{
1058 UnaryExpression: UnaryExpression{
1059 ExponentiationExpression: ExponentiationExpression{
1060 SubsetExpression: SubsetExpression{
1061 ScopeExpression: ScopeExpression{
1062 IndexOrCallExpression: IndexOrCallExpression{
1063 SimpleExpression: &SimpleExpression{
1064 CompoundExpression: compound,
1065 Tokens: tks,
1066 },
1067 Tokens: tks,
1068 },
1069 Tokens: tks,
1070 },
1071 Tokens: tks,
1072 },
1073 Tokens: tks,
1074 },
1075 Tokens: tks,
1076 },
1077 Tokens: tks,
1078 },
1079 Tokens: tks,
1080 },
1081 Tokens: tks,
1082 },
1083 Tokens: tks,
1084 },
1085 Tokens: tks,
1086 },
1087 Tokens: tks,
1088 },
1089 Tokens: tks,
1090 },
1091 Tokens: tks,
1092 },
1093 Tokens: tks,
1094 },
1095 Tokens: tks,
1096 },
1097 Tokens: tks,
1098 },
1099 } {
1100 if output := WrapQuery(test); !reflect.DeepEqual(output, &expectedOutput) {
1101 t.Errorf("test %d: expecting\n%v\n...got...\n%v", n+1, expectedOutput, output)
1102 }
1103 }
1104 }
1105
1106 func TestUnwrapQuery(t *testing.T) {
1107 tks := Tokens{
1108 {
1109 Token: parser.Token{
1110 Type: TokenIdentifier,
1111 Data: "a",
1112 },
1113 },
1114 {
1115 Token: parser.Token{
1116 Type: TokenIdentifier,
1117 Data: "b",
1118 },
1119 },
1120 }
1121 identA := &tks[0]
1122 identB := &tks[1]
1123
1124 for n, test := range [...]QueryWrappable{
1125 &CompoundExpression{ // 1
1126 Expressions: []Expression{
1127 {
1128 QueryExpression: WrapQuery(&SimpleExpression{
1129 Identifier: identA,
1130 Tokens: tks[:1],
1131 }),
1132 Tokens: tks[:1],
1133 },
1134 },
1135 Tokens: tks[:1],
1136 },
1137 &SimpleExpression{ // 2
1138 Identifier: identA,
1139 Tokens: tks[:1],
1140 },
1141 &IndexOrCallExpression{ // 3
1142 IndexOrCallExpression: &IndexOrCallExpression{
1143 SimpleExpression: &SimpleExpression{
1144 Identifier: identA,
1145 Tokens: tks[:1],
1146 },
1147 },
1148 Call: &Call{
1149 Args: []Arg{
1150 {
1151 QueryExpression: WrapQuery(&SimpleExpression{
1152 Identifier: identB,
1153 Tokens: tks[1:2],
1154 }),
1155 Tokens: tks[1:2],
1156 },
1157 },
1158 Tokens: tks[1:2],
1159 },
1160 Tokens: tks[:2],
1161 },
1162 &IndexOrCallExpression{ // 4
1163 IndexOrCallExpression: &IndexOrCallExpression{
1164 SimpleExpression: &SimpleExpression{
1165 Identifier: identA,
1166 Tokens: tks[:1],
1167 },
1168 },
1169 Index: &Index{
1170 Args: []IndexExpression{
1171 {
1172 QueryExpression: *WrapQuery(&SimpleExpression{
1173 Identifier: identB,
1174 Tokens: tks[1:2],
1175 }),
1176 Tokens: tks[1:2],
1177 },
1178 },
1179 Tokens: tks[1:2],
1180 },
1181 Tokens: tks[:2],
1182 },
1183 &ScopeExpression{ // 5
1184 IndexOrCallExpression: IndexOrCallExpression{
1185 SimpleExpression: &SimpleExpression{
1186 Identifier: identA,
1187 Tokens: tks[:1],
1188 },
1189 Tokens: tks[:1],
1190 },
1191 ScopeExpression: &ScopeExpression{
1192 IndexOrCallExpression: IndexOrCallExpression{
1193 SimpleExpression: &SimpleExpression{
1194 Identifier: identB,
1195 Tokens: tks[1:2],
1196 },
1197 Tokens: tks[1:2],
1198 },
1199 Tokens: tks[1:2],
1200 },
1201 Tokens: tks[:2],
1202 },
1203 &SubsetExpression{ // 6
1204 ScopeExpression: ScopeExpression{
1205 IndexOrCallExpression: IndexOrCallExpression{
1206 SimpleExpression: &SimpleExpression{
1207 Identifier: identA,
1208 Tokens: tks[:1],
1209 },
1210 Tokens: tks[:1],
1211 },
1212 Tokens: tks[:1],
1213 },
1214 SubsetExpression: &SubsetExpression{
1215 ScopeExpression: ScopeExpression{
1216 IndexOrCallExpression: IndexOrCallExpression{
1217 SimpleExpression: &SimpleExpression{
1218 Identifier: identB,
1219 Tokens: tks[1:2],
1220 },
1221 Tokens: tks[1:2],
1222 },
1223 Tokens: tks[1:2],
1224 },
1225 Tokens: tks[1:2],
1226 },
1227 Tokens: tks[:2],
1228 },
1229 &ExponentiationExpression{ // 7
1230 SubsetExpression: SubsetExpression{
1231 ScopeExpression: ScopeExpression{
1232 IndexOrCallExpression: IndexOrCallExpression{
1233 SimpleExpression: &SimpleExpression{
1234 Identifier: identA,
1235 Tokens: tks[:1],
1236 },
1237 Tokens: tks[:1],
1238 },
1239 Tokens: tks[:1],
1240 },
1241 Tokens: tks[:1],
1242 },
1243 ExponentiationExpression: &ExponentiationExpression{
1244 SubsetExpression: SubsetExpression{
1245 ScopeExpression: ScopeExpression{
1246 IndexOrCallExpression: IndexOrCallExpression{
1247 SimpleExpression: &SimpleExpression{
1248 Identifier: identB,
1249 Tokens: tks[1:2],
1250 },
1251 Tokens: tks[1:2],
1252 },
1253 Tokens: tks[1:2],
1254 },
1255 Tokens: tks[1:2],
1256 },
1257 Tokens: tks[1:2],
1258 },
1259 Tokens: tks[:2],
1260 },
1261 &UnaryExpression{ // 8
1262 UnaryType: []UnaryType{UnaryAdd},
1263 ExponentiationExpression: ExponentiationExpression{
1264 SubsetExpression: SubsetExpression{
1265 ScopeExpression: ScopeExpression{
1266 IndexOrCallExpression: IndexOrCallExpression{
1267 SimpleExpression: &SimpleExpression{
1268 Identifier: identA,
1269 Tokens: tks[:1],
1270 },
1271 Tokens: tks[:1],
1272 },
1273 Tokens: tks[:1],
1274 },
1275 Tokens: tks[:1],
1276 },
1277 Tokens: tks[:1],
1278 },
1279 Tokens: tks[:1],
1280 },
1281 &SequenceExpression{ // 9
1282 UnaryExpression: UnaryExpression{
1283 ExponentiationExpression: ExponentiationExpression{
1284 SubsetExpression: SubsetExpression{
1285 ScopeExpression: ScopeExpression{
1286 IndexOrCallExpression: IndexOrCallExpression{
1287 SimpleExpression: &SimpleExpression{
1288 Identifier: identA,
1289 Tokens: tks[:1],
1290 },
1291 Tokens: tks[:1],
1292 },
1293 Tokens: tks[:1],
1294 },
1295 Tokens: tks[:1],
1296 },
1297 Tokens: tks[:1],
1298 },
1299 Tokens: tks[:1],
1300 },
1301 SequenceExpression: &SequenceExpression{
1302 UnaryExpression: UnaryExpression{
1303 ExponentiationExpression: ExponentiationExpression{
1304 SubsetExpression: SubsetExpression{
1305 ScopeExpression: ScopeExpression{
1306 IndexOrCallExpression: IndexOrCallExpression{
1307 SimpleExpression: &SimpleExpression{
1308 Identifier: identB,
1309 Tokens: tks[1:2],
1310 },
1311 Tokens: tks[1:2],
1312 },
1313 Tokens: tks[1:2],
1314 },
1315 Tokens: tks[1:2],
1316 },
1317 Tokens: tks[1:2],
1318 },
1319 Tokens: tks[1:2],
1320 },
1321 Tokens: tks[:2],
1322 },
1323 },
1324 &PipeOrSpecialExpression{ // 10
1325 SequenceExpression: SequenceExpression{
1326 UnaryExpression: UnaryExpression{
1327 ExponentiationExpression: ExponentiationExpression{
1328 SubsetExpression: SubsetExpression{
1329 ScopeExpression: ScopeExpression{
1330 IndexOrCallExpression: IndexOrCallExpression{
1331 SimpleExpression: &SimpleExpression{
1332 Identifier: identA,
1333 Tokens: tks[:1],
1334 },
1335 Tokens: tks[:1],
1336 },
1337 Tokens: tks[:1],
1338 },
1339 Tokens: tks[:1],
1340 },
1341 Tokens: tks[:1],
1342 },
1343 Tokens: tks[:1],
1344 },
1345 Tokens: tks[:1],
1346 },
1347 PipeOrSpecialExpression: &PipeOrSpecialExpression{
1348 SequenceExpression: SequenceExpression{
1349 UnaryExpression: UnaryExpression{
1350 ExponentiationExpression: ExponentiationExpression{
1351 SubsetExpression: SubsetExpression{
1352 ScopeExpression: ScopeExpression{
1353 IndexOrCallExpression: IndexOrCallExpression{
1354 SimpleExpression: &SimpleExpression{
1355 Identifier: identB,
1356 Tokens: tks[1:2],
1357 },
1358 Tokens: tks[1:2],
1359 },
1360 Tokens: tks[1:2],
1361 },
1362 Tokens: tks[1:2],
1363 },
1364 Tokens: tks[1:2],
1365 },
1366 Tokens: tks[1:2],
1367 },
1368 Tokens: tks[1:2],
1369 },
1370 Tokens: tks[1:2],
1371 },
1372 Tokens: tks[:2],
1373 },
1374 &MultiplicationExpression{ // 11
1375 PipeOrSpecialExpression: PipeOrSpecialExpression{
1376 SequenceExpression: SequenceExpression{
1377 UnaryExpression: UnaryExpression{
1378 ExponentiationExpression: ExponentiationExpression{
1379 SubsetExpression: SubsetExpression{
1380 ScopeExpression: ScopeExpression{
1381 IndexOrCallExpression: IndexOrCallExpression{
1382 SimpleExpression: &SimpleExpression{
1383 Identifier: identA,
1384 Tokens: tks[:1],
1385 },
1386 Tokens: tks[:1],
1387 },
1388 Tokens: tks[:1],
1389 },
1390 Tokens: tks[:1],
1391 },
1392 Tokens: tks[:1],
1393 },
1394 Tokens: tks[:1],
1395 },
1396 Tokens: tks[:1],
1397 },
1398 Tokens: tks[:1],
1399 },
1400 MultiplicationExpression: &MultiplicationExpression{
1401 PipeOrSpecialExpression: PipeOrSpecialExpression{
1402 SequenceExpression: SequenceExpression{
1403 UnaryExpression: UnaryExpression{
1404 ExponentiationExpression: ExponentiationExpression{
1405 SubsetExpression: SubsetExpression{
1406 ScopeExpression: ScopeExpression{
1407 IndexOrCallExpression: IndexOrCallExpression{
1408 SimpleExpression: &SimpleExpression{
1409 Identifier: identB,
1410 Tokens: tks[1:2],
1411 },
1412 Tokens: tks[1:2],
1413 },
1414 Tokens: tks[1:2],
1415 },
1416 Tokens: tks[1:2],
1417 },
1418 Tokens: tks[1:2],
1419 },
1420 Tokens: tks[1:2],
1421 },
1422 Tokens: tks[1:2],
1423 },
1424 Tokens: tks[1:2],
1425 },
1426 Tokens: tks[1:2],
1427 },
1428 Tokens: tks[:2],
1429 },
1430 &AdditionExpression{ // 12
1431 MultiplicationExpression: MultiplicationExpression{
1432 PipeOrSpecialExpression: PipeOrSpecialExpression{
1433 SequenceExpression: SequenceExpression{
1434 UnaryExpression: UnaryExpression{
1435 ExponentiationExpression: ExponentiationExpression{
1436 SubsetExpression: SubsetExpression{
1437 ScopeExpression: ScopeExpression{
1438 IndexOrCallExpression: IndexOrCallExpression{
1439 SimpleExpression: &SimpleExpression{
1440 Identifier: identA,
1441 Tokens: tks[:1],
1442 },
1443 Tokens: tks[:1],
1444 },
1445 Tokens: tks[:1],
1446 },
1447 Tokens: tks[:1],
1448 },
1449 Tokens: tks[:1],
1450 },
1451 Tokens: tks[:1],
1452 },
1453 Tokens: tks[:1],
1454 },
1455 Tokens: tks[:1],
1456 },
1457 Tokens: tks[:1],
1458 },
1459 AdditionExpression: &AdditionExpression{
1460 MultiplicationExpression: MultiplicationExpression{
1461 PipeOrSpecialExpression: PipeOrSpecialExpression{
1462 SequenceExpression: SequenceExpression{
1463 UnaryExpression: UnaryExpression{
1464 ExponentiationExpression: ExponentiationExpression{
1465 SubsetExpression: SubsetExpression{
1466 ScopeExpression: ScopeExpression{
1467 IndexOrCallExpression: IndexOrCallExpression{
1468 SimpleExpression: &SimpleExpression{
1469 Identifier: identB,
1470 Tokens: tks[1:2],
1471 },
1472 Tokens: tks[1:2],
1473 },
1474 Tokens: tks[1:2],
1475 },
1476 Tokens: tks[1:2],
1477 },
1478 Tokens: tks[1:2],
1479 },
1480 Tokens: tks[1:2],
1481 },
1482 Tokens: tks[1:2],
1483 },
1484 Tokens: tks[1:2],
1485 },
1486 Tokens: tks[1:2],
1487 },
1488 Tokens: tks[1:2],
1489 },
1490 Tokens: tks[:2],
1491 },
1492 &RelationalExpression{ // 13
1493 AdditionExpression: AdditionExpression{
1494 MultiplicationExpression: MultiplicationExpression{
1495 PipeOrSpecialExpression: PipeOrSpecialExpression{
1496 SequenceExpression: SequenceExpression{
1497 UnaryExpression: UnaryExpression{
1498 ExponentiationExpression: ExponentiationExpression{
1499 SubsetExpression: SubsetExpression{
1500 ScopeExpression: ScopeExpression{
1501 IndexOrCallExpression: IndexOrCallExpression{
1502 SimpleExpression: &SimpleExpression{
1503 Identifier: identA,
1504 Tokens: tks[:1],
1505 },
1506 Tokens: tks[:1],
1507 },
1508 Tokens: tks[:1],
1509 },
1510 Tokens: tks[:1],
1511 },
1512 Tokens: tks[:1],
1513 },
1514 Tokens: tks[:1],
1515 },
1516 Tokens: tks[:1],
1517 },
1518 Tokens: tks[:1],
1519 },
1520 Tokens: tks[:1],
1521 },
1522 Tokens: tks[:1],
1523 },
1524 RelationalExpression: &RelationalExpression{
1525 AdditionExpression: AdditionExpression{
1526 MultiplicationExpression: MultiplicationExpression{
1527 PipeOrSpecialExpression: PipeOrSpecialExpression{
1528 SequenceExpression: SequenceExpression{
1529 UnaryExpression: UnaryExpression{
1530 ExponentiationExpression: ExponentiationExpression{
1531 SubsetExpression: SubsetExpression{
1532 ScopeExpression: ScopeExpression{
1533 IndexOrCallExpression: IndexOrCallExpression{
1534 SimpleExpression: &SimpleExpression{
1535 Identifier: identB,
1536 Tokens: tks[1:2],
1537 },
1538 Tokens: tks[1:2],
1539 },
1540 Tokens: tks[1:2],
1541 },
1542 Tokens: tks[1:2],
1543 },
1544 Tokens: tks[1:2],
1545 },
1546 Tokens: tks[1:2],
1547 },
1548 Tokens: tks[1:2],
1549 },
1550 Tokens: tks[1:2],
1551 },
1552 Tokens: tks[1:2],
1553 },
1554 Tokens: tks[1:2],
1555 },
1556 Tokens: tks[1:2],
1557 },
1558 Tokens: tks[:2],
1559 },
1560 &NotExpression{ // 14
1561 Nots: 1,
1562 RelationalExpression: RelationalExpression{
1563 AdditionExpression: AdditionExpression{
1564 MultiplicationExpression: MultiplicationExpression{
1565 PipeOrSpecialExpression: PipeOrSpecialExpression{
1566 SequenceExpression: SequenceExpression{
1567 UnaryExpression: UnaryExpression{
1568 ExponentiationExpression: ExponentiationExpression{
1569 SubsetExpression: SubsetExpression{
1570 ScopeExpression: ScopeExpression{
1571 IndexOrCallExpression: IndexOrCallExpression{
1572 SimpleExpression: &SimpleExpression{
1573 Identifier: identA,
1574 Tokens: tks[:1],
1575 },
1576 Tokens: tks[:1],
1577 },
1578 Tokens: tks[:1],
1579 },
1580 Tokens: tks[:1],
1581 },
1582 Tokens: tks[:1],
1583 },
1584 Tokens: tks[:1],
1585 },
1586 Tokens: tks[:1],
1587 },
1588 Tokens: tks[:1],
1589 },
1590 Tokens: tks[:1],
1591 },
1592 Tokens: tks[:1],
1593 },
1594 Tokens: tks[:1],
1595 },
1596 Tokens: tks[:1],
1597 },
1598 &AndExpression{ // 15
1599 NotExpression: NotExpression{
1600 RelationalExpression: RelationalExpression{
1601 AdditionExpression: AdditionExpression{
1602 MultiplicationExpression: MultiplicationExpression{
1603 PipeOrSpecialExpression: PipeOrSpecialExpression{
1604 SequenceExpression: SequenceExpression{
1605 UnaryExpression: UnaryExpression{
1606 ExponentiationExpression: ExponentiationExpression{
1607 SubsetExpression: SubsetExpression{
1608 ScopeExpression: ScopeExpression{
1609 IndexOrCallExpression: IndexOrCallExpression{
1610 SimpleExpression: &SimpleExpression{
1611 Identifier: identA,
1612 Tokens: tks[:1],
1613 },
1614 Tokens: tks[:1],
1615 },
1616 Tokens: tks[:1],
1617 },
1618 Tokens: tks[:1],
1619 },
1620 Tokens: tks[:1],
1621 },
1622 Tokens: tks[:1],
1623 },
1624 Tokens: tks[:1],
1625 },
1626 Tokens: tks[:1],
1627 },
1628 Tokens: tks[:1],
1629 },
1630 Tokens: tks[:1],
1631 },
1632 Tokens: tks[:1],
1633 },
1634 Tokens: tks[:1],
1635 },
1636 AndExpression: &AndExpression{
1637 NotExpression: NotExpression{
1638 RelationalExpression: RelationalExpression{
1639 AdditionExpression: AdditionExpression{
1640 MultiplicationExpression: MultiplicationExpression{
1641 PipeOrSpecialExpression: PipeOrSpecialExpression{
1642 SequenceExpression: SequenceExpression{
1643 UnaryExpression: UnaryExpression{
1644 ExponentiationExpression: ExponentiationExpression{
1645 SubsetExpression: SubsetExpression{
1646 ScopeExpression: ScopeExpression{
1647 IndexOrCallExpression: IndexOrCallExpression{
1648 SimpleExpression: &SimpleExpression{
1649 Identifier: identB,
1650 Tokens: tks[1:2],
1651 },
1652 Tokens: tks[1:2],
1653 },
1654 Tokens: tks[1:2],
1655 },
1656 Tokens: tks[1:2],
1657 },
1658 Tokens: tks[1:2],
1659 },
1660 Tokens: tks[1:2],
1661 },
1662 Tokens: tks[1:2],
1663 },
1664 Tokens: tks[1:2],
1665 },
1666 Tokens: tks[1:2],
1667 },
1668 Tokens: tks[1:2],
1669 },
1670 Tokens: tks[1:2],
1671 },
1672 Tokens: tks[1:2],
1673 },
1674 Tokens: tks[1:2],
1675 },
1676 Tokens: tks[:2],
1677 },
1678 &OrExpression{ // 16
1679 AndExpression: AndExpression{
1680 NotExpression: NotExpression{
1681 RelationalExpression: RelationalExpression{
1682 AdditionExpression: AdditionExpression{
1683 MultiplicationExpression: MultiplicationExpression{
1684 PipeOrSpecialExpression: PipeOrSpecialExpression{
1685 SequenceExpression: SequenceExpression{
1686 UnaryExpression: UnaryExpression{
1687 ExponentiationExpression: ExponentiationExpression{
1688 SubsetExpression: SubsetExpression{
1689 ScopeExpression: ScopeExpression{
1690 IndexOrCallExpression: IndexOrCallExpression{
1691 SimpleExpression: &SimpleExpression{
1692 Identifier: identA,
1693 Tokens: tks[:1],
1694 },
1695 Tokens: tks[:1],
1696 },
1697 Tokens: tks[:1],
1698 },
1699 Tokens: tks[:1],
1700 },
1701 Tokens: tks[:1],
1702 },
1703 Tokens: tks[:1],
1704 },
1705 Tokens: tks[:1],
1706 },
1707 Tokens: tks[:1],
1708 },
1709 Tokens: tks[:1],
1710 },
1711 Tokens: tks[:1],
1712 },
1713 Tokens: tks[:1],
1714 },
1715 Tokens: tks[:1],
1716 },
1717 Tokens: tks[:1],
1718 },
1719 OrExpression: &OrExpression{
1720 AndExpression: AndExpression{
1721 NotExpression: NotExpression{
1722 RelationalExpression: RelationalExpression{
1723 AdditionExpression: AdditionExpression{
1724 MultiplicationExpression: MultiplicationExpression{
1725 PipeOrSpecialExpression: PipeOrSpecialExpression{
1726 SequenceExpression: SequenceExpression{
1727 UnaryExpression: UnaryExpression{
1728 ExponentiationExpression: ExponentiationExpression{
1729 SubsetExpression: SubsetExpression{
1730 ScopeExpression: ScopeExpression{
1731 IndexOrCallExpression: IndexOrCallExpression{
1732 SimpleExpression: &SimpleExpression{
1733 Identifier: identB,
1734 Tokens: tks[1:2],
1735 },
1736 Tokens: tks[1:2],
1737 },
1738 Tokens: tks[1:2],
1739 },
1740 Tokens: tks[1:2],
1741 },
1742 Tokens: tks[1:2],
1743 },
1744 Tokens: tks[1:2],
1745 },
1746 Tokens: tks[1:2],
1747 },
1748 Tokens: tks[1:2],
1749 },
1750 Tokens: tks[1:2],
1751 },
1752 Tokens: tks[1:2],
1753 },
1754 Tokens: tks[1:2],
1755 },
1756 Tokens: tks[1:2],
1757 },
1758 Tokens: tks[1:2],
1759 },
1760 Tokens: tks[1:2],
1761 },
1762 Tokens: tks[:2],
1763 },
1764 &FormulaeExpression{ // 17
1765 FormulaeExpression: &FormulaeExpression{
1766 OrExpression: &OrExpression{
1767 AndExpression: AndExpression{
1768 NotExpression: NotExpression{
1769 RelationalExpression: RelationalExpression{
1770 AdditionExpression: AdditionExpression{
1771 MultiplicationExpression: MultiplicationExpression{
1772 PipeOrSpecialExpression: PipeOrSpecialExpression{
1773 SequenceExpression: SequenceExpression{
1774 UnaryExpression: UnaryExpression{
1775 ExponentiationExpression: ExponentiationExpression{
1776 SubsetExpression: SubsetExpression{
1777 ScopeExpression: ScopeExpression{
1778 IndexOrCallExpression: IndexOrCallExpression{
1779 SimpleExpression: &SimpleExpression{
1780 Identifier: identA,
1781 Tokens: tks[:1],
1782 },
1783 Tokens: tks[:1],
1784 },
1785 Tokens: tks[:1],
1786 },
1787 Tokens: tks[:1],
1788 },
1789 Tokens: tks[:1],
1790 },
1791 Tokens: tks[:1],
1792 },
1793 Tokens: tks[:1],
1794 },
1795 Tokens: tks[:1],
1796 },
1797 Tokens: tks[:1],
1798 },
1799 Tokens: tks[:1],
1800 },
1801 Tokens: tks[:1],
1802 },
1803 Tokens: tks[:1],
1804 },
1805 Tokens: tks[:1],
1806 },
1807 Tokens: tks[:1],
1808 },
1809 Tokens: tks[:1],
1810 },
1811 Tokens: tks[:1],
1812 },
1813 &AssignmentExpression{ // 18
1814 FormulaeExpression: FormulaeExpression{
1815 OrExpression: &OrExpression{
1816 AndExpression: AndExpression{
1817 NotExpression: NotExpression{
1818 RelationalExpression: RelationalExpression{
1819 AdditionExpression: AdditionExpression{
1820 MultiplicationExpression: MultiplicationExpression{
1821 PipeOrSpecialExpression: PipeOrSpecialExpression{
1822 SequenceExpression: SequenceExpression{
1823 UnaryExpression: UnaryExpression{
1824 ExponentiationExpression: ExponentiationExpression{
1825 SubsetExpression: SubsetExpression{
1826 ScopeExpression: ScopeExpression{
1827 IndexOrCallExpression: IndexOrCallExpression{
1828 SimpleExpression: &SimpleExpression{
1829 Identifier: identA,
1830 Tokens: tks[:1],
1831 },
1832 Tokens: tks[:1],
1833 },
1834 Tokens: tks[:1],
1835 },
1836 Tokens: tks[:1],
1837 },
1838 Tokens: tks[:1],
1839 },
1840 Tokens: tks[:1],
1841 },
1842 Tokens: tks[:1],
1843 },
1844 Tokens: tks[:1],
1845 },
1846 Tokens: tks[:1],
1847 },
1848 Tokens: tks[:1],
1849 },
1850 Tokens: tks[:1],
1851 },
1852 Tokens: tks[:1],
1853 },
1854 Tokens: tks[:1],
1855 },
1856 Tokens: tks[:1],
1857 },
1858 Tokens: tks[:1],
1859 },
1860 AssignmentExpression: &AssignmentExpression{
1861 FormulaeExpression: FormulaeExpression{
1862 OrExpression: &OrExpression{
1863 AndExpression: AndExpression{
1864 NotExpression: NotExpression{
1865 RelationalExpression: RelationalExpression{
1866 AdditionExpression: AdditionExpression{
1867 MultiplicationExpression: MultiplicationExpression{
1868 PipeOrSpecialExpression: PipeOrSpecialExpression{
1869 SequenceExpression: SequenceExpression{
1870 UnaryExpression: UnaryExpression{
1871 ExponentiationExpression: ExponentiationExpression{
1872 SubsetExpression: SubsetExpression{
1873 ScopeExpression: ScopeExpression{
1874 IndexOrCallExpression: IndexOrCallExpression{
1875 SimpleExpression: &SimpleExpression{
1876 Identifier: identB,
1877 Tokens: tks[1:2],
1878 },
1879 Tokens: tks[1:2],
1880 },
1881 Tokens: tks[1:2],
1882 },
1883 Tokens: tks[1:2],
1884 },
1885 Tokens: tks[1:2],
1886 },
1887 Tokens: tks[1:2],
1888 },
1889 Tokens: tks[1:2],
1890 },
1891 Tokens: tks[1:2],
1892 },
1893 Tokens: tks[1:2],
1894 },
1895 Tokens: tks[1:2],
1896 },
1897 Tokens: tks[1:2],
1898 },
1899 Tokens: tks[1:2],
1900 },
1901 Tokens: tks[1:2],
1902 },
1903 Tokens: tks[1:2],
1904 },
1905 Tokens: tks[1:2],
1906 },
1907 },
1908 Tokens: tks[:2],
1909 },
1910 &QueryExpression{ // 19
1911 QueryExpression: &QueryExpression{
1912 AssignmentExpression: &AssignmentExpression{
1913 FormulaeExpression: FormulaeExpression{
1914 OrExpression: &OrExpression{
1915 AndExpression: AndExpression{
1916 NotExpression: NotExpression{
1917 RelationalExpression: RelationalExpression{
1918 AdditionExpression: AdditionExpression{
1919 MultiplicationExpression: MultiplicationExpression{
1920 PipeOrSpecialExpression: PipeOrSpecialExpression{
1921 SequenceExpression: SequenceExpression{
1922 UnaryExpression: UnaryExpression{
1923 ExponentiationExpression: ExponentiationExpression{
1924 SubsetExpression: SubsetExpression{
1925 ScopeExpression: ScopeExpression{
1926 IndexOrCallExpression: IndexOrCallExpression{
1927 SimpleExpression: &SimpleExpression{
1928 Identifier: identA,
1929 Tokens: tks[:1],
1930 },
1931 Tokens: tks[:1],
1932 },
1933 Tokens: tks[:1],
1934 },
1935 Tokens: tks[:1],
1936 },
1937 Tokens: tks[:1],
1938 },
1939 Tokens: tks[:1],
1940 },
1941 Tokens: tks[:1],
1942 },
1943 Tokens: tks[:1],
1944 },
1945 Tokens: tks[:1],
1946 },
1947 Tokens: tks[:1],
1948 },
1949 Tokens: tks[:1],
1950 },
1951 Tokens: tks[:1],
1952 },
1953 Tokens: tks[:1],
1954 },
1955 Tokens: tks[:1],
1956 },
1957 Tokens: tks[:1],
1958 },
1959 Tokens: tks[:1],
1960 },
1961 Tokens: tks[:1],
1962 },
1963 Tokens: tks[:1],
1964 },
1965 } {
1966 if output := UnwrapQuery(WrapQuery(test)); !reflect.DeepEqual(output, test) {
1967 t.Errorf("test %d: expecting\n%v\n...got...\n%v", n+1, test, output)
1968 }
1969 }
1970 }
1971
1972 func TestUnwrapQueryExtra(t *testing.T) {
1973 if res := UnwrapQuery(nil); res != nil {
1974 t.Errorf("test 1: expecting nil, got %v", res)
1975 }
1976
1977 if res := UnwrapQuery(WrapQuery(&FormulaeExpression{})); res != nil {
1978 t.Errorf("test 2: expecting nil, got %v", res)
1979 }
1980
1981 if res := UnwrapQuery(WrapQuery(&IndexOrCallExpression{})); res != nil {
1982 t.Errorf("test 3: expecting nil, got %v", res)
1983 }
1984 }
1985