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*/