emmylua_parser/syntax/tree/
test.rs1#[cfg(test)]
2mod test {
3 use crate::{set_locale, LuaAstNode, LuaLanguageLevel, LuaParser, ParserConfig};
4 use std::{collections::HashMap, thread};
6
7 #[test]
8 fn test_multithreaded_syntax_tree_traversal() {
9 let code = r#"
10 local a = 1
11 local b = 2
12 print(a + b)
13 "#;
14 let tree = LuaParser::parse(code, ParserConfig::default());
15 let tree_arc = std::sync::Arc::new(tree);
16
17 let mut handles = vec![];
18
19 for i in 0..4 {
20 let tree_ref = tree_arc.clone();
21 let handle = thread::spawn(move || {
22 let node = tree_ref.get_chunk_node();
23 println!("{:?} {}", node.dump(), i);
24 });
25 handles.push(handle);
26 }
27
28 for handle in handles {
29 handle.join().unwrap();
30 }
31 }
32
33 #[test]
34 fn test_lua51() {
35 let code = r#"
36if a ~= b then
37end
38 "#;
39 let parse_config = ParserConfig::new(LuaLanguageLevel::Lua51, None, HashMap::new());
40 let tree = LuaParser::parse(code, parse_config);
41 assert_eq!(tree.get_errors().len(), 0);
42 }
43
44 #[test]
45 fn test_tree_struct() {
46 let code = r#"
47function f()
48 -- hh
49 local t
50end
51 "#;
52 let tree = LuaParser::parse(code, ParserConfig::default());
53 let chunk = tree.get_chunk_node();
54 println!("{:?}", chunk.dump());
55 }
56
57 #[test]
58 fn test_error() {
59 let code = r#"
60local
61"#;
62 set_locale("zh_CN");
63 let tree = LuaParser::parse(code, ParserConfig::default());
64 let errors = tree.get_errors();
65 for error in errors {
66 println!("{:?}", error);
67 }
68 }
69
70 #[test]
71 fn test_bad_syntax() {
72 let code = r#"
73JsonData.this[] = nil
74
75---@param key string
76---@return boolean
77local t
78 "#;
79
80 let _ = LuaParser::parse(code, ParserConfig::default());
81 }
82}