#![allow(dead_code)]
use nord_usb::transport::Script;
use std::fs;
use std::path::{Path, PathBuf};
pub fn fixtures() -> PathBuf {
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("tests/scripts")
}
pub fn corpus() -> PathBuf {
std::env::var_os("NORD_CORPUS_ROOT")
.map(PathBuf::from)
.expect("set NORD_CORPUS_ROOT to a nord-corpus checkout for --features corpus")
}
pub fn walk(root: &Path) -> Vec<PathBuf> {
let mut found = Vec::new();
let mut stack = vec![root.to_path_buf()];
while let Some(dir) = stack.pop() {
for entry in fs::read_dir(&dir).unwrap_or_else(|e| panic!("{}: {e}", dir.display())) {
let path = entry.unwrap().path();
if path.is_dir() {
if path.file_name().is_some_and(|n| n != ".git") {
stack.push(path);
}
} else if path.extension().is_some_and(|e| e == "script") {
found.push(path);
}
}
}
found.sort();
found
}
pub fn read(path: &Path) -> Script {
let text =
fs::read_to_string(path).unwrap_or_else(|e| panic!("reading {}: {e}", path.display()));
Script::parse(&text).unwrap_or_else(|e| panic!("{}: {e}", path.display()))
}
pub fn fixture(rel: &str) -> Script {
read(&fixtures().join(rel))
}
pub fn rel(root: &Path, path: &Path) -> String {
path.strip_prefix(root)
.unwrap_or(path)
.components()
.map(|c| c.as_os_str().to_string_lossy())
.collect::<Vec<_>>()
.join("/")
}