#![cfg(test)]
use {
std::fs,
crate::Result,
super::{FilePermissions, Permissions, RawPermission},
};
#[cfg(unix)]
use std::os::unix::prelude::PermissionsExt;
#[cfg(unix)]
#[test]
fn permissions() {
assert_eq!(RawPermission::try_from(Permissions::None as isize).unwrap(), 0);
assert_eq!(RawPermission::try_from(Permissions::Read as isize).unwrap(), 4);
assert_eq!(RawPermission::try_from(Permissions::Write as isize).unwrap(), 2);
assert_eq!(RawPermission::try_from(Permissions::Execute as isize).unwrap(), 1);
assert_eq!(Permissions::ReadWrite as RawPermission, Permissions::Read as RawPermission | Permissions::Write as RawPermission);
assert_eq!(Permissions::ReadExecute as RawPermission, Permissions::Read as RawPermission | Permissions::Execute as RawPermission);
assert_eq!(Permissions::WriteExecute as RawPermission, Permissions::Write as RawPermission | Permissions::Execute as RawPermission);
assert_eq!(
Permissions::ReadWriteExecute as RawPermission,
Permissions::Read as RawPermission | Permissions::Write as RawPermission | Permissions::Execute as RawPermission,
);
}
#[cfg(unix)]
#[test]
fn file_permissions() -> Result<()> {
let file_permissions = FilePermissions::new(Permissions::Read, Permissions::ReadWrite, Permissions::Write);
assert_eq!(file_permissions.user(), &Permissions::Read);
assert_eq!(file_permissions.group(), &Permissions::ReadWrite);
assert_eq!(file_permissions.others(), &Permissions::Write);
assert_ne!(file_permissions.user(), file_permissions.group());
assert_ne!(file_permissions.user(), file_permissions.others());
assert_ne!(file_permissions.group(), file_permissions.others());
{
let permissions = fs::Permissions::from(&file_permissions);
assert_eq!(permissions.mode() << 23 >> 23, 0o462);
assert_eq!(FilePermissions::try_from(permissions)?, file_permissions);
}
Ok(())
}