use gix_object::tree::{EntryKind, EntryMode}; #[test]fn size_in_bytes() { assert_eq!( std::mem::size_of::<EntryMode>(), 2, "it should not change without notice" );} #[test]fn is_methods() { fn mode(kind: EntryKind) -> EntryMode { kind.into() } assert!(mode(EntryKind::Blob).is_blob()); assert!(EntryMode::from_bytes(b"100645").unwrap().is_blob()); assert_eq!(EntryMode::from_bytes(b"100645").unwrap().kind(), EntryKind::Blob); assert!(!EntryMode::from_bytes(b"100675").unwrap().is_executable()); assert!(EntryMode::from_bytes(b"100700").unwrap().is_executable()); assert_eq!( EntryMode::from_bytes(b"100700").unwrap().kind(), EntryKind::BlobExecutable ); assert!(!mode(EntryKind::Blob).is_link()); assert!(mode(EntryKind::BlobExecutable).is_blob()); assert!(mode(EntryKind::BlobExecutable).is_executable()); assert!(mode(EntryKind::Blob).is_blob_or_symlink()); assert!(mode(EntryKind::BlobExecutable).is_blob_or_symlink()); assert!(!mode(EntryKind::Link).is_blob()); assert!(mode(EntryKind::Link).is_link()); assert!(EntryMode::from_bytes(b"121234").unwrap().is_link()); assert_eq!(EntryMode::from_bytes(b"121234").unwrap().kind(), EntryKind::Link); assert!(mode(EntryKind::Link).is_blob_or_symlink()); assert!(mode(EntryKind::Tree).is_tree()); assert!(EntryMode::from_bytes(b"040101").unwrap().is_tree()); assert_eq!(EntryMode::from_bytes(b"040101").unwrap().kind(), EntryKind::Tree); assert!(EntryMode::from_bytes(b"40101").unwrap().is_tree()); assert_eq!(EntryMode::from_bytes(b"40101").unwrap().kind(), EntryKind::Tree); assert!(mode(EntryKind::Commit).is_commit()); assert!(EntryMode::from_bytes(b"167124").unwrap().is_commit()); assert_eq!(EntryMode::from_bytes(b"167124").unwrap().kind(), EntryKind::Commit); assert_eq!( EntryMode::from_bytes(b"000000").unwrap().kind(), EntryKind::Commit, "commit is really 'anything else' as `kind()` can't fail" );} #[test]fn as_bytes() { let mut buf = Default::default(); for (mode, expected) in [ (EntryMode::from(EntryKind::Tree), EntryKind::Tree.as_octal_str()), (EntryKind::Blob.into(), EntryKind::Blob.as_octal_str()), ( EntryKind::BlobExecutable.into(), EntryKind::BlobExecutable.as_octal_str(), ), (EntryKind::Link.into(), EntryKind::Link.as_octal_str()), (EntryKind::Commit.into(), EntryKind::Commit.as_octal_str()), ( EntryMode::from_bytes(b"100744 ".as_ref()).expect("valid"), "100744".into(), ), ( EntryMode::from_bytes(b"100644 ".as_ref()).expect("valid"), "100644".into(), ), ( EntryMode::from_bytes(b"040000".as_ref()).expect("valid"), "040000".into(), ), (EntryMode::from_bytes(b"40000".as_ref()).expect("valid"), "40000".into()), ] { assert_eq!(mode.as_bytes(&mut buf), expected); }}
use gix_object::tree::{EntryKind, EntryMode};
#[test]
fn size_in_bytes() {
assert_eq!(
std::mem::size_of::<EntryMode>(),
2,
"it should not change without notice"
);
}
#[test]
fn is_methods() {
fn mode(kind: EntryKind) -> EntryMode {
kind.into()
}
assert!(mode(EntryKind::Blob).is_blob());
assert!(EntryMode::from_bytes(b"100645").unwrap().is_blob());
assert_eq!(EntryMode::from_bytes(b"100645").unwrap().kind(), EntryKind::Blob);
assert!(!EntryMode::from_bytes(b"100675").unwrap().is_executable());
assert!(EntryMode::from_bytes(b"100700").unwrap().is_executable());
assert_eq!(
EntryMode::from_bytes(b"100700").unwrap().kind(),
EntryKind::BlobExecutable
);
assert!(!mode(EntryKind::Blob).is_link());
assert!(mode(EntryKind::BlobExecutable).is_blob());
assert!(mode(EntryKind::BlobExecutable).is_executable());
assert!(mode(EntryKind::Blob).is_blob_or_symlink());
assert!(mode(EntryKind::BlobExecutable).is_blob_or_symlink());
assert!(!mode(EntryKind::Link).is_blob());
assert!(mode(EntryKind::Link).is_link());
assert!(EntryMode::from_bytes(b"121234").unwrap().is_link());
assert_eq!(EntryMode::from_bytes(b"121234").unwrap().kind(), EntryKind::Link);
assert!(mode(EntryKind::Link).is_blob_or_symlink());
assert!(mode(EntryKind::Tree).is_tree());
assert!(EntryMode::from_bytes(b"040101").unwrap().is_tree());
assert_eq!(EntryMode::from_bytes(b"040101").unwrap().kind(), EntryKind::Tree);
assert!(EntryMode::from_bytes(b"40101").unwrap().is_tree());
assert_eq!(EntryMode::from_bytes(b"40101").unwrap().kind(), EntryKind::Tree);
assert!(mode(EntryKind::Commit).is_commit());
assert!(EntryMode::from_bytes(b"167124").unwrap().is_commit());
assert_eq!(EntryMode::from_bytes(b"167124").unwrap().kind(), EntryKind::Commit);
assert_eq!(
EntryMode::from_bytes(b"000000").unwrap().kind(),
EntryKind::Commit,
"commit is really 'anything else' as `kind()` can't fail"
);
}
#[test]
fn as_bytes() {
let mut buf = Default::default();
for (mode, expected) in [
(EntryMode::from(EntryKind::Tree), EntryKind::Tree.as_octal_str()),
(EntryKind::Blob.into(), EntryKind::Blob.as_octal_str()),
(
EntryKind::BlobExecutable.into(),
EntryKind::BlobExecutable.as_octal_str(),
),
(EntryKind::Link.into(), EntryKind::Link.as_octal_str()),
(EntryKind::Commit.into(), EntryKind::Commit.as_octal_str()),
(
EntryMode::from_bytes(b"100744 ".as_ref()).expect("valid"),
"100744".into(),
),
(
EntryMode::from_bytes(b"100644 ".as_ref()).expect("valid"),
"100644".into(),
),
(
EntryMode::from_bytes(b"040000".as_ref()).expect("valid"),
"040000".into(),
),
(EntryMode::from_bytes(b"40000".as_ref()).expect("valid"), "40000".into()),
] {
assert_eq!(mode.as_bytes(&mut buf), expected);
}
}