use crate::analyzer::{Rule, TectParser, Workspace};
use pest::Parser;
use tower_lsp::lsp_types::Url;
#[test]
fn test_parse_data_definition() {
let input = "constant Settings";
let pair = TectParser::parse(Rule::program, input);
assert!(pair.is_ok());
}
#[test]
fn test_parse_function_no_parens() {
let input = "function Login Credentials\n > Session";
let pair = TectParser::parse(Rule::program, input);
assert!(pair.is_ok());
}
#[test]
fn test_doc_comment_association() {
let input = "# Doc 1\n# Doc 2\nconstant Credentials";
let mut a = Workspace::new();
let uri = Url::parse("file:///test.tect").unwrap();
a.analyze(uri, Some(input.to_string()));
let s = a.structure.artifacts.get("Credentials").unwrap();
let docs = match s {
crate::models::Kind::Constant(c) => c.documentation.as_ref().unwrap(),
_ => panic!("Expected constant artifact"),
};
assert!(docs.contains("Doc 1") && docs.contains("Doc 2"));
}
#[test]
fn test_strict_newline_doc_separation() {
let input = "# Header\n\n# Doc\nconstant C";
let mut a = Workspace::new();
let uri = Url::parse("file:///test.tect").unwrap();
a.analyze(uri, Some(input.to_string()));
let s = a.structure.artifacts.get("C").unwrap();
let docs = match s {
crate::models::Kind::Constant(c) => c.documentation.as_ref().unwrap(),
_ => panic!("Expected constant artifact"),
};
assert!(!docs.contains("Header") && docs.contains("Doc"));
}
#[test]
fn test_lowercase_allowed() {
let input = "constant credentials";
let pair = TectParser::parse(Rule::program, input);
assert!(pair.is_ok());
}