#[allow(dead_code)]
fn write_tmp(name: &str, content: &[u8]) -> std::path::PathBuf {
let dir = std::env::temp_dir().join("docparser_sdk_features_test");
std::fs::create_dir_all(&dir).unwrap();
let p = dir.join(name);
std::fs::write(&p, content).unwrap();
p
}
#[cfg(not(any(feature = "md", feature = "csv", feature = "html")))]
#[test]
fn bare_kernel_still_parses_txt() {
let p = write_tmp("bare.txt", b"a\n\nb\n");
let doc = docparser_sdk::parse(p.to_str().unwrap()).unwrap();
std::fs::remove_file(&p).ok();
assert_eq!(doc.meta.file_type, "txt");
assert_eq!(doc.pages[0].blocks.len(), 2);
}
#[cfg(all(feature = "csv", not(feature = "md")))]
#[test]
fn disabled_markdown_reports_unsupported() {
let p = write_tmp("off.md", b"# t\n");
let err = docparser_sdk::parse(p.to_str().unwrap()).unwrap_err();
std::fs::remove_file(&p).ok();
assert_eq!(err.code.as_str(), "unsupported");
}
#[cfg(all(feature = "csv", not(feature = "md")))]
#[test]
fn enabled_csv_still_works() {
let p = write_tmp("on.csv", b"h1,h2\n\"a,1\",2\n");
let doc = docparser_sdk::parse(p.to_str().unwrap()).unwrap();
std::fs::remove_file(&p).ok();
assert_eq!(doc.meta.file_type, "csv");
assert_eq!(
doc.pages[0].blocks[0].table.as_ref().unwrap().rows[1],
vec!["a,1", "2"]
);
}
#[cfg(all(feature = "docx", not(any(feature = "xlsx", feature = "pptx"))))]
#[test]
fn office_formats_follow_features() {
assert_eq!(docparser_sdk::office::FORMATS, &["docx"]);
}
#[cfg(all(feature = "docx", not(any(feature = "xlsx", feature = "pptx"))))]
#[test]
fn disabled_office_formats_report_unsupported() {
for name in ["off.xlsx", "off.pptx"] {
let p = write_tmp(name, b"PK\x03\x04");
let err = docparser_sdk::parse(p.to_str().unwrap()).unwrap_err();
std::fs::remove_file(&p).ok();
assert_eq!(err.code.as_str(), "unsupported", "{name} 应报 unsupported");
}
}