use std::fs;
use std::path::{Path, PathBuf};
#[test]
fn production_direct_output_is_confined_to_approved_output_boundaries() {
fn visit(path: &Path, violations: &mut Vec<PathBuf>) {
for entry in fs::read_dir(path).unwrap() {
let path = entry.unwrap().path();
if path.is_dir() {
visit(&path, violations);
} else if path.extension().is_some_and(|extension| extension == "rs") {
let relative = path.strip_prefix(env!("CARGO_MANIFEST_DIR")).unwrap();
if relative.starts_with("src/ui")
|| relative.starts_with("src/cli")
|| relative.starts_with("src/bin")
|| matches!(
relative.to_string_lossy().as_ref(),
"src/execution/install.rs"
| "src/execution/environment.rs"
| "src/backends/apt_mirror.rs"
| "src/state/mod.rs"
)
{
continue;
}
let source = fs::read_to_string(&path).unwrap();
if ["print!(", "println!(", "eprint!(", "eprintln!("]
.iter()
.any(|needle| source.contains(needle))
{
violations.push(relative.to_path_buf());
}
}
}
}
let mut violations = Vec::new();
visit(
&PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("src"),
&mut violations,
);
assert!(
violations.is_empty(),
"direct output outside approved output boundaries: {violations:?}"
);
}