use super::matches_alef_output;
use crate::core::hash::{CommentStyle, header};
use std::path::Path;
fn at(name: &str) -> std::path::PathBuf {
std::path::PathBuf::from(name)
}
#[test]
fn identical_bodies_match() {
assert!(matches_alef_output(
&at("Widget.java"),
"final class Widget {}\n",
"final class Widget {}\n"
));
}
#[test]
fn a_body_that_differs_only_by_the_header_alef_would_prepend_matches() {
let existing = "final class Widget {}\n";
let generated = format!("{}\n{existing}", header(CommentStyle::DoubleSlash));
assert!(matches_alef_output(&at("Widget.java"), existing, &generated));
}
#[test]
fn a_converged_shell_script_matches_even_though_the_header_is_interior() {
let existing = "#!/usr/bin/env bash\nrun\n";
let generated = format!("#!/usr/bin/env bash\n{}\nrun\n", header(CommentStyle::Hash));
assert!(matches_alef_output(&at("install.sh"), existing, &generated));
}
#[test]
fn a_seed_whose_body_differs_does_not_match() {
assert!(!matches_alef_output(
&at("install.sh"),
"#!/usr/bin/env bash\nVERSION=1.2.1\n",
"#!/usr/bin/env bash\nVERSION=1.4.2\n"
));
}
#[test]
fn a_differing_body_under_a_header_does_not_match() {
let generated = format!("{}\nVERSION=1.4.2\n", header(CommentStyle::Hash));
assert!(!matches_alef_output(&at("install.sh"), "VERSION=1.2.1\n", &generated));
}
#[test]
fn an_emptied_file_does_not_match_generated_content() {
let generated = format!("{}\nfinal class Widget {{}}\n", header(CommentStyle::DoubleSlash));
assert!(!matches_alef_output(&at("Widget.java"), "", &generated));
}
#[test]
fn a_truncated_body_does_not_match() {
let generated = format!(
"{}\nfinal class First {{}}\nfinal class Second {{}}\n",
header(CommentStyle::DoubleSlash)
);
assert!(!matches_alef_output(
&at("Widget.java"),
"final class Second {}\n",
&generated
));
}
#[test]
fn the_hash_stamp_line_is_not_treated_as_a_difference() {
let marker = header(CommentStyle::DoubleSlash);
let stamped_line = format!("// alef:hash:{}", "ab".repeat(32));
let first_line = marker.lines().next().expect("header has a first line");
let rest: String = marker.lines().skip(1).map(|line| format!("{line}\n")).collect();
let existing = format!("{first_line}\n{stamped_line}\n{rest}\nfinal class Widget {{}}\n");
let generated = format!("{marker}\nfinal class Widget {{}}\n");
assert!(matches_alef_output(Path::new("Widget.java"), &existing, &generated));
}