1 | ## compare_shells: bash mksh zsh
|
2 |
|
3 | # Test cases for the grammar. It uses pidgin shell because we don't have a
|
4 | # proper lexer in ANTLR (ANTLR's lexers don't have states anyway.)
|
5 | #
|
6 | # These tests should run under the normal shell. But REAL shell tests won't
|
7 | # run under the fake shells grammar/shell*.sh
|
8 |
|
9 | ## suite: disabled
|
10 |
|
11 | #### Simple command
|
12 | echo
|
13 |
|
14 | #### Command with args
|
15 | echo word word
|
16 |
|
17 | #### Command with trailer
|
18 | echo word word &
|
19 |
|
20 | #### a & b
|
21 | echo word_a & echo word_b
|
22 |
|
23 | #### a & b &
|
24 | echo word_a & echo word_b &
|
25 |
|
26 | #### a && b
|
27 | echo word_a && echo word_b
|
28 |
|
29 | #### a || b
|
30 | echo word_a || echo word_b
|
31 |
|
32 | #### a && b || c
|
33 | echo word_a && echo word_b || echo
|
34 |
|
35 | #### Invalid token
|
36 | invalid
|
37 | # TODO: change these to qualifiers!
|
38 | ## status: 99
|
39 |
|
40 | #### Filename Redirect
|
41 | echo 2>filename
|
42 |
|
43 | #### Append redirect
|
44 | echo >>filename
|
45 |
|
46 | #### Prefix redirect
|
47 | <filename echo
|
48 |
|
49 | #### Var assignment
|
50 | NAME=foo echo >>filename
|
51 |
|
52 | #### Brace group
|
53 | { echo
|
54 | echo
|
55 | }
|
56 |
|
57 | #### Brace group on oneline
|
58 | { echo word_a; echo word_b; }
|
59 |
|
60 | #### Subshell
|
61 | (echo word_a; echo word_b;)
|
62 |
|
63 | #### Command sub
|
64 | #echo $(echo word_a; echo word_b;)
|
65 | echo
|
66 |
|
67 | #### Subshell on multiple lines
|
68 | (echo
|
69 | echo
|
70 | echo
|
71 | )
|
72 |
|
73 | #### For loop
|
74 | # TODO: need to add variables
|
75 | for name in word_a word_b word_c
|
76 | do
|
77 | echo word_x
|
78 | echo word_y
|
79 | done
|
80 |
|
81 | #### While loop with empty lines
|
82 | while ! echo word_a
|
83 | do
|
84 |
|
85 | echo word_b
|
86 |
|
87 | echo word_c
|
88 |
|
89 | done
|
90 |
|
91 | #### Until loop
|
92 | until echo word_a
|
93 | do
|
94 | echo word_b
|
95 | echo word_c
|
96 | done
|
97 |
|
98 | #### If
|
99 | if echo
|
100 | then
|
101 | echo
|
102 | else
|
103 | echo
|
104 | fi
|
105 |
|
106 | #### If with then on same line
|
107 | if echo; then
|
108 | echo
|
109 | else
|
110 | echo
|
111 | fi
|
112 |
|
113 | #### If with then on same line missing semicolon
|
114 | # My ANTLR parsers fail to flag this. The 'else' keyword should be unexpected.
|
115 | if echo then
|
116 | echo
|
117 | else
|
118 | echo
|
119 | fi
|
120 | ## status: 2
|
121 |
|
122 | #### If on one line
|
123 | if echo; then echo; else echo; fi
|
124 |
|
125 | #### If pipe
|
126 | if echo | echo word_b; then
|
127 | echo
|
128 | else
|
129 | echo
|
130 | fi
|
131 |
|
132 |
|
133 | #### Empty case
|
134 | case word_a in
|
135 | esac
|
136 |
|
137 | #### Case without last dsemi
|
138 | case word_a in
|
139 | word_b) echo
|
140 | esac
|
141 |
|
142 | #### Case with last dsemi
|
143 | case word_a in
|
144 | word_b) echo
|
145 | ;;
|
146 | esac
|
147 |
|
148 | #### Case with empty clauses
|
149 | case word_a in
|
150 | word_b)
|
151 | ;;
|
152 | word_c)
|
153 | esac
|
154 |
|
155 | #### case item without ;; is not allowed
|
156 | case word_a in
|
157 | word_a)
|
158 | word_b)
|
159 | echo
|
160 | ;;
|
161 | esac
|
162 | ## status: 99
|
163 |
|
164 |
|
165 | #### Case with last dsemi on same line
|
166 | case word_a in
|
167 | word_b) echo ;;
|
168 | esac
|
169 |
|
170 | #### Case with 2 options
|
171 | case word_a in
|
172 | word_b|word_c)
|
173 | echo word_d
|
174 | echo word_e
|
175 | ;;
|
176 | word_e)
|
177 | echo word_f
|
178 | ;;
|
179 | esac
|
180 |
|
181 | #### Case all on one line
|
182 | case word_a in word_b) echo ;; word_c) echo ;; esac
|
183 |
|
184 | #### Case all on one line without trailing ;;
|
185 | case word_a in word_b) echo word_b;; word_c) echo word_c; esac
|
186 |
|
187 | #### Case all on one line without trailing ;; or ;
|
188 | # My ANTLR parsers don't fail here and they should.
|
189 | case word_a in word_b) echo word_b;; word_c) echo word_c esac
|
190 | ## status: 99
|
191 |
|
192 | #### case: Using ; instead of ;;
|
193 | case word_a in
|
194 | word_a)
|
195 | ;
|
196 | word_b)
|
197 | echo
|
198 | ;;
|
199 | esac
|
200 | ## status: 99
|
201 |
|
202 |
|
203 | #### Function def
|
204 | name_a() {
|
205 | echo word_a
|
206 | echo word_b
|
207 | }
|
208 |
|