use std::env; use std::fs::read_dir; use std::fs::DirEntry; use std::fs::File; use std::io::Write; use std::path::Path; fn main() { build_valid_spec_examples_tests(); build_invalid_spec_examples_tests(); } fn build_valid_spec_examples_tests() { let out_dir = env::var("OUT_DIR").unwrap(); let destination = Path::new(&out_dir).join("valid_specification_tests.rs"); let mut test_file = File::create(destination).unwrap(); let paths = read_dir("demes-spec/test-cases/valid").unwrap(); for p in paths { let p = p.unwrap(); write_valid_example_test(&mut test_file, &p); } } fn write_valid_example_test(test_file: &mut File, path: &DirEntry) { let directory = path.path().canonicalize().unwrap(); let test_name = directory.file_name().unwrap().to_string_lossy(); let full_path = directory.to_string_lossy(); let test_name = test_name.replace(".yaml", ""); let test_name = format!("test_valid_case_{}", test_name); write!( test_file, include_str!("./tests/valid_test_template"), name = test_name, path = full_path, ) .unwrap(); } fn build_invalid_spec_examples_tests() { let out_dir = env::var("OUT_DIR").unwrap(); let destination = Path::new(&out_dir).join("invalid_specification_tests.rs"); let mut test_file = File::create(destination).unwrap(); let paths = read_dir("demes-spec/test-cases/invalid").unwrap(); for p in paths { let p = p.unwrap(); write_invalid_example_test(&mut test_file, &p); } } fn write_invalid_example_test(test_file: &mut File, path: &DirEntry) { let directory = path.path().canonicalize().unwrap(); let test_name = directory.file_name().unwrap().to_string_lossy(); let full_path = directory.to_string_lossy(); let test_name = test_name.replace(".yaml", ""); let test_name = format!("test_invalid_case_{}", test_name); write!( test_file, include_str!("./tests/invalid_test_template"), name = test_name, path = full_path, ) .unwrap(); }