bytebraise_syntax/parser/tests/mod.rs
1/*
2use crate::ast::assignment::{AssignmentExpression, AssignmentOperator, ExportStatement};
3use crate::ast::include::{Include, InheritDirective};
4use crate::ast::unit::AddTaskDirective;
5use crate::ast::{ExpressionNode, Identifier, IdentifierExpression, NodeList};
6use crate::parser::mock::{assert_units, Mock};
7
8#[test]
9fn basic_assignment() {
10 let m = Mock::new();
11
12 assert_units(
13 r#"
14A = "test"
15 "#,
16 [m.node(
17 1,
18 11,
19 AssignmentExpression {
20 is_exported: false,
21 left: m.node(
22 1,
23 2,
24 IdentifierExpression {
25 varflag: None,
26 ident: m.node(1, 2, "A"),
27 },
28 ),
29 operator: m.node(3, 4, AssignmentOperator::Equals),
30 right: m.node(5, 11, "test"),
31 },
32 )],
33 );
34}
35
36#[test]
37fn basic_assignment_with_varflag() {
38 let m = Mock::new();
39
40 assert_units(
41 r#"
42A[my_flag] = "test value"
43 "#,
44 [m.node(
45 1,
46 26,
47 AssignmentExpression {
48 is_exported: false,
49 left: m.node(
50 1,
51 11,
52 IdentifierExpression {
53 varflag: m.node(2, 11, "my_flag"),
54 ident: m.node(1, 2, "A"),
55 },
56 ),
57 operator: m.node(12, 13, AssignmentOperator::Equals),
58 right: m.node(14, 26, "test value"),
59 },
60 )],
61 );
62}
63
64#[test]
65fn export_keyword() {
66 let m = Mock::new();
67
68 assert_units(
69 r#"
70export WAT_DO_YOU_SAY
71export BUDDY
72 "#,
73 [
74 m.node(
75 1,
76 22,
77 ExportStatement {
78 ident: m.node(
79 8,
80 22,
81 IdentifierExpression {
82 varflag: None,
83 ident: m.node(8, 22, "WAT_DO_YOU_SAY"),
84 },
85 ),
86 },
87 ),
88 m.node(
89 23,
90 35,
91 ExportStatement {
92 ident: m.node(
93 30,
94 35,
95 IdentifierExpression {
96 varflag: None,
97 ident: m.node(30, 35, "BUDDY"),
98 },
99 ),
100 },
101 ),
102 ],
103 );
104}
105
106#[test]
107fn export_assignment() {
108 let m = Mock::new();
109
110 assert_units(
111 r##"
112export WAT_DO_YOU_SAY = "contents ${"buddy"}"
113include OK buddy then
114 "##,
115 [
116 m.node(
117 1,
118 46,
119 AssignmentExpression {
120 is_exported: true,
121 left: m.node(
122 8,
123 22,
124 IdentifierExpression {
125 varflag: None,
126 ident: m.node(8, 22, "WAT_DO_YOU_SAY"),
127 },
128 ),
129 operator: m.node(23, 24, AssignmentOperator::Equals),
130 right: m.node(25, 46, "contents ${\"buddy\"}"),
131 },
132 ),
133 m.node(
134 47,
135 77,
136 Include {
137 right: m.node(55, 68, "OK buddy then"),
138 is_require: false,
139 },
140 ),
141 ],
142 );
143}
144
145#[test]
146fn addtask() {
147 let m = Mock::new();
148
149 assert_units(
150 "addtask do_compile",
151 [m.node(
152 0,
153 18,
154 AddTaskDirective {
155 task_name: m.node(8, 18, "do_compile"),
156 after: None,
157 before: None,
158 },
159 )],
160 );
161
162 assert_units(
163 "addtask do_compile after do_configure",
164 [m.node(
165 0,
166 37,
167 AddTaskDirective {
168 task_name: m.node(8, 18, "do_compile"),
169 after: Some(m.list([m.node(25, 37, "do_configure")])),
170 before: None,
171 },
172 )],
173 );
174
175 assert_units(
176 "addtask do_patch before do_build",
177 [m.node(
178 0,
179 32,
180 AddTaskDirective {
181 task_name: m.node(8, 16, "do_patch"),
182 after: None,
183 before: Some(m.list([m.node(24, 32, "do_build")])),
184 },
185 )],
186 );
187
188 assert_units(
189 "addtask do_compile after do_fetch do_unpack before do_install do_populate_sysroot",
190 [m.node(
191 0,
192 81,
193 AddTaskDirective {
194 task_name: m.node(8, 18, "do_compile"),
195 after: Some(m.list([m.node(25, 33, "do_fetch"), m.node(34, 43, "do_unpack")])),
196 before: Some(m.list([
197 m.node(51, 61, "do_install"),
198 m.node(62, 81, "do_populate_sysroot"),
199 ])),
200 },
201 )],
202 );
203}
204
205#[test]
206fn addtask_line_continuations() {
207 let m = Mock::new();
208
209 assert_units(
210 r#"addtask \
211 do_compile"#,
212 [m.node(
213 0,
214 24,
215 AddTaskDirective {
216 task_name: m.node(14, 24, "do_compile"),
217 after: None,
218 before: None,
219 },
220 )],
221 );
222
223 assert_units(
224 r#"addtask do_compile after \
225do_unpack"#,
226 [m.node(
227 0,
228 36,
229 AddTaskDirective {
230 task_name: m.node(8, 18, "do_compile"),
231 after: Some(m.list([m.node(27, 36, "do_unpack")])),
232 before: None,
233 },
234 )],
235 );
236}
237
238#[test]
239fn inherit_directive() {
240 let m = Mock::new();
241
242 assert_units(
243 r##"
244inherit cmake patch
245 "##,
246 [m.node(
247 1,
248 20,
249 InheritDirective {
250 classes: m.node(9, 20, "cmake patch"),
251 },
252 )],
253 );
254}
255
256#[test]
257fn parse_maintainers_inc() {
258 let m = Mock::new();
259
260 let input = r##"
261RECIPE_MAINTAINER_pn-acl = "Chen Qi <Qi.Chen@windriver.com>"
262RECIPE_MAINTAINER_pn-acpica = "Ross Burton <ross.burton@intel.com>"
263RECIPE_MAINTAINER_pn-acpid = "Ross Burton <ross.burton@intel.com>"
264RECIPE_MAINTAINER_pn-adwaita-icon-theme = "Ross Burton <ross.burton@intel.com>"
265"##;
266
267 assert_units(
268 input,
269 [
270 m.node(
271 1,
272 61,
273 AssignmentExpression {
274 is_exported: false,
275 left: m.node(
276 1,
277 25,
278 IdentifierExpression {
279 varflag: None,
280 ident: m.node(1, 25, "RECIPE_MAINTAINER_pn-acl"),
281 },
282 ),
283 operator: m.node(26, 27, AssignmentOperator::Equals),
284 right: m.node(28, 61, "Chen Qi <Qi.Chen@windriver.com>"),
285 },
286 ),
287 m.node(
288 62,
289 129,
290 AssignmentExpression {
291 is_exported: false,
292 left: m.node(
293 62,
294 89,
295 IdentifierExpression {
296 varflag: None,
297 ident: m.node(62, 89, "RECIPE_MAINTAINER_pn-acpica"),
298 },
299 ),
300 operator: m.node(90, 91, AssignmentOperator::Equals),
301 right: m.node(92, 129, "Ross Burton <ross.burton@intel.com>"),
302 },
303 ),
304 m.node(
305 130,
306 196,
307 AssignmentExpression {
308 is_exported: false,
309 left: m.node(
310 130,
311 156,
312 IdentifierExpression {
313 varflag: None,
314 ident: m.node(130, 156, "RECIPE_MAINTAINER_pn-acpid"),
315 },
316 ),
317 operator: m.node(157, 158, AssignmentOperator::Equals),
318 right: m.node(159, 196, "Ross Burton <ross.burton@intel.com>"),
319 },
320 ),
321 m.node(
322 197,
323 276,
324 AssignmentExpression {
325 is_exported: false,
326 left: m.node(
327 197,
328 236,
329 IdentifierExpression {
330 varflag: None,
331 ident: m.node(197, 236, "RECIPE_MAINTAINER_pn-adwaita-icon-theme"),
332 },
333 ),
334 operator: m.node(237, 238, AssignmentOperator::Equals),
335 right: m.node(239, 276, "Ross Burton <ross.burton@intel.com>"),
336 },
337 ),
338 ],
339 );
340}
341*/