use use_toml::{
extract_toml_key_values, extract_toml_tables, is_toml_array_table, is_toml_table,
looks_like_toml, quote_toml_string, split_toml_key_value, unquote_toml_string,
};
#[test]
fn detects_tables_and_array_tables() {
assert!(is_toml_table("[package]"));
assert!(is_toml_array_table("[[products]]"));
assert!(looks_like_toml("[package]\nname = \"use-data\"\n"));
}
#[test]
fn splits_key_values() {
assert_eq!(
split_toml_key_value("name = \"use-data\" # comment"),
Some(("name".to_string(), "\"use-data\"".to_string()))
);
}
#[test]
fn extracts_tables_and_key_values() {
let input = "[package]\nname = \"use-data\"\n[[products]]\nid = 1\n";
let tables = extract_toml_tables(input);
let values = extract_toml_key_values(input);
assert_eq!(tables.len(), 2);
assert_eq!(tables[0].line, 1);
assert_eq!(tables[1].name, "products");
assert_eq!(values[0].key, "name");
assert_eq!(values[1].value, "1");
}
#[test]
fn quotes_and_unquotes_strings() {
let quoted = quote_toml_string("line\nbreak");
assert_eq!(quoted, "\"line\\nbreak\"");
assert_eq!(
unquote_toml_string("ed),
Some("line\nbreak".to_string())
);
assert_eq!(
unquote_toml_string("'literal'"),
Some("literal".to_string())
);
}
#[test]
fn handles_malformed_input_gracefully() {
assert_eq!(split_toml_key_value("name"), None);
assert_eq!(split_toml_key_value("key ="), None);
assert_eq!(unquote_toml_string("\"unterminated"), None);
}
#[test]
fn handles_empty_input() {
assert!(!looks_like_toml(" \n # comment only"));
assert!(extract_toml_tables("").is_empty());
assert!(extract_toml_key_values("").is_empty());
}