59 lines
1.6 KiB
Rust
59 lines
1.6 KiB
Rust
|
use std::env;
|
||
|
use std::fs::File;
|
||
|
use std::io::Write;
|
||
|
use std::path::Path;
|
||
|
use walkdir::WalkDir;
|
||
|
|
||
|
fn main() {
|
||
|
let out_dir = env::var("OUT_DIR").unwrap();
|
||
|
let destination = Path::new(&out_dir).join("tests.rs");
|
||
|
let mut test_file = File::create(&destination).unwrap();
|
||
|
|
||
|
write_header(&mut test_file);
|
||
|
|
||
|
let test_files = WalkDir::new("org_mode_samples")
|
||
|
.into_iter()
|
||
|
.filter(|e| match e {
|
||
|
Ok(dir_entry) => {
|
||
|
dir_entry.file_type().is_file()
|
||
|
&& Path::new(dir_entry.file_name())
|
||
|
.extension()
|
||
|
.map(|ext| ext.to_ascii_lowercase() == "org")
|
||
|
.unwrap_or(false)
|
||
|
}
|
||
|
Err(_) => true,
|
||
|
}).collect::<Result<Vec<_>, _>>().unwrap();
|
||
|
for test in test_files {
|
||
|
write_test(&mut test_file, &test);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
fn write_test(test_file: &mut File, test: &walkdir::DirEntry) {
|
||
|
let test_name = test.path().strip_prefix("org_mode_samples/").expect("Paths should be under org_mode_samples/").to_string_lossy().to_lowercase().strip_suffix(".org").expect("Should have .org extension").replace("/", "_");
|
||
|
|
||
|
|
||
|
write!(
|
||
|
test_file,
|
||
|
include_str!("./tests/test_template"),
|
||
|
name = test_name,
|
||
|
path = test.path().display()
|
||
|
)
|
||
|
.unwrap();
|
||
|
}
|
||
|
|
||
|
fn write_header(test_file: &mut File) {
|
||
|
write!(
|
||
|
test_file,
|
||
|
r#"
|
||
|
#[feature(exit_status_error)]
|
||
|
use organic::compare_document;
|
||
|
use organic::document;
|
||
|
use organic::emacs_parse_org_document;
|
||
|
use organic::sexp;
|
||
|
|
||
|
"#
|
||
|
)
|
||
|
.unwrap();
|
||
|
}
|