History

refactor; add test for empty tree iteration (#79)

Sebastian Thiel committed 5 years ago

Commit 63402961 parent 98709231 file · +59 −42Browse files

Unified · Split

git-object/tests/immutable/tree.rs+59−42
@@ -1,53 +1,18 @@
1mod iter {}1mod iter {
2 2 use crate::{hex_to_id, immutable::fixture_bytes};
3mod from_bytes {
4 use crate::hex_to_id;
5 use crate::immutable::fixture_bytes;
6 use git_object::{3 use git_object::{
7 bstr::ByteSlice,4 bstr::ByteSlice,
8 immutable::{tree::Entry, Tree, TreeIter},5 immutable::{tree::Entry, TreeIter},
9 tree,6 tree,
10 };7 };
11 8
12 #[test]9 #[test]
13 fn everything() -> Result<(), Box<dyn std::error::Error>> {10 fn empty() {
14 assert_eq!(11 assert_eq!(TreeIter::from_bytes(&[]).count(), 0, "empty trees are definitely ok");
15 Tree::from_bytes(&fixture_bytes("tree", "everything.tree"))?,
16 Tree {
17 entries: vec![
18 Entry {
19 mode: tree::EntryMode::BlobExecutable,
20 filename: b"exe".as_bstr(),
21 oid: &hex_to_id("e69de29bb2d1d6434b8b29ae775ad8c2e48c5391")
22 },
23 Entry {
24 mode: tree::EntryMode::Blob,
25 filename: b"file".as_bstr(),
26 oid: &hex_to_id("e69de29bb2d1d6434b8b29ae775ad8c2e48c5391")
27 },
28 Entry {
29 mode: tree::EntryMode::Commit,
30 filename: b"grit-submodule".as_bstr(),
31 oid: &hex_to_id("b2d1b5d684bdfda5f922b466cc13d4ce2d635cf8")
32 },
33 Entry {
34 mode: tree::EntryMode::Tree,
35 filename: b"subdir".as_bstr(),
36 oid: &hex_to_id("4d5fcadc293a348e88f777dc0920f11e7d71441c")
37 },
38 Entry {
39 mode: tree::EntryMode::Link,
40 filename: b"symlink".as_bstr(),
41 oid: &hex_to_id("1a010b1c0f081b2e8901d55307a15c29ff30af0e")
42 }
43 ]
44 }
45 );
46 Ok(())
47 }12 }
48 13
49 #[test]14 #[test]
50 fn iter_error_handling() -> Result<(), Box<dyn std::error::Error>> {15 fn error_handling() -> Result<(), Box<dyn std::error::Error>> {
51 let data = fixture_bytes("tree", "everything.tree");16 let data = fixture_bytes("tree", "everything.tree");
52 let iter = TreeIter::from_bytes(&data[..data.len() / 2]);17 let iter = TreeIter::from_bytes(&data[..data.len() / 2]);
53 let entries = iter.collect::<Vec<_>>();18 let entries = iter.collect::<Vec<_>>();
@@ -59,7 +24,7 @@ mod from_bytes { · 5 unmodified lines
59 }24 }
60 25
61 #[test]26 #[test]
62 fn everything_iter() -> Result<(), Box<dyn std::error::Error>> {27 fn everything() -> Result<(), Box<dyn std::error::Error>> {
63 assert_eq!(28 assert_eq!(
64 TreeIter::from_bytes(&fixture_bytes("tree", "everything.tree")).collect::<Result<Vec<_>, _>>()?,29 TreeIter::from_bytes(&fixture_bytes("tree", "everything.tree")).collect::<Result<Vec<_>, _>>()?,
65 vec![30 vec![
@@ -92,6 +57,58 @@ mod from_bytes { · 26 unmodified lines
92 );57 );
93 Ok(())58 Ok(())
94 }59 }
60}
61
62mod from_bytes {
63 use crate::{hex_to_id, immutable::fixture_bytes};
64 use git_object::{
65 bstr::ByteSlice,
66 immutable::{tree::Entry, Tree},
67 tree,
68 };
69
70 #[test]
71 #[should_panic]
72 fn empty() {
73 assert_eq!(Tree::from_bytes(&[]).unwrap(), Tree { entries: vec![] });
74 }
75
76 #[test]
77 fn everything() -> Result<(), Box<dyn std::error::Error>> {
78 assert_eq!(
79 Tree::from_bytes(&fixture_bytes("tree", "everything.tree"))?,
80 Tree {
81 entries: vec![
82 Entry {
83 mode: tree::EntryMode::BlobExecutable,
84 filename: b"exe".as_bstr(),
85 oid: &hex_to_id("e69de29bb2d1d6434b8b29ae775ad8c2e48c5391")
86 },
87 Entry {
88 mode: tree::EntryMode::Blob,
89 filename: b"file".as_bstr(),
90 oid: &hex_to_id("e69de29bb2d1d6434b8b29ae775ad8c2e48c5391")
91 },
92 Entry {
93 mode: tree::EntryMode::Commit,
94 filename: b"grit-submodule".as_bstr(),
95 oid: &hex_to_id("b2d1b5d684bdfda5f922b466cc13d4ce2d635cf8")
96 },
97 Entry {
98 mode: tree::EntryMode::Tree,
99 filename: b"subdir".as_bstr(),
100 oid: &hex_to_id("4d5fcadc293a348e88f777dc0920f11e7d71441c")
101 },
102 Entry {
103 mode: tree::EntryMode::Link,
104 filename: b"symlink".as_bstr(),
105 oid: &hex_to_id("1a010b1c0f081b2e8901d55307a15c29ff30af0e")
106 }
107 ]
108 }
109 );
110 Ok(())
111 }
95 112
96 #[test]113 #[test]
97 fn maybe_special() -> Result<(), Box<dyn std::error::Error>> {114 fn maybe_special() -> Result<(), Box<dyn std::error::Error>> {