From 3ca2c592d91c9aa8fab8ed749871d6d96f2ef4e2 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Mon, 15 Jun 2020 14:40:41 +0800 Subject: [PATCH] move parsing tests close to actual parsing --- git-odb/src/object/mod.rs | 5 -- .../src/object/{parsed.rs => parsed/mod.rs} | 3 + git-odb/src/object/parsed/tests.rs | 64 +++++++++++++++++++ git-odb/tests/loose.rs | 31 +++------ src/main.rs | 2 +- tasks.md | 2 +- 6 files changed, 79 insertions(+), 28 deletions(-) rename git-odb/src/object/{parsed.rs => parsed/mod.rs} (99%) create mode 100644 git-odb/src/object/parsed/tests.rs diff --git a/git-odb/src/object/mod.rs b/git-odb/src/object/mod.rs index e6047beb427..df281bc38da 100644 --- a/git-odb/src/object/mod.rs +++ b/git-odb/src/object/mod.rs @@ -38,8 +38,3 @@ impl Kind { } pub mod parsed; - -#[cfg(test)] -mod tests { - use super::*; -} diff --git a/git-odb/src/object/parsed.rs b/git-odb/src/object/parsed/mod.rs similarity index 99% rename from git-odb/src/object/parsed.rs rename to git-odb/src/object/parsed/mod.rs index 941e4d0b654..992ea018083 100644 --- a/git-odb/src/object/parsed.rs +++ b/git-odb/src/object/parsed/mod.rs @@ -2,6 +2,9 @@ use crate::{object, Sign, Time}; use hex::FromHex; use std::str; +#[cfg(test)] +mod tests; + quick_error! { #[derive(Debug)] pub enum Error { diff --git a/git-odb/src/object/parsed/tests.rs b/git-odb/src/object/parsed/tests.rs new file mode 100644 index 00000000000..f0713811797 --- /dev/null +++ b/git-odb/src/object/parsed/tests.rs @@ -0,0 +1,64 @@ +use super::*; +use crate::object::{parsed, Kind}; +use std::path::PathBuf; + +pub fn bin(hex: &str) -> [u8; 20] { + <[u8; 20]>::from_hex(hex).unwrap() +} + +pub fn fixture(path: &str) -> PathBuf { + PathBuf::from("tests").join("fixtures").join(path) +} + +fn fixture_bytes(path: &str) -> Vec { + std::fs::read(fixture(path)).unwrap() +} + +#[test] +fn tag_parse() { + let fixture = fixture_bytes("objects/tag.txt"); + let actual = parsed::Tag::from_bytes(&fixture).unwrap(); + assert_eq!(actual, tag_fixture(9000)); + assert_eq!( + actual.target(), + bin("ffa700b4aca13b80cb6b98a078e7c96804f8e0ec") + ); +} + +fn tag_fixture(offset: i32) -> parsed::Tag<'static> { + parsed::Tag { + target_raw: b"ffa700b4aca13b80cb6b98a078e7c96804f8e0ec", + name_raw: b"1.0.0", + target_kind: Kind::Commit, + message: Some(b"for the signature\n"), + pgp_signature: Some( + b"-----BEGIN PGP SIGNATURE----- +Comment: GPGTools - https://gpgtools.org + +iQIzBAABCgAdFiEEw7xSvXbiwjusbsBqZl+Z+p2ZlmwFAlsapyYACgkQZl+Z+p2Z +lmy6Ug/+KzvzqiNpzz1bMVVAzp8NCbiEO3QGYPyeQc521lBwpaTrRYR+oHJY15r3 +OdL5WDysTpjN8N5FNyfmvzkuPdTkK3JlYmO7VRjdA2xu/B6vIZLaOfAowFrhMvKo +8eoqwGcAP3rC5TuWEgzq2qhbjS4JXFLd4NLjWEFqT2Y2UKm+g8TeGOsa/0pF4Nq5 +xeW4qCYR0WcQLFedbpkKHxag2GfaXKvzNNJdqYhVQssNa6BeSmsfDvlWYNe617wV +NvsR/zJT0wHb5SSH+h6QmwA7LQIQF//83Vc3aF7kv9D54r3ibXW5TjZ3WoeTUZO7 +kefkzJ12EYDCFLPhHvXPog518nO8Ot46dX+okrF0/B4N3RFTvjKr7VAGTzv2D/Dg +DrD531S2F71b+JIRh641eeP7bjWFQi3tWLtrEOtjjsKPJfYRMKpYFnAO4UUJ6Rck +Z5fFXEUCO8d5WT56jzKDjmVoY01lA87O1YsP/J+zQAlc9v1k6jqeQ53LZNgTN+ue +5fJuSPT3T43pSOD1VQSr3aZ2Anc4Qu7K8uX9lkpxF9Sc0tDbeCosFLZMWNVp6m+e +cjHJZXWmV4CcRfmLsXzU8s2cR9A0DBvOxhPD1TlKC2JhBFXigjuL9U4Rbq9tdegB +2n8f2douw6624Tn/6Lm4a7AoxmU+CMiYagDxDL3RuZ8CAfh3bn0= +=aIns +-----END PGP SIGNATURE----- +", + ), + signature: parsed::Signature { + name: b"Sebastian Thiel", + email: b"byronimo@gmail.com", + time: Time { + time: 1528473343, + offset, + sign: Sign::Plus, + }, + }, + } +} diff --git a/git-odb/tests/loose.rs b/git-odb/tests/loose.rs index 3f12452956e..d0af265e16f 100644 --- a/git-odb/tests/loose.rs +++ b/git-odb/tests/loose.rs @@ -37,27 +37,6 @@ fn loose_iter() { ) } -#[test] -fn loose_find() { - let mut o = ldb() - .find(&bin("722fe60ad4f0276d5a8121970b5bb9dccdad4ef9")) - .unwrap(); - assert_eq!(o.kind, Kind::Tag); - assert_eq!(o.size, 1024); - assert_eq!(o.parsed().unwrap(), parsed::Object::Tag(tag_fixture(7200))) -} - -#[test] -fn loose_tag_parse() { - let fixture = fixture_bytes("objects/tag.txt"); - let actual = parsed::Tag::from_bytes(&fixture).unwrap(); - assert_eq!(actual, tag_fixture(9000)); - assert_eq!( - actual.target(), - bin("ffa700b4aca13b80cb6b98a078e7c96804f8e0ec") - ); -} - fn tag_fixture(offset: i32) -> parsed::Tag<'static> { parsed::Tag { target_raw: b"ffa700b4aca13b80cb6b98a078e7c96804f8e0ec", @@ -95,3 +74,13 @@ cjHJZXWmV4CcRfmLsXzU8s2cR9A0DBvOxhPD1TlKC2JhBFXigjuL9U4Rbq9tdegB }, } } + +#[test] +fn loose_find() { + let mut o = ldb() + .find(&bin("722fe60ad4f0276d5a8121970b5bb9dccdad4ef9")) + .unwrap(); + assert_eq!(o.kind, Kind::Tag); + assert_eq!(o.size, 1024); + assert_eq!(o.parsed().unwrap(), parsed::Object::Tag(tag_fixture(7200))) +} diff --git a/src/main.rs b/src/main.rs index 2ff99730015..5fdb08d5bc8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,8 +3,8 @@ use git_core; use structopt::StructOpt; mod options { - use structopt::StructOpt; use structopt::clap::AppSettings; + use structopt::StructOpt; #[derive(Debug, StructOpt)] #[structopt(about = "The git, simply swift")] diff --git a/tasks.md b/tasks.md index 8174aae01a5..73b42e598e3 100644 --- a/tasks.md +++ b/tasks.md @@ -2,7 +2,7 @@ * [x] remove failure and replace with quick-check/anyhow * [x] minimize dependencies and test-runs -* [ ] structopt for grit +* [x] structopt for grit * [ ] make parser tests unit tests that are close to the code they test * [ ] parser tests handle binary strings nicely * [ ] switch parsing to nom (binary only)