use std::path::Path;
use super::*;
fn parse(text: &str) -> Result<Config, ConfigError> {
Config::parse(text, Path::new("config.toml (test)"))
}
#[test]
fn the_shipped_defaults_satisfy_the_schema() {
let config = parse(DEFAULT).unwrap();
assert_eq!(config.skills.dir, "skills");
}
#[test]
fn an_unknown_table_is_refused() {
let text = format!("{DEFAULT}\n[garden]\ngnome = true\n");
let error = parse(&text).unwrap_err().to_string();
assert!(error.contains("garden"), "{error}");
}
#[test]
fn an_unknown_key_is_refused() {
let text = DEFAULT.replacen("dir = \"skills\"", "dir = \"skills\"\nglob = \"*\"", 1);
assert!(parse(&text).is_err());
}
#[test]
fn a_missing_key_is_refused() {
let text = DEFAULT.replacen("dir = \"skills\"", "", 1);
let error = parse(&text).unwrap_err().to_string();
assert!(error.contains("dir"), "{error}");
}
#[test]
fn a_wrong_type_is_refused() {
let text = DEFAULT.replacen("dir = \"skills\"", "dir = false", 1);
assert!(parse(&text).is_err());
}
#[test]
fn an_empty_dir_is_refused() {
let text = DEFAULT.replacen("dir = \"skills\"", "dir = \"\"", 1);
let error = parse(&text).unwrap_err().to_string();
assert!(error.contains("skills.dir"), "{error}");
}
#[test]
fn the_error_names_the_file_and_the_way_out() {
let error = parse("").unwrap_err().to_string();
assert!(error.contains("config.toml (test)"), "{error}");
assert!(error.contains("delete"), "{error}");
}