use assert_cmd::prelude::*;
use std::fs;
use std::path::{Path, PathBuf};
use std::process::Command;
fn repo_root() -> PathBuf {
let manifest_dir = Path::new(env!("CARGO_MANIFEST_DIR"));
manifest_dir
.parent()
.and_then(|p| p.parent())
.expect("expected crates/<name> layout")
.to_path_buf()
}
#[test]
fn cli_renders_jpg_smoke() {
let root = repo_root();
let fixture = root.join("fixtures").join("flowchart").join("basic.mmd");
assert!(fixture.exists(), "fixture missing: {}", fixture.display());
let tmp = tempfile::tempdir().expect("tempdir");
let out = tmp.path().join("out.jpg");
let exe = assert_cmd::cargo_bin!("merman-cli");
Command::new(exe)
.current_dir(&root)
.args([
"render",
"--format",
"jpg",
"--out",
out.to_string_lossy().as_ref(),
fixture.to_string_lossy().as_ref(),
])
.assert()
.success();
let bytes = fs::read(&out).expect("read jpg");
assert!(
bytes.starts_with(&[0xFF, 0xD8, 0xFF]),
"output is not a JPG"
);
assert!(bytes.ends_with(&[0xFF, 0xD9]), "output is not a JPG");
}
#[test]
fn cli_renders_jpg_with_default_out_path_for_file_input() {
let root = repo_root();
let fixture = root.join("fixtures").join("flowchart").join("basic.mmd");
assert!(fixture.exists(), "fixture missing: {}", fixture.display());
let tmp = tempfile::tempdir().expect("tempdir");
let tmp_fixture = tmp.path().join("basic.mmd");
fs::copy(&fixture, &tmp_fixture).expect("copy fixture");
let expected_out = tmp_fixture.with_extension("jpg");
let exe = assert_cmd::cargo_bin!("merman-cli");
Command::new(exe)
.current_dir(&root)
.args([
"render",
"--format",
"jpg",
tmp_fixture.to_string_lossy().as_ref(),
])
.assert()
.success();
let bytes = fs::read(&expected_out).expect("read jpg");
assert!(
bytes.starts_with(&[0xFF, 0xD8, 0xFF]),
"output is not a JPG"
);
assert!(bytes.ends_with(&[0xFF, 0xD9]), "output is not a JPG");
}