use super::{data_root, keep_of, root_of, state_root};
use std::ffi::OsString;
use std::path::PathBuf;
fn stated(text: &str) -> OsString {
OsString::from(text)
}
#[test]
fn the_xdg_variable_names_the_root_outright() {
assert_eq!(
root_of(Some(stated("/var/lib/app")), Some(stated("/home/u"))),
Ok(PathBuf::from("/var/lib/app/lernie"))
);
}
#[test]
fn without_it_the_root_is_the_convention_under_the_home_directory() {
assert_eq!(
root_of(None, Some(stated("/home/u"))),
Ok(PathBuf::from("/home/u/.local/share/lernie"))
);
}
#[test]
fn a_variable_with_no_value_has_said_nothing() {
assert_eq!(
root_of(Some(stated("")), Some(stated("/home/u"))),
Ok(PathBuf::from("/home/u/.local/share/lernie"))
);
assert!(root_of(Some(stated("")), Some(stated(""))).is_err());
}
#[test]
fn neither_variable_set_refuses_and_names_them_both() {
let refusal = root_of(None, None).expect_err("refused");
assert!(refusal.contains("XDG_DATA_HOME"), "{refusal}");
assert!(refusal.contains("HOME"), "{refusal}");
assert!(refusal.contains("will not guess"), "{refusal}");
}
#[test]
fn the_edge_read_is_the_rule_applied_to_this_process() {
assert_eq!(
data_root(),
root_of(std::env::var_os("XDG_DATA_HOME"), std::env::var_os("HOME"))
);
}
#[test]
fn the_data_root_is_the_crate_s_own_name_under_the_convention() {
let root = root_of(Some(stated("/data")), None).expect("named");
assert_eq!(root, PathBuf::from("/data/lernie"));
assert_eq!(
crate::channel::entries::flat(&root),
PathBuf::from("/data/lernie/wire"),
"everything this crate reads is under one subdirectory of the root"
);
}
#[test]
fn what_the_seat_generates_never_lands_beside_what_the_operator_carried() {
let data = root_of(None, Some(stated("/home/u"))).expect("named");
let kept = keep_of(None, Some(stated("/home/u"))).expect("named");
assert_eq!(data, PathBuf::from("/home/u/.local/share/lernie"));
assert_eq!(kept, PathBuf::from("/home/u/.local/state/lernie"));
assert!(!kept.starts_with(&data), "{kept:?} under {data:?}");
assert!(!data.starts_with(&kept), "{data:?} under {kept:?}");
}
#[test]
fn the_state_variable_names_its_root_and_an_empty_one_says_nothing() {
assert_eq!(
keep_of(Some(stated("/var/state")), Some(stated("/home/u"))),
Ok(PathBuf::from("/var/state/lernie"))
);
assert_eq!(
keep_of(Some(stated("")), Some(stated("/home/u"))),
Ok(PathBuf::from("/home/u/.local/state/lernie"))
);
}
#[test]
fn an_unnameable_state_root_costs_only_what_the_window_remembers() {
let refusal = keep_of(None, None).expect_err("refused");
assert!(refusal.contains("XDG_STATE_HOME"), "{refusal}");
assert!(refusal.contains("HOME"), "{refusal}");
assert!(refusal.contains("remembers between runs"), "{refusal}");
assert!(
!refusal.contains("certificates"),
"nothing irreplaceable is at stake here: {refusal}"
);
}
#[test]
fn the_state_edge_read_is_the_rule_applied_to_this_process() {
assert_eq!(
state_root(),
keep_of(std::env::var_os("XDG_STATE_HOME"), std::env::var_os("HOME"))
);
}