use gremlin_rs::{parse, parse_query, GremlinParseError};
#[test]
fn parses_real_traversals() {
let queries = [
"g.V()",
"g.V().count()",
"g.V().has('name','marko').out('knows').values('name')",
"g.V().hasLabel('person').groupCount().by('age')",
"g.V().repeat(out()).times(2).path()",
"g.addV('person').property('name','stephen')",
"g.V().where(__.out('created')).values('name')",
];
for q in queries {
let tree = parse(q).unwrap_or_else(|e| panic!("expected {q:?} to parse, got {e}"));
assert!(!tree.text().is_empty(), "empty tree text for {q:?}");
}
}
#[test]
fn parses_query_list() {
let tree = parse("g.V().count();g.E().count()").expect("query list should parse");
assert!(!tree.text().is_empty());
}
#[test]
fn parse_query_accepts_single() {
parse_query("g.V().limit(10)").expect("single query should parse");
}
#[test]
fn rejects_invalid_input() {
let err = parse("g.V(((").expect_err("garbage should not parse cleanly");
match err {
GremlinParseError::Syntax { count, .. } => assert!(count > 0),
GremlinParseError::Runtime(_) => { }
}
}
#[test]
fn error_displays() {
if let Err(e) = parse("g.V(") {
assert!(!e.to_string().is_empty());
}
}