fn main() {
let mut passed_tests = 0;
let mut failed_tests = 0;
for entry in std::fs::read_dir("tests/pass/").unwrap() {
let entry = entry.unwrap();
let path = entry.path();
eprintln!("test {}", path.display());
let ok = test_pass(&path);
if ok {
passed_tests += 1;
} else {
failed_tests += 1;
}
}
for entry in std::fs::read_dir("tests/fail/").unwrap() {
let entry = entry.unwrap();
let path = entry.path();
if path.extension().map_or(false, |ext| ext == "oris") {
eprintln!("test {}", path.display());
let ok = test_fail(&path);
if ok {
passed_tests += 1;
} else {
failed_tests += 1;
}
}
}
eprintln!("passed x {}, failed x {}", passed_tests, failed_tests);
if failed_tests != 0 {
panic!("failed test x {}", failed_tests);
}
}
fn test_pass(path: &std::path::Path) -> bool {
let code = std::fs::read(path).unwrap();
let mut env = oris::Env::new();
match oris::entry(&mut env, &code) {
Ok(_) => true,
Err(error) => {
eprintln!("failed, error: {}", error);
false
}
}
}
fn test_fail(path: &std::path::Path) -> bool {
let code = std::fs::read(path).unwrap();
let mut env = oris::Env::new();
match oris::entry(&mut env, &code) {
Ok(_) => {
eprintln!(" runs ok while expecting to return an error");
false
}
Err(error) => {
let expected_error_file_path = path.with_extension("oris.error");
match std::fs::read_to_string(&expected_error_file_path) {
Ok(mut expected_error_string) => {
if expected_error_string.chars().next_back() == Some('\n') {
expected_error_string.pop();
}
let (line, column) = error.line_column(&code);
let found_error_string =
format!("{}:{}\n{}", line + 1, column + 1, error.to_string());
if found_error_string == expected_error_string {
true
} else {
eprintln!(" failed with an unexpected error:");
eprintln!(" found: \n{}", found_error_string);
eprintln!("expected: \n{}", expected_error_string);
false
}
}
Err(error_) => {
if error_.kind() == std::io::ErrorKind::NotFound {
eprintln!(" failed as expected with error: \n{}", error);
eprintln!(
"but expected error file is not found at path {}",
expected_error_file_path.display()
);
} else {
eprintln!(
"failed to read error file at {}",
expected_error_file_path.display()
);
}
false
}
}
}
}
}