readable-perms 0.1.3

More usable UNIX file permissions interface
Documentation
#![cfg(test)]

use super::*;

#[test]
fn mask()
{
    assert_eq!(Permissions::new()
	       .add_mask(User::Owner, Bit::Mask)
	       .add_mask(User::Group, Bit::Read | Bit::Execute)
	       .add_mask(User::Other, Bit::Read | Bit::Write)
	       .remove_mask(User::Other, Bit::Write)
	       .mask(),
	       0o754);
}

#[test]
fn from_mask()
{
    let mask = Permissions::from_mask(0o754);
    assert!(mask.has_mask(User::Owner, Bit::Mask));
    assert!(mask.has_mask(User::Group, Bit::Read | Bit::Execute));
    assert!(mask.has_mask(User::Other, Bit::Read));
}

#[test]
fn map()
{
    assert_eq!(&MAP[0o666], &Permissions::from_mask(0o666));
    #[cfg(feature="speedup_hack_stable")] 
    super::generate_build_map();
}


#[cfg(target_family="unix")]
#[test]
fn real_file()
{
    use std::fs::OpenOptions;
    {
	let mut file = OpenOptions::new()
	    .read(true)
	    .write(true)
	    .open("Cargo.toml").expect("File not found");
	#[cfg(feature="chmod")] file.chmod(Permissions::from_mask(0o777)).unwrap();

	let perms = file.metadata().expect("Couldn't stat").permissions().unix();
	assert_eq!(perms, 0o777);
    }
    let p = std::path::Path::new("Cargo.toml");
    p.chmod(0o644u32).unwrap();
}

#[test]
fn sevens()
{
    assert_eq!(0o777u32, Permissions::from_mask(0o777));
    assert_eq!(0o777, Permissions::from_mask(0o777).mask());
    assert_eq!(0o777, Permissions::new().add_mask(User::Owner, Bit::Mask)
	       .add_mask(User::Group, Bit::Mask)
	       .add_mask(User::Other, Bit::Mask)
	       .mask());
}