emmylua_parser/syntax/tree/
test.rs

1#[cfg(test)]
2mod test {
3    use crate::{set_locale, LuaAstNode, LuaLanguageLevel, LuaParser, ParserConfig};
4    // use std::time::Instant;
5    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}