use decypher::{ErrorKind, parse, parse_cst, parse_with_label};
#[test]
fn parse_from_preparsed_cst() {
let input = "MATCH (n:Person) RETURN n.name";
let cst = parse_cst(input);
let query_from_cst = parse(cst).unwrap();
let query_from_str = parse(input).unwrap();
assert_eq!(
query_from_cst.statements.len(),
query_from_str.statements.len()
);
}
#[test]
fn parse_from_cst_multi_statement() {
let input = "RETURN 1; RETURN 2";
let cst = parse_cst(input);
let query = parse(cst).unwrap();
assert_eq!(query.statements.len(), 2);
}
#[test]
fn parse_with_label_from_preparsed_cst() {
let cst = parse_cst("MATCH (a)-[:KNOWS]->(b) RETURN b.name");
let result = parse_with_label(cst, "my_script.cypher");
assert!(result.is_ok());
}
#[test]
fn parse_with_label_from_cst_with_errors() {
let cst = parse_cst("RETURN;");
let result = parse_with_label(cst, "my_script.cypher");
assert!(result.is_err());
let err = result.unwrap_err();
assert_eq!(err.source_label(), Some("my_script.cypher"));
}
#[test]
fn parse_empty_string_still_returns_empty_input_error() {
let result = parse("");
assert!(result.is_err());
let err = result.unwrap_err();
assert!(
matches!(err.kind, ErrorKind::EmptyInput),
"expected EmptyInput, got {:?}",
err.kind
);
}
#[test]
fn parse_from_owned_string() {
let input = String::from("MATCH (n) RETURN n");
let result = parse(input);
assert!(result.is_ok());
}
#[test]
fn parse_from_string_ref() {
let input = String::from("MATCH (n) RETURN n");
let result = parse(&input);
assert!(result.is_ok());
}
#[test]
fn parse_with_label_from_empty_cst() {
let cst = decypher::parse_cst("");
let result = parse_with_label(cst, "lbl");
assert!(result.is_err());
let err = result.unwrap_err();
assert_eq!(err.source_label(), Some("lbl"));
}