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();
    }
}
