From 5e4ee9ba422cac9eef2b558746f3a3aa4b67a5e4 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sat, 6 Aug 2022 08:42:02 +0800 Subject: [PATCH] run the baseline test and gather some information (#450) --- .../generated-archives/make_baseline.tar.xz | 4 +- git-refspec/tests/parse/mod.rs | 44 ++++++++++++++++++- 2 files changed, 44 insertions(+), 4 deletions(-) diff --git a/git-refspec/tests/fixtures/generated-archives/make_baseline.tar.xz b/git-refspec/tests/fixtures/generated-archives/make_baseline.tar.xz index c8c9489050..82ac607fae 100644 --- a/git-refspec/tests/fixtures/generated-archives/make_baseline.tar.xz +++ b/git-refspec/tests/fixtures/generated-archives/make_baseline.tar.xz @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0a85fe0b4d9fb179baab26ea008ddbb48a657d4e92561c42a213269468481a66 -size 9308 +oid sha256:5aac946f32882b76ca1a1d980cdd56fb812e9059ba59074ef141dd0bb4b32903 +size 9320 diff --git a/git-refspec/tests/parse/mod.rs b/git-refspec/tests/parse/mod.rs index d53b2ecf22..3818814936 100644 --- a/git-refspec/tests/parse/mod.rs +++ b/git-refspec/tests/parse/mod.rs @@ -1,9 +1,49 @@ +use bstr::ByteSlice; +use git_refspec::Operation; use git_testtools::scripted_fixture_repo_read_only; +use std::panic::catch_unwind; #[test] -#[ignore] +#[should_panic] fn baseline() { - let _dir = scripted_fixture_repo_read_only("make_baseline.sh").unwrap(); + let dir = scripted_fixture_repo_read_only("make_baseline.sh").unwrap(); + let baseline = std::fs::read(dir.join("baseline.git")).unwrap(); + let mut lines = baseline.lines(); + let mut panics = 0; + let mut mismatch = 0; + let mut count = 0; + while let Some(kind_spec) = lines.next() { + count += 1; + let (kind, spec) = kind_spec.split_at(kind_spec.find_byte(b' ').expect("space between kind and spec")); + let err_code: usize = lines + .next() + .expect("err code") + .to_str() + .unwrap() + .parse() + .expect("number"); + let op = match kind { + b"fetch" => Operation::Fetch, + b"push" => Operation::Push, + _ => unreachable!("{} unexpected", kind.as_bstr()), + }; + let res = catch_unwind(|| try_parse(spec.to_str().unwrap(), op)); + match res { + Ok(res) => match (res.is_ok(), err_code == 0) { + (true, true) | (false, false) => {} + _ => mismatch += 1, + }, + Err(_) => { + panics += 1; + } + } + } + if panics != 0 || mismatch != 0 { + panic!( + "Out of {} baseline entries, got {} mismatches and {} panics", + count, mismatch, panics + ); + } } mod invalid {