use use_csv::{
count_csv_columns, csv_escape_field, csv_join_row, detect_delimiter, looks_like_csv,
parse_csv_basic, split_csv_line_basic,
};
#[test]
fn detects_delimiters() {
assert_eq!(detect_delimiter("name;enabled\nRustUse;true\n"), Some(';'));
assert_eq!(
detect_delimiter("name\tenabled\nRustUse\ttrue\n"),
Some('\t')
);
assert!(looks_like_csv("a,b\n1,2\n"));
}
#[test]
fn splits_rows_and_counts_columns() {
assert_eq!(split_csv_line_basic("a,\"b,c\",d"), vec!["a", "b,c", "d"]);
assert_eq!(count_csv_columns("a|b|c"), 3);
}
#[test]
fn escapes_and_joins_fields() {
assert_eq!(csv_escape_field("two,three"), "\"two,three\"");
assert_eq!(
csv_join_row(&["one", "two,three", "four"]),
"one,\"two,three\",four"
);
}
#[test]
fn parses_basic_csv() {
let rows = parse_csv_basic("name,enabled\nRustUse,true\n");
assert_eq!(rows.len(), 2);
assert_eq!(rows[1].line, 2);
assert_eq!(rows[1].fields[0], "RustUse");
}
#[test]
fn handles_malformed_input_gracefully() {
assert_eq!(
split_csv_line_basic("\"unterminated,field"),
vec!["unterminated,field"]
);
}
#[test]
fn handles_empty_input() {
assert!(!looks_like_csv(" \n"));
assert!(parse_csv_basic("").is_empty());
assert_eq!(count_csv_columns(""), 0);
}