blob: 24f78a5b11798abff52a3e831d82b7aed43cf4b8 [file] [log] [blame]
// This file is dual-licensed under the Artistic License 2.0 as per the
// LICENSE.ARTISTIC file, and the Creative Commons Zero 1.0 license.
use notify::event::*;
#[cfg(feature = "serde")]
use serde_json::json;
#[test]
fn events_are_debuggable() {
assert_eq!(format!("{:?}", EventKind::Any), String::from("Any"));
assert_eq!(
format!(
"{:?}",
EventKind::Access(AccessKind::Open(AccessMode::Execute))
),
String::from("Access(Open(Execute))")
);
let mut attrs = EventAttributes::new();
attrs.set_info("unmount".into());
attrs.set_flag(Flag::Rescan);
assert_eq!(
format!(
"{:?}",
Event {
kind: EventKind::Remove(RemoveKind::Other),
paths: vec!["/example".into()],
attrs
}
),
String::from(
"Event { kind: Remove(Other), paths: [\"/example\"], attr:tracker: None, attr:flag: Some(Rescan), attr:info: Some(\"unmount\"), attr:source: None }"
)
);
}
#[cfg(feature = "serde")]
#[test]
fn events_are_serializable() {
assert_eq!(json!(EventKind::Any), json!("any"));
assert_eq!(json!(EventKind::Other), json!("other"));
assert_eq!(
json!(Event {
kind: EventKind::Access(AccessKind::Open(AccessMode::Execute)),
paths: Vec::new(),
attrs: EventAttributes::new(),
}),
json!({
"type": { "access": { "kind": "open", "mode": "execute" } },
"paths": [],
"attrs": {},
})
);
let mut attrs = EventAttributes::new();
attrs.set_info("unmount".into());
assert_eq!(
json!(Event {
kind: EventKind::Remove(RemoveKind::Other),
paths: vec!["/example".into()],
attrs: attrs.clone(),
}),
json!({
"type": { "remove": { "kind": "other" } },
"paths": ["/example"],
"attrs": { "info": "unmount" }
}),
"{:#?} != {:#?}",
json!(Event {
kind: EventKind::Remove(RemoveKind::Other),
paths: vec!["/example".into()],
attrs: attrs.clone(),
}),
json!({
"type": { "remove": { "kind": "other" } },
"paths": ["/example"],
"attrs": { "info": "unmount" }
}),
);
}
#[cfg(feature = "serde")]
#[test]
fn events_are_deserializable() {
assert_eq!(
serde_json::from_str::<EventKind>(r#""any""#).unwrap(),
EventKind::Any
);
assert_eq!(
serde_json::from_str::<EventKind>(r#""other""#).unwrap(),
EventKind::Other
);
assert_eq!(
serde_json::from_str::<Event>(
r#"{
"type": { "access": { "kind": "open", "mode": "execute" } },
"paths": [],
"attrs": {}
}"#
)
.unwrap(),
Event {
kind: EventKind::Access(AccessKind::Open(AccessMode::Execute)),
paths: Vec::new(),
attrs: EventAttributes::new(),
}
);
let mut attrs = EventAttributes::new();
attrs.set_info("unmount".into());
assert_eq!(
serde_json::from_str::<Event>(
r#"{
"type": { "remove": { "kind": "other" } },
"paths": ["/example"],
"attrs": { "info": "unmount" }
}"#
)
.unwrap(),
Event {
kind: EventKind::Remove(RemoveKind::Other),
paths: vec!["/example".into()],
attrs
}
);
}
#[cfg(feature = "serde")]
#[test]
fn access_events_are_serializable() {
assert_eq!(
json!(EventKind::Access(AccessKind::Any)),
json!({
"access": { "kind": "any" }
})
);
assert_eq!(
json!(EventKind::Access(AccessKind::Read)),
json!({
"access": { "kind": "read" }
})
);
assert_eq!(
json!(EventKind::Access(AccessKind::Open(AccessMode::Any))),
json!({
"access": { "kind": "open", "mode": "any" }
})
);
assert_eq!(
json!(EventKind::Access(AccessKind::Open(AccessMode::Execute))),
json!({
"access": { "kind": "open", "mode": "execute" }
})
);
assert_eq!(
json!(EventKind::Access(AccessKind::Open(AccessMode::Read))),
json!({
"access": { "kind": "open", "mode": "read" }
})
);
assert_eq!(
json!(EventKind::Access(AccessKind::Close(AccessMode::Write))),
json!({
"access": { "kind": "close", "mode": "write" }
})
);
assert_eq!(
json!(EventKind::Access(AccessKind::Close(AccessMode::Other))),
json!({
"access": { "kind": "close", "mode": "other" }
})
);
assert_eq!(
json!(EventKind::Access(AccessKind::Other)),
json!({
"access": { "kind": "other" }
})
);
}
#[cfg(feature = "serde")]
#[test]
fn create_events_are_serializable() {
assert_eq!(
json!(EventKind::Create(CreateKind::Any)),
json!({
"create": { "kind": "any" }
})
);
assert_eq!(
json!(EventKind::Create(CreateKind::File)),
json!({
"create": { "kind": "file" }
})
);
assert_eq!(
json!(EventKind::Create(CreateKind::Folder)),
json!({
"create": { "kind": "folder" }
})
);
assert_eq!(
json!(EventKind::Create(CreateKind::Other)),
json!({
"create": { "kind": "other" }
})
);
}
#[cfg(feature = "serde")]
#[test]
fn modify_events_are_serializable() {
assert_eq!(
json!(EventKind::Modify(ModifyKind::Any)),
json!({
"modify": { "kind": "any" }
})
);
assert_eq!(
json!(EventKind::Modify(ModifyKind::Data(DataChange::Any))),
json!({
"modify": { "kind": "data", "mode": "any" }
})
);
assert_eq!(
json!(EventKind::Modify(ModifyKind::Data(DataChange::Size))),
json!({
"modify": { "kind": "data", "mode": "size" }
})
);
assert_eq!(
json!(EventKind::Modify(ModifyKind::Data(DataChange::Content))),
json!({
"modify": { "kind": "data", "mode": "content" }
})
);
assert_eq!(
json!(EventKind::Modify(ModifyKind::Data(DataChange::Other))),
json!({
"modify": { "kind": "data", "mode": "other" }
})
);
assert_eq!(
json!(EventKind::Modify(ModifyKind::Metadata(MetadataKind::Any))),
json!({
"modify": { "kind": "metadata", "mode": "any" }
})
);
assert_eq!(
json!(EventKind::Modify(ModifyKind::Metadata(
MetadataKind::AccessTime
))),
json!({
"modify": { "kind": "metadata", "mode": "access-time" }
})
);
assert_eq!(
json!(EventKind::Modify(ModifyKind::Metadata(
MetadataKind::WriteTime
))),
json!({
"modify": { "kind": "metadata", "mode": "write-time" }
})
);
assert_eq!(
json!(EventKind::Modify(ModifyKind::Metadata(
MetadataKind::Permissions
))),
json!({
"modify": { "kind": "metadata", "mode": "permissions" }
})
);
assert_eq!(
json!(EventKind::Modify(ModifyKind::Metadata(
MetadataKind::Ownership
))),
json!({
"modify": { "kind": "metadata", "mode": "ownership" }
})
);
assert_eq!(
json!(EventKind::Modify(ModifyKind::Metadata(
MetadataKind::Extended
))),
json!({
"modify": { "kind": "metadata", "mode": "extended" }
})
);
assert_eq!(
json!(EventKind::Modify(ModifyKind::Metadata(MetadataKind::Other))),
json!({
"modify": { "kind": "metadata", "mode": "other" }
})
);
assert_eq!(
json!(EventKind::Modify(ModifyKind::Name(RenameMode::Any))),
json!({
"modify": { "kind": "rename", "mode": "any" }
})
);
assert_eq!(
json!(EventKind::Modify(ModifyKind::Name(RenameMode::To))),
json!({
"modify": { "kind": "rename", "mode": "to" }
})
);
assert_eq!(
json!(EventKind::Modify(ModifyKind::Name(RenameMode::From))),
json!({
"modify": { "kind": "rename", "mode": "from" }
})
);
assert_eq!(
json!(EventKind::Modify(ModifyKind::Name(RenameMode::Both))),
json!({
"modify": { "kind": "rename", "mode": "both" }
})
);
assert_eq!(
json!(EventKind::Modify(ModifyKind::Name(RenameMode::Other))),
json!({
"modify": { "kind": "rename", "mode": "other" }
})
);
assert_eq!(
json!(EventKind::Modify(ModifyKind::Other)),
json!({
"modify": { "kind": "other" }
})
);
}
#[cfg(feature = "serde")]
#[test]
fn remove_events_are_serializable() {
assert_eq!(
json!(EventKind::Remove(RemoveKind::Any)),
json!({
"remove": { "kind": "any" }
})
);
assert_eq!(
json!(EventKind::Remove(RemoveKind::File)),
json!({
"remove": { "kind": "file" }
})
);
assert_eq!(
json!(EventKind::Remove(RemoveKind::Folder)),
json!({
"remove": { "kind": "folder" }
})
);
assert_eq!(
json!(EventKind::Remove(RemoveKind::Other)),
json!({
"remove": { "kind": "other" }
})
);
}