use sheeter_engine::{detect_content, detect_extension, Format};
use std::path::Path;
#[test]
fn detects_json_array() {
assert_eq!(detect_content(b"[1,2,3]").unwrap(), Format::Json);
}
#[test]
fn detects_json_object() {
assert_eq!(detect_content(b"{\"a\":1}").unwrap(), Format::Json);
}
#[test]
fn detects_ndjson() {
assert_eq!(
detect_content(b"{\"a\":1}\n{\"a\":2}\n").unwrap(),
Format::Ndjson
);
}
#[test]
fn detects_xml() {
assert_eq!(detect_content(b"<r><a>1</a></r>").unwrap(), Format::Xml);
}
#[test]
fn detects_csv() {
assert_eq!(
detect_content(b"name,age\nAlice,30\n").unwrap(),
Format::Csv
);
}
#[test]
fn detects_tsv() {
assert_eq!(
detect_content(b"name\tage\nAlice\t30\n").unwrap(),
Format::Tsv
);
}
#[test]
fn detects_toml() {
assert_eq!(
detect_content(b"name = \"Alice\"\nage = 30\n").unwrap(),
Format::Toml
);
}
#[test]
fn detects_yaml() {
assert_eq!(
detect_content(b"- name: Alice\n age: 30\n").unwrap(),
Format::Yaml
);
}
#[test]
fn bom_stripped_before_detection() {
let with_bom = b"\xef\xbb\xbfname,age\nAlice,30\n";
assert_eq!(detect_content(with_bom).unwrap(), Format::Csv);
}
#[test]
fn empty_input_errors() {
assert!(detect_content(b"").is_err());
}
#[test]
fn extension_csv() {
assert_eq!(detect_extension(Path::new("data.csv")), Some(Format::Csv));
}
#[test]
fn extension_jsonl_maps_to_ndjson() {
assert_eq!(
detect_extension(Path::new("events.jsonl")),
Some(Format::Ndjson)
);
}
#[test]
fn extension_unknown_returns_none() {
assert_eq!(detect_extension(Path::new("data.xyz")), None);
}
#[test]
fn detects_ods_by_content() {
use sheeter_engine::CanonicalValue;
let hub = CanonicalValue::from_csv("a\n1\n").unwrap();
let ods = sheeter_engine::to_ods_workbook(&[("Sheet1".to_string(), hub)]).unwrap();
assert_eq!(detect_content(&ods).unwrap(), Format::Ods);
}
#[test]
fn detects_xlsx_by_content() {
use sheeter_engine::CanonicalValue;
let hub = CanonicalValue::from_csv("a\n1\n").unwrap();
let bytes = CanonicalValue::to_xlsx_workbook(&[("Sheet1".to_string(), hub.clone())]).unwrap();
assert_eq!(detect_content(&bytes).unwrap(), Format::Xlsx);
}
#[test]
fn rejects_random_zip() {
let bogus = b"PK\x03\x04this is not a real zip";
assert!(detect_content(bogus).is_err());
}
#[test]
fn rejects_odt_mimetype() {
assert_eq!(detect_content(b"a,b\n1,2\n").unwrap(), Format::Csv);
}