mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-08-05 07:27:46 +00:00
checksum/cksum: update tests to test new parsers not regex
This commit is contained in:
parent
621f2b5c7a
commit
04ad55510b
1 changed files with 51 additions and 49 deletions
|
@ -1341,8 +1341,7 @@ mod tests {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_algo_based_regex() {
|
fn test_algo_based_parser() {
|
||||||
let algo_based_regex = Regex::new(ALGO_BASED_REGEX).unwrap();
|
|
||||||
#[allow(clippy::type_complexity)]
|
#[allow(clippy::type_complexity)]
|
||||||
let test_cases: &[(&[u8], Option<(&[u8], Option<&[u8]>, &[u8], &[u8])>)] = &[
|
let test_cases: &[(&[u8], Option<(&[u8], Option<&[u8]>, &[u8], &[u8])>)] = &[
|
||||||
(b"SHA256 (example.txt) = d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2", Some((b"SHA256", None, b"example.txt", b"d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2"))),
|
(b"SHA256 (example.txt) = d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2", Some((b"SHA256", None, b"example.txt", b"d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2"))),
|
||||||
|
@ -1353,27 +1352,30 @@ mod tests {
|
||||||
];
|
];
|
||||||
|
|
||||||
for (input, expected) in test_cases {
|
for (input, expected) in test_cases {
|
||||||
let captures = algo_based_regex.captures(input);
|
let line_info = LineFormat::parse_algo_based(input);
|
||||||
match expected {
|
match expected {
|
||||||
Some((algo, bits, filename, checksum)) => {
|
Some((algo, bits, filename, checksum)) => {
|
||||||
assert!(captures.is_some());
|
assert!(line_info.is_some());
|
||||||
let captures = captures.unwrap();
|
let line_info = line_info.unwrap();
|
||||||
assert_eq!(&captures.name("algo").unwrap().as_bytes(), algo);
|
assert_eq!(&line_info.algo_name.unwrap().as_bytes(), algo);
|
||||||
assert_eq!(&captures.name("bits").map(|m| m.as_bytes()), bits);
|
assert_eq!(
|
||||||
assert_eq!(&captures.name("filename").unwrap().as_bytes(), filename);
|
line_info
|
||||||
assert_eq!(&captures.name("checksum").unwrap().as_bytes(), checksum);
|
.algo_bit_len
|
||||||
|
.map(|m| m.to_string().as_bytes().to_owned()),
|
||||||
|
bits.map(|b| b.to_owned())
|
||||||
|
);
|
||||||
|
assert_eq!(&line_info.filename, filename);
|
||||||
|
assert_eq!(&line_info.checksum.as_bytes(), checksum);
|
||||||
}
|
}
|
||||||
None => {
|
None => {
|
||||||
assert!(captures.is_none());
|
assert!(line_info.is_none());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_double_space_regex() {
|
fn test_double_space_parser() {
|
||||||
let double_space_regex = Regex::new(DOUBLE_SPACE_REGEX).unwrap();
|
|
||||||
|
|
||||||
#[allow(clippy::type_complexity)]
|
#[allow(clippy::type_complexity)]
|
||||||
let test_cases: &[(&[u8], Option<(&[u8], &[u8])>)] = &[
|
let test_cases: &[(&[u8], Option<(&[u8], &[u8])>)] = &[
|
||||||
(
|
(
|
||||||
|
@ -1400,24 +1402,23 @@ mod tests {
|
||||||
];
|
];
|
||||||
|
|
||||||
for (input, expected) in test_cases {
|
for (input, expected) in test_cases {
|
||||||
let captures = double_space_regex.captures(input);
|
let line_info = LineFormat::parse_untagged(input);
|
||||||
match expected {
|
match expected {
|
||||||
Some((checksum, filename)) => {
|
Some((checksum, filename)) => {
|
||||||
assert!(captures.is_some());
|
assert!(line_info.is_some());
|
||||||
let captures = captures.unwrap();
|
let line_info = line_info.unwrap();
|
||||||
assert_eq!(&captures.name("checksum").unwrap().as_bytes(), checksum);
|
assert_eq!(&line_info.filename, filename);
|
||||||
assert_eq!(&captures.name("filename").unwrap().as_bytes(), filename);
|
assert_eq!(&line_info.checksum.as_bytes(), checksum);
|
||||||
}
|
}
|
||||||
None => {
|
None => {
|
||||||
assert!(captures.is_none());
|
assert!(line_info.is_none());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_single_space_regex() {
|
fn test_single_space_parser() {
|
||||||
let single_space_regex = Regex::new(SINGLE_SPACE_REGEX).unwrap();
|
|
||||||
#[allow(clippy::type_complexity)]
|
#[allow(clippy::type_complexity)]
|
||||||
let test_cases: &[(&[u8], Option<(&[u8], &[u8])>)] = &[
|
let test_cases: &[(&[u8], Option<(&[u8], &[u8])>)] = &[
|
||||||
(
|
(
|
||||||
|
@ -1440,16 +1441,16 @@ mod tests {
|
||||||
];
|
];
|
||||||
|
|
||||||
for (input, expected) in test_cases {
|
for (input, expected) in test_cases {
|
||||||
let captures = single_space_regex.captures(input);
|
let line_info = LineFormat::parse_single_space(input);
|
||||||
match expected {
|
match expected {
|
||||||
Some((checksum, filename)) => {
|
Some((checksum, filename)) => {
|
||||||
assert!(captures.is_some());
|
assert!(line_info.is_some());
|
||||||
let captures = captures.unwrap();
|
let line_info = line_info.unwrap();
|
||||||
assert_eq!(&captures.name("checksum").unwrap().as_bytes(), checksum);
|
assert_eq!(&line_info.filename, filename);
|
||||||
assert_eq!(&captures.name("filename").unwrap().as_bytes(), filename);
|
assert_eq!(&line_info.checksum.as_bytes(), checksum);
|
||||||
}
|
}
|
||||||
None => {
|
None => {
|
||||||
assert!(captures.is_none());
|
assert!(line_info.is_none());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1457,68 +1458,69 @@ mod tests {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_line_info() {
|
fn test_line_info() {
|
||||||
let mut cached_regex = None;
|
let mut cached_line_format = None;
|
||||||
|
|
||||||
// Test algo-based regex
|
// Test algo-based parser
|
||||||
let line_algo_based =
|
let line_algo_based =
|
||||||
OsString::from("MD5 (example.txt) = d41d8cd98f00b204e9800998ecf8427e");
|
OsString::from("MD5 (example.txt) = d41d8cd98f00b204e9800998ecf8427e");
|
||||||
let line_info = LineInfo::parse(&line_algo_based, &mut cached_regex).unwrap();
|
let line_info = LineInfo::parse(&line_algo_based, &mut cached_line_format).unwrap();
|
||||||
assert_eq!(line_info.algo_name.as_deref(), Some("MD5"));
|
assert_eq!(line_info.algo_name.as_deref(), Some("MD5"));
|
||||||
assert!(line_info.algo_bit_len.is_none());
|
assert!(line_info.algo_bit_len.is_none());
|
||||||
assert_eq!(line_info.filename, b"example.txt");
|
assert_eq!(line_info.filename, b"example.txt");
|
||||||
assert_eq!(line_info.checksum, "d41d8cd98f00b204e9800998ecf8427e");
|
assert_eq!(line_info.checksum, "d41d8cd98f00b204e9800998ecf8427e");
|
||||||
assert_eq!(line_info.format, LineFormat::AlgoBased);
|
assert_eq!(line_info.format, LineFormat::AlgoBased);
|
||||||
assert!(cached_regex.is_none());
|
assert!(cached_line_format.is_none());
|
||||||
|
|
||||||
// Test double-space regex
|
// Test double-space parser
|
||||||
let line_double_space = OsString::from("d41d8cd98f00b204e9800998ecf8427e example.txt");
|
let line_double_space = OsString::from("d41d8cd98f00b204e9800998ecf8427e example.txt");
|
||||||
let line_info = LineInfo::parse(&line_double_space, &mut cached_regex).unwrap();
|
let line_info = LineInfo::parse(&line_double_space, &mut cached_line_format).unwrap();
|
||||||
assert!(line_info.algo_name.is_none());
|
assert!(line_info.algo_name.is_none());
|
||||||
assert!(line_info.algo_bit_len.is_none());
|
assert!(line_info.algo_bit_len.is_none());
|
||||||
assert_eq!(line_info.filename, b"example.txt");
|
assert_eq!(line_info.filename, b"example.txt");
|
||||||
assert_eq!(line_info.checksum, "d41d8cd98f00b204e9800998ecf8427e");
|
assert_eq!(line_info.checksum, "d41d8cd98f00b204e9800998ecf8427e");
|
||||||
assert_eq!(line_info.format, LineFormat::Untagged);
|
assert_eq!(line_info.format, LineFormat::Untagged);
|
||||||
assert!(cached_regex.is_some());
|
assert!(cached_line_format.is_some());
|
||||||
|
|
||||||
cached_regex = None;
|
cached_line_format = None;
|
||||||
|
|
||||||
// Test single-space regex
|
// Test single-space parser
|
||||||
let line_single_space = OsString::from("d41d8cd98f00b204e9800998ecf8427e example.txt");
|
let line_single_space = OsString::from("d41d8cd98f00b204e9800998ecf8427e example.txt");
|
||||||
let line_info = LineInfo::parse(&line_single_space, &mut cached_regex).unwrap();
|
let line_info = LineInfo::parse(&line_single_space, &mut cached_line_format).unwrap();
|
||||||
assert!(line_info.algo_name.is_none());
|
assert!(line_info.algo_name.is_none());
|
||||||
assert!(line_info.algo_bit_len.is_none());
|
assert!(line_info.algo_bit_len.is_none());
|
||||||
assert_eq!(line_info.filename, b"example.txt");
|
assert_eq!(line_info.filename, b"example.txt");
|
||||||
assert_eq!(line_info.checksum, "d41d8cd98f00b204e9800998ecf8427e");
|
assert_eq!(line_info.checksum, "d41d8cd98f00b204e9800998ecf8427e");
|
||||||
assert_eq!(line_info.format, LineFormat::SingleSpace);
|
assert_eq!(line_info.format, LineFormat::SingleSpace);
|
||||||
assert!(cached_regex.is_some());
|
assert!(cached_line_format.is_some());
|
||||||
|
|
||||||
cached_regex = None;
|
cached_line_format = None;
|
||||||
|
|
||||||
// Test invalid checksum line
|
// Test invalid checksum line
|
||||||
let line_invalid = OsString::from("invalid checksum line");
|
let line_invalid = OsString::from("invalid checksum line");
|
||||||
assert!(LineInfo::parse(&line_invalid, &mut cached_regex).is_none());
|
assert!(LineInfo::parse(&line_invalid, &mut cached_line_format).is_none());
|
||||||
assert!(cached_regex.is_none());
|
assert!(cached_line_format.is_none());
|
||||||
|
|
||||||
// Test leading space before checksum line
|
// Test leading space before checksum line
|
||||||
let line_algo_based_leading_space =
|
let line_algo_based_leading_space =
|
||||||
OsString::from(" MD5 (example.txt) = d41d8cd98f00b204e9800998ecf8427e");
|
OsString::from(" MD5 (example.txt) = d41d8cd98f00b204e9800998ecf8427e");
|
||||||
let line_info = LineInfo::parse(&line_algo_based_leading_space, &mut cached_regex).unwrap();
|
let line_info =
|
||||||
|
LineInfo::parse(&line_algo_based_leading_space, &mut cached_line_format).unwrap();
|
||||||
assert_eq!(line_info.format, LineFormat::AlgoBased);
|
assert_eq!(line_info.format, LineFormat::AlgoBased);
|
||||||
assert!(cached_regex.is_none());
|
assert!(cached_line_format.is_none());
|
||||||
|
|
||||||
// Test trailing space after checksum line (should fail)
|
// Test trailing space after checksum line (should fail)
|
||||||
let line_algo_based_leading_space =
|
let line_algo_based_leading_space =
|
||||||
OsString::from("MD5 (example.txt) = d41d8cd98f00b204e9800998ecf8427e ");
|
OsString::from("MD5 (example.txt) = d41d8cd98f00b204e9800998ecf8427e ");
|
||||||
let res = LineInfo::parse(&line_algo_based_leading_space, &mut cached_regex);
|
let res = LineInfo::parse(&line_algo_based_leading_space, &mut cached_line_format);
|
||||||
assert!(res.is_none());
|
assert!(res.is_none());
|
||||||
assert!(cached_regex.is_none());
|
assert!(cached_line_format.is_none());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_get_expected_digest() {
|
fn test_get_expected_digest() {
|
||||||
let line = OsString::from("SHA256 (empty) = 47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=");
|
let line = OsString::from("SHA256 (empty) = 47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=");
|
||||||
let mut cached_regex = None;
|
let mut cached_line_format = None;
|
||||||
let line_info = LineInfo::parse(&line, &mut cached_regex).unwrap();
|
let line_info = LineInfo::parse(&line, &mut cached_line_format).unwrap();
|
||||||
|
|
||||||
let result = get_expected_digest_as_hex_string(&line_info, None);
|
let result = get_expected_digest_as_hex_string(&line_info, None);
|
||||||
|
|
||||||
|
@ -1532,8 +1534,8 @@ mod tests {
|
||||||
fn test_get_expected_checksum_invalid() {
|
fn test_get_expected_checksum_invalid() {
|
||||||
// The line misses a '=' at the end to be valid base64
|
// The line misses a '=' at the end to be valid base64
|
||||||
let line = OsString::from("SHA256 (empty) = 47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU");
|
let line = OsString::from("SHA256 (empty) = 47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU");
|
||||||
let mut cached_regex = None;
|
let mut cached_line_format = None;
|
||||||
let line_info = LineInfo::parse(&line, &mut cached_regex).unwrap();
|
let line_info = LineInfo::parse(&line, &mut cached_line_format).unwrap();
|
||||||
|
|
||||||
let result = get_expected_digest_as_hex_string(&line_info, None);
|
let result = get_expected_digest_as_hex_string(&line_info, None);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue