Add multipaths tests

This commit is contained in:
Félix Saparelli 2021-12-08 21:25:03 +13:00
parent e9275702d1
commit 89fd99a683
No known key found for this signature in database
GPG Key ID: B948C4BAE44FC474
1 changed files with 114 additions and 0 deletions

View File

@ -9,6 +9,11 @@ use watchexec::{
paths::summarise_events_to_env,
};
#[cfg(unix)]
const ENV_SEP: &str = ":";
#[cfg(not(unix))]
const ENV_SEP: &str = ";";
fn ospath(path: &str) -> OsString {
let root = dunce::canonicalize(".").unwrap();
if path.is_empty() {
@ -120,3 +125,112 @@ fn single_otherwise() {
])
);
}
#[test]
fn all_types_once() {
let events = vec![
event("create.txt", FileEventKind::Create(CreateKind::File)),
event(
"metadata.txt",
FileEventKind::Modify(ModifyKind::Metadata(MetadataKind::Any)),
),
event("remove.txt", FileEventKind::Remove(RemoveKind::File)),
event(
"rename.txt",
FileEventKind::Modify(ModifyKind::Name(RenameMode::Any)),
),
event(
"modify.txt",
FileEventKind::Modify(ModifyKind::Data(DataChange::Any)),
),
event("any.txt", FileEventKind::Any),
];
assert_eq!(
summarise_events_to_env(&events),
HashMap::from([
(OsStr::new("CREATED"), OsString::from("create.txt")),
(OsStr::new("META_CHANGED"), OsString::from("metadata.txt")),
(OsStr::new("REMOVED"), OsString::from("remove.txt")),
(OsStr::new("RENAMED"), OsString::from("rename.txt")),
(OsStr::new("WRITTEN"), OsString::from("modify.txt")),
(OsStr::new("OTHERWISE_CHANGED"), OsString::from("any.txt")),
(OsStr::new("COMMON_PATH"), ospath("")),
])
);
}
#[test]
fn single_type_multipath() {
let events = vec![
event("root.txt", FileEventKind::Create(CreateKind::File)),
event("sub/folder.txt", FileEventKind::Create(CreateKind::File)),
event("dom/folder.txt", FileEventKind::Create(CreateKind::File)),
event(
"deeper/sub/folder.txt",
FileEventKind::Create(CreateKind::File),
),
];
assert_eq!(
summarise_events_to_env(&events),
HashMap::from([
(
OsStr::new("CREATED"),
OsString::from(
"".to_string()
+ "root.txt" + ENV_SEP + "sub/folder.txt"
+ ENV_SEP + "dom/folder.txt"
+ ENV_SEP + "deeper/sub/folder.txt"
)
),
(OsStr::new("COMMON_PATH"), ospath("")),
])
);
}
#[test]
fn single_type_divergent_paths() {
let events = vec![
event("sub/folder.txt", FileEventKind::Create(CreateKind::File)),
event("dom/folder.txt", FileEventKind::Create(CreateKind::File)),
];
assert_eq!(
summarise_events_to_env(&events),
HashMap::from([
(
OsStr::new("CREATED"),
OsString::from("".to_string() + "sub/folder.txt" + ENV_SEP + "dom/folder.txt")
),
(OsStr::new("COMMON_PATH"), ospath("")),
])
);
}
#[test]
fn multitype_multipath() {
let events = vec![
event("root.txt", FileEventKind::Create(CreateKind::File)),
event("sibling.txt", FileEventKind::Create(CreateKind::Any)),
event(
"sub/folder.txt",
FileEventKind::Modify(ModifyKind::Metadata(MetadataKind::Ownership)),
),
event("dom/folder.txt", FileEventKind::Remove(RemoveKind::Folder)),
event("deeper/sub/folder.txt", FileEventKind::Other),
];
assert_eq!(
summarise_events_to_env(&events),
HashMap::from([
(
OsStr::new("CREATED"),
OsString::from("".to_string() + "root.txt" + ENV_SEP + "sibling.txt"),
),
(OsStr::new("META_CHANGED"), OsString::from("sub/folder.txt"),),
(OsStr::new("REMOVED"), OsString::from("dom/folder.txt"),),
(
OsStr::new("OTHERWISE_CHANGED"),
OsString::from("deeper/sub/folder.txt"),
),
(OsStr::new("COMMON_PATH"), ospath("")),
])
);
}