#[cfg(feature = "test-fixtures")]
pub mod pdf {
use include_dir::{Dir, include_dir};
pub static DIR: Dir<'_> = include_dir!("$OUT_DIR/fixtures/pdf");
pub const NEW_STATS: &[u8] =
include_bytes!(concat!(env!("OUT_DIR"), "/fixtures/pdf/New_Stats.pdf"));
}
#[cfg(feature = "test-fixtures")]
pub mod rmd {
use include_dir::{Dir, include_dir};
pub static DIR: Dir<'_> = include_dir!("$OUT_DIR/fixtures/rmd");
pub const GETTING_STARTED: &[u8] = include_bytes!(concat!(
env!("OUT_DIR"),
"/fixtures/rmd/Getting_started_with_R.Rmd"
));
}
#[cfg(feature = "test-fixtures")]
pub mod html {
use include_dir::{Dir, include_dir};
pub static DIR: Dir<'_> = include_dir!("$OUT_DIR/fixtures/html");
pub const INDEX: &[u8] = include_bytes!(concat!(env!("OUT_DIR"), "/fixtures/html/index.html"));
}
#[cfg(feature = "test-fixtures")]
pub fn extract_fixtures(format: &str) -> anyhow::Result<(std::path::PathBuf, tempfile::TempDir)> {
let dir = tempfile::tempdir()?;
match format {
"pdf" => pdf::DIR.extract(dir.path())?,
"rmd" => rmd::DIR.extract(dir.path())?,
"html" => html::DIR.extract(dir.path())?,
other => anyhow::bail!("unknown fixture format: {other}. Available: pdf, rmd, html"),
}
let path = dir.path().to_path_buf();
Ok((path, dir))
}
#[cfg(all(test, feature = "test-fixtures"))]
mod tests {
use super::*;
#[test]
fn extract_html_returns_valid_dir() {
let (dir, _temp) = extract_fixtures("html").unwrap();
assert!(dir.exists());
}
#[test]
fn extract_pdf_returns_valid_dir() {
let (dir, _temp) = extract_fixtures("pdf").unwrap();
assert!(dir.exists());
}
#[test]
fn extract_rmd_returns_valid_dir() {
let (dir, _temp) = extract_fixtures("rmd").unwrap();
assert!(dir.exists());
}
#[test]
fn extract_unknown_format_is_error() {
let result = extract_fixtures("nonexistent");
assert!(result.is_err());
}
#[test]
fn extract_fixtures_excludes_ragrig_state() {
for format in ["pdf", "rmd", "html"] {
let (dir, _temp) = extract_fixtures(format).unwrap();
let entries: Vec<_> = std::fs::read_dir(&dir)
.unwrap()
.map(|e| e.unwrap().file_name())
.collect();
assert!(!entries.is_empty(), "{format} fixture is empty");
for name in &entries {
assert!(
!name.to_string_lossy().starts_with(".ragrig"),
"{format} fixture staged a .ragrig* entry: {}",
name.to_string_lossy()
);
}
}
}
}