use std::process::Command;
fn regast() -> Command {
Command::new(env!("CARGO_BIN_EXE_regast"))
}
#[test]
fn ast_and_parse_commands_emit_public_formats() {
let ast = regast()
.args(["ast", "(a|b)*c", "--shape", "arena"])
.output()
.unwrap();
assert!(ast.status.success());
assert!(
String::from_utf8(ast.stdout)
.unwrap()
.contains("\"schema_version\": 1")
);
let tree = regast()
.args(["parse", "(a|b)*c", "abac", "--format", "sexpr"])
.output()
.unwrap();
assert!(tree.status.success());
assert!(String::from_utf8(tree.stdout).unwrap().contains("repeat"));
}
#[test]
fn check_uses_status_one_for_a_non_match() {
let success = regast().args(["check", "a+", "aaa"]).status().unwrap();
assert!(success.success());
let failure = regast().args(["check", "a+", "bbb"]).status().unwrap();
assert_eq!(failure.code(), Some(1));
}
#[test]
fn find_supports_anchors_and_antimirov_backend() {
let output = regast()
.args([
"find",
"ab+$",
"zabbb",
"--backend",
"antimirov",
"--format",
"json",
])
.output()
.unwrap();
assert!(output.status.success());
let stdout = String::from_utf8(output.stdout).unwrap();
assert!(stdout.contains("\"match_span\": ["));
assert!(stdout.contains("\"input\": \"zabbb\""));
}
#[test]
fn tagged_nfa_backend_is_available_to_parse_and_check() {
let parsed = regast()
.args(["parse", "^([ab]+)$", "abba", "--backend", "tagged-nfa"])
.output()
.unwrap();
assert!(parsed.status.success());
assert!(
String::from_utf8(parsed.stdout)
.unwrap()
.contains("\"group\"")
);
let rejected = regast()
.args(["check", "^a$", "ba", "--backend", "tagged-nfa"])
.status()
.unwrap();
assert_eq!(rejected.code(), Some(1));
}