144 lines · 4.6 KB · Rust
RawDownload
mod iter {    use git_object::{bstr::ByteSlice, tree, tree::EntryRef, TreeRefIter};     use crate::{hex_to_id, immutable::fixture_bytes};     #[test]    fn empty() {        assert_eq!(TreeRefIter::from_bytes(&[]).count(), 0, "empty trees are definitely ok");    }     #[test]    fn error_handling() {        let data = fixture_bytes("tree", "everything.tree");        let iter = TreeRefIter::from_bytes(&data[..data.len() / 2]);        let entries = iter.collect::<Vec<_>>();        assert!(            entries.last().expect("at least one token").is_err(),            "errors are propagated and none is returned from that point on"        );    }     #[test]    fn everything() -> crate::Result {        assert_eq!(            TreeRefIter::from_bytes(&fixture_bytes("tree", "everything.tree")).collect::<Result<Vec<_>, _>>()?,            vec![                EntryRef {                    mode: tree::EntryMode::BlobExecutable,                    filename: b"exe".as_bstr(),                    oid: &hex_to_id("e69de29bb2d1d6434b8b29ae775ad8c2e48c5391")                },                EntryRef {                    mode: tree::EntryMode::Blob,                    filename: b"file".as_bstr(),                    oid: &hex_to_id("e69de29bb2d1d6434b8b29ae775ad8c2e48c5391")                },                EntryRef {                    mode: tree::EntryMode::Commit,                    filename: b"grit-submodule".as_bstr(),                    oid: &hex_to_id("b2d1b5d684bdfda5f922b466cc13d4ce2d635cf8")                },                EntryRef {                    mode: tree::EntryMode::Tree,                    filename: b"subdir".as_bstr(),                    oid: &hex_to_id("4d5fcadc293a348e88f777dc0920f11e7d71441c")                },                EntryRef {                    mode: tree::EntryMode::Link,                    filename: b"symlink".as_bstr(),                    oid: &hex_to_id("1a010b1c0f081b2e8901d55307a15c29ff30af0e")                }            ]        );        Ok(())    }} mod from_bytes {    use git_object::{bstr::ByteSlice, tree, tree::EntryRef, TreeRef};     use crate::{hex_to_id, immutable::fixture_bytes};     #[test]    fn empty() -> crate::Result {        assert_eq!(            TreeRef::from_bytes(&[])?,            TreeRef { entries: vec![] },            "empty trees are valid despite usually rare in the wild"        );        Ok(())    }     #[test]    fn everything() -> crate::Result {        assert_eq!(            TreeRef::from_bytes(&fixture_bytes("tree", "everything.tree"))?,            TreeRef {                entries: vec![                    EntryRef {                        mode: tree::EntryMode::BlobExecutable,                        filename: b"exe".as_bstr(),                        oid: &hex_to_id("e69de29bb2d1d6434b8b29ae775ad8c2e48c5391")                    },                    EntryRef {                        mode: tree::EntryMode::Blob,                        filename: b"file".as_bstr(),                        oid: &hex_to_id("e69de29bb2d1d6434b8b29ae775ad8c2e48c5391")                    },                    EntryRef {                        mode: tree::EntryMode::Commit,                        filename: b"grit-submodule".as_bstr(),                        oid: &hex_to_id("b2d1b5d684bdfda5f922b466cc13d4ce2d635cf8")                    },                    EntryRef {                        mode: tree::EntryMode::Tree,                        filename: b"subdir".as_bstr(),                        oid: &hex_to_id("4d5fcadc293a348e88f777dc0920f11e7d71441c")                    },                    EntryRef {                        mode: tree::EntryMode::Link,                        filename: b"symlink".as_bstr(),                        oid: &hex_to_id("1a010b1c0f081b2e8901d55307a15c29ff30af0e")                    }                ]            }        );        Ok(())    }     #[test]    fn maybe_special() -> crate::Result {        assert_eq!(            TreeRef::from_bytes(&fixture_bytes("tree", "maybe-special.tree"))?                .entries                .len(),            160        );        Ok(())    }     #[test]    fn definitely_special() -> crate::Result {        assert_eq!(            TreeRef::from_bytes(&fixture_bytes("tree", "definitely-special.tree"))?                .entries                .len(),            19        );        Ok(())    }} mod entry_mode {    use git_object::tree::EntryMode;     #[test]    fn size_in_bytes() {        assert_eq!(            std::mem::size_of::<EntryMode>(),            2,            "it should not change without notiice"        );    }}