use std::path::Path;
#[test]
fn test_parse_check_line() {
let crate::ParsedCheckLine {
file_string,
is_escaped,
file_path,
expected_hash,
} = crate::parse_check_line(
"0909090909090909090909090909090909090909090909090909090909090909 foo",
)
.unwrap();
assert_eq!(expected_hash, blake3::Hash::from([0x09; 32]));
assert!(!is_escaped);
assert_eq!(file_string, "foo");
assert_eq!(file_path, Path::new("foo"));
let crate::ParsedCheckLine {
file_string,
is_escaped,
file_path,
expected_hash,
} = crate::parse_check_line(
"fafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafa \t\r\n\n\r \t\r\n\n\r",
)
.unwrap();
assert_eq!(expected_hash, blake3::Hash::from([0xfa; 32]));
assert!(!is_escaped);
assert_eq!(file_string, " \t\r\n\n\r \t");
assert_eq!(file_path, Path::new(" \t\r\n\n\r \t"));
let crate::ParsedCheckLine {
file_string,
is_escaped,
file_path,
expected_hash,
} = crate::parse_check_line(
"4242424242424242424242424242424242424242424242424242424242424242 ",
)
.unwrap();
assert_eq!(expected_hash, blake3::Hash::from([0x42; 32]));
assert!(!is_escaped);
assert_eq!(file_string, " ");
assert_eq!(file_path, Path::new(" "));
if cfg!(not(windows)) {
let crate::ParsedCheckLine {
file_string,
is_escaped,
file_path,
expected_hash,
} = crate::parse_check_line(
"4343434343434343434343434343434343434343434343434343434343434343 fo\\a\\no",
)
.unwrap();
assert_eq!(expected_hash, blake3::Hash::from([0x43; 32]));
assert!(!is_escaped);
assert_eq!(file_string, "fo\\a\\no");
assert_eq!(file_path, Path::new("fo\\a\\no"));
}
let crate::ParsedCheckLine {
file_string,
is_escaped,
file_path,
expected_hash,
} = crate::parse_check_line(
"\\4444444444444444444444444444444444444444444444444444444444444444 fo\\r\\n\\n\\ro",
)
.unwrap();
assert_eq!(expected_hash, blake3::Hash::from([0x44; 32]));
assert!(is_escaped);
assert_eq!(file_string, "fo\\r\\n\\n\\ro");
assert_eq!(file_path, Path::new("fo\r\n\n\ro"));
if cfg!(not(windows)) {
let crate::ParsedCheckLine {
file_string,
is_escaped,
file_path,
expected_hash,
} = crate::parse_check_line(
"\\4545454545454545454545454545454545454545454545454545454545454545 fo\\n\\\\o",
)
.unwrap();
assert_eq!(expected_hash, blake3::Hash::from([0x45; 32]));
assert!(is_escaped);
assert_eq!(file_string, "fo\\n\\\\o");
assert_eq!(file_path, Path::new("fo\n\\o"));
}
let crate::ParsedCheckLine {
file_string,
is_escaped,
file_path,
expected_hash,
} = crate::parse_check_line(
"4646464646464646464646464646464646464646464646464646464646464646 否认",
)
.unwrap();
assert_eq!(expected_hash, blake3::Hash::from([0x46; 32]));
assert!(!is_escaped);
assert_eq!(file_string, "否认");
assert_eq!(file_path, Path::new("否认"));
let crate::ParsedCheckLine {
file_string,
is_escaped,
file_path,
expected_hash,
} = crate::parse_check_line(
"4747474747474747474747474747474747474747474747474747474747474747 foo bar",
)
.unwrap();
assert_eq!(expected_hash, blake3::Hash::from([0x47; 32]));
assert!(!is_escaped);
assert_eq!(file_string, "foo bar");
assert_eq!(file_path, Path::new("foo bar"));
let crate::ParsedCheckLine {
file_string,
is_escaped,
file_path,
expected_hash,
} = crate::parse_check_line(
"BLAKE3 (foo) = bar) = 4848484848484848484848484848484848484848484848484848484848484848",
)
.unwrap();
assert_eq!(expected_hash, blake3::Hash::from([0x48; 32]));
assert!(!is_escaped);
assert_eq!(file_string, "foo) = bar");
assert_eq!(file_path, Path::new("foo) = bar"));
crate::parse_check_line("").unwrap_err();
crate::parse_check_line("0").unwrap_err();
crate::parse_check_line("00").unwrap_err();
crate::parse_check_line("0000000000000000000000000000000000000000000000000000000000000000")
.unwrap_err();
crate::parse_check_line("0000000000000000000000000000000000000000000000000000000000000000 ")
.unwrap_err();
crate::parse_check_line("0000000000000000000000000000000000000000000000000000000000000000 foo")
.unwrap_err();
crate::parse_check_line(
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA foo",
)
.unwrap_err();
crate::parse_check_line(
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx foo",
)
.unwrap_err();
crate::parse_check_line("你好, 我叫杰克. 认识你很高兴. 要不要吃个香蕉? foo").unwrap_err();
crate::parse_check_line(
"\\0000000000000000000000000000000000000000000000000000000000000000 fo\\o",
)
.unwrap_err();
crate::parse_check_line(
"\\0000000000000000000000000000000000000000000000000000000000000000 foo\\",
)
.unwrap_err();
crate::parse_check_line(
"0000000000000000000000000000000000000000000000000000000000000000 fo\0o",
)
.unwrap_err();
crate::parse_check_line(
"0000000000000000000000000000000000000000000000000000000000000000 fo�o",
)
.unwrap_err();
if cfg!(windows) {
crate::parse_check_line(
"0000000000000000000000000000000000000000000000000000000000000000 fo\\o",
)
.unwrap_err();
crate::parse_check_line(
"\\0000000000000000000000000000000000000000000000000000000000000000 fo\\\\o",
)
.unwrap_err();
}
}
#[test]
fn test_filepath_to_string() {
let output = crate::filepath_to_string(Path::new("foo"));
assert_eq!(output.filepath_string, "foo");
assert!(!output.is_escaped);
let output = crate::filepath_to_string(Path::new("f\\ \t\r\noo"));
if cfg!(windows) {
assert_eq!(output.filepath_string, "f/ \t\\r\\noo");
} else {
assert_eq!(output.filepath_string, "f\\\\ \t\\r\\noo");
}
assert!(output.is_escaped);
}