use std::env::var_os;
use std::fs::{copy, File};
use std::io::{BufRead, BufReader, Read, Write};
use jane_eyre::Result;
use regex::Regex;
#[test]
fn generate_and_verify_readme() -> Result<()> {
let path = mktemp::Temp::new_file()?;
let path = path.as_ref();
generate(File::create(path)?)?;
let actual_path = "README.registry.md";
if var_os("UPDATE_README_FOR_REGISTRY").is_some() {
copy(path, actual_path)?;
}
let mut actual = vec![0u8; 0];
File::open(actual_path)?.read_to_end(&mut actual)?;
let mut expected = vec![0u8; 0];
File::open(path)?.read_to_end(&mut expected)?;
assert_eq!(
actual,
expected,
"{} identical to {}",
actual_path,
path.display()
);
Ok(())
}
fn generate(mut registry: File) -> Result<()> {
let pattern = Regex::new(
r"(?x)^
!\[
(?P<alt>[^\]]*)
\]\(
(?P<src>[^)]*)
\)
$",
)?;
let replacement = format!(
"",
env!("CARGO_PKG_REPOSITORY"),
env!("CARGO_PKG_VERSION")
);
let original = BufReader::new(File::open("README.md")?);
for line in original.lines() {
writeln!(registry, "{}", pattern.replace(&line?, &*replacement))?;
}
Ok(())
}