use tempfile::tempdir;
#[path = "common/mod.rs"]
mod common;
use common::cargo_bin;
#[test]
fn cli_to_md_help() {
let output = cargo_bin()
.args(["to-md", "--help"])
.output()
.expect("failed to execute hwp2md to-md --help");
assert!(
output.status.success(),
"expected zero exit; stderr: {}",
String::from_utf8_lossy(&output.stderr)
);
let stdout = String::from_utf8_lossy(&output.stdout);
assert!(
stdout.contains("input") || stdout.contains("INPUT"),
"input option missing: {stdout}"
);
assert!(
stdout.contains("output") || stdout.contains("OUTPUT"),
"output option missing: {stdout}"
);
assert!(
stdout.contains("assets-dir") || stdout.contains("assets"),
"assets-dir option missing: {stdout}"
);
assert!(
stdout.contains("frontmatter"),
"frontmatter option missing: {stdout}"
);
}
#[test]
fn cli_to_md_nonexistent_file() {
let output = cargo_bin()
.args(["to-md", "/nonexistent/path/file.hwp"])
.output()
.expect("failed to execute hwp2md to-md");
assert!(
!output.status.success(),
"expected non-zero exit for missing file"
);
let stderr = String::from_utf8_lossy(&output.stderr);
assert!(
stderr.contains("nonexistent")
|| stderr.contains("No such file")
|| stderr.contains("not found")
|| stderr.contains("os error"),
"expected file-not-found error, got: {stderr}"
);
}
#[test]
fn cli_to_md_unsupported_format() {
let dir = tempdir().expect("tempdir");
let txt_file = dir.path().join("document.txt");
std::fs::write(&txt_file, b"some content").expect("write txt");
let output = cargo_bin()
.args(["to-md", txt_file.to_str().unwrap()])
.output()
.expect("failed to execute hwp2md to-md");
assert!(
!output.status.success(),
"expected non-zero exit for unsupported extension"
);
let stderr = String::from_utf8_lossy(&output.stderr);
assert!(
stderr.contains("Unsupported") || stderr.contains("unsupported"),
"expected unsupported-format error, got: {stderr}"
);
}
#[test]
fn cli_to_md_from_hwpx() {
let dir = tempdir().expect("tempdir");
let md_src = dir.path().join("source.md");
std::fs::write(&md_src, b"# Integration Test\n\nHello from CLI test.\n").expect("write md");
let hwpx_path = dir.path().join("output.hwpx");
let convert_out = cargo_bin()
.args([
"to-hwpx",
md_src.to_str().unwrap(),
"--output",
hwpx_path.to_str().unwrap(),
])
.output()
.expect("failed to execute hwp2md to-hwpx");
assert!(
convert_out.status.success(),
"to-hwpx failed; stderr: {}",
String::from_utf8_lossy(&convert_out.stderr)
);
assert!(hwpx_path.exists(), "HWPX file was not created");
let md_out = cargo_bin()
.args(["to-md", hwpx_path.to_str().unwrap()])
.output()
.expect("failed to execute hwp2md to-md");
assert!(
md_out.status.success(),
"to-md failed; stderr: {}",
String::from_utf8_lossy(&md_out.stderr)
);
let stdout = String::from_utf8_lossy(&md_out.stdout);
assert!(
stdout.contains("Integration Test") || stdout.contains('#'),
"expected markdown content in stdout, got: {stdout}"
);
}