use std::path::{Path, PathBuf};
use rux_runtime::Document;
fn examples_dir() -> PathBuf {
Path::new(env!("CARGO_MANIFEST_DIR")).join("../../examples")
}
fn example_files() -> Vec<PathBuf> {
let mut files: Vec<PathBuf> = std::fs::read_dir(examples_dir())
.expect("examples/ is readable")
.filter_map(|entry| {
let path = entry.ok()?.path();
(path.extension()? == "rux").then_some(path)
})
.collect();
files.sort();
assert!(!files.is_empty(), "found no examples to check");
files
}
#[test]
fn every_example_loads() {
let mut failures = Vec::new();
for path in example_files() {
if let Err(err) = Document::load(&path) {
failures.push(format!("{}: {err}", path.display()));
}
}
assert!(failures.is_empty(), "examples failed to load:\n{}", failures.join("\n"));
}
#[test]
fn every_example_is_warning_free() {
let mut noisy = Vec::new();
for path in example_files() {
let Ok(doc) = Document::load(&path) else { continue }; let warnings = &doc.diagnostics().warnings;
if !warnings.is_empty() {
let listed: Vec<String> = warnings.iter().map(|w| w.to_string()).collect();
noisy.push(format!("{}:\n - {}", path.display(), listed.join("\n - ")));
}
}
assert!(
noisy.is_empty(),
"examples raise warnings the dev overlay will show:\n{}",
noisy.join("\n")
);
}