* Support shadowing in isle * Re-run the isle build.rs if the examples change * Print error messages when isle tests fail * Move run tests * Refactor `let` uses that don't need to introduce unique names
36 lines
1.2 KiB
Rust
36 lines
1.2 KiB
Rust
use std::fmt::Write;
|
|
|
|
fn main() {
|
|
println!("cargo:rerun-if-changed=build.rs");
|
|
println!("cargo:rerun-if-changed=isle_examples");
|
|
|
|
let out_dir = std::path::PathBuf::from(
|
|
std::env::var_os("OUT_DIR").expect("The OUT_DIR environment variable must be set"),
|
|
);
|
|
|
|
let mut out = String::new();
|
|
|
|
emit_tests(&mut out, "isle_examples/pass", "run_pass");
|
|
emit_tests(&mut out, "isle_examples/fail", "run_fail");
|
|
emit_tests(&mut out, "isle_examples/link", "run_link");
|
|
emit_tests(&mut out, "isle_examples/run", "run_run");
|
|
|
|
let output = out_dir.join("isle_tests.rs");
|
|
std::fs::write(output, out).unwrap();
|
|
}
|
|
|
|
fn emit_tests(out: &mut String, dir_name: &str, runner_func: &str) {
|
|
for test_file in std::fs::read_dir(dir_name).unwrap() {
|
|
let test_file = test_file.unwrap().file_name().into_string().unwrap();
|
|
if !test_file.ends_with(".isle") {
|
|
continue;
|
|
}
|
|
let test_file_base = test_file.replace(".isle", "");
|
|
|
|
writeln!(out, "#[test]").unwrap();
|
|
writeln!(out, "fn test_{}_{}() {{", runner_func, test_file_base).unwrap();
|
|
writeln!(out, " {}(\"{}/{}\");", runner_func, dir_name, test_file).unwrap();
|
|
writeln!(out, "}}").unwrap();
|
|
}
|
|
}
|