use crate::prompt::brazen_pin;
use crate::prompt::pin::parse_brazen_pin;
#[test]
fn pin_derives_from_the_embedded_manifest() {
let pin = brazen_pin();
assert!(pin.chars().next().is_some_and(|c| c.is_ascii_digit()));
}
#[test]
fn the_makefile_derives_the_same_pin() {
let out = std::process::Command::new("make")
.env_remove("MAKEFLAGS")
.env_remove("MFLAGS")
.args(["--no-print-directory", "-C", env!("CARGO_MANIFEST_DIR")])
.arg("brazen-pin")
.output()
.expect("spawn `make brazen-pin`");
assert!(
out.status.success(),
"make brazen-pin: {}",
String::from_utf8_lossy(&out.stderr)
);
assert_eq!(String::from_utf8(out.stdout).unwrap().trim(), brazen_pin());
}
#[test]
fn every_brazen_version_the_readme_spells_is_the_pin() {
let readme =
std::fs::read_to_string(concat!(env!("CARGO_MANIFEST_DIR"), "/README.md")).unwrap();
let spelled: Vec<&str> = ["brazen --version =", "brazen = \"=", "(brazen "]
.iter()
.flat_map(|lead| readme.match_indices(lead).map(|(i, l)| i + l.len()))
.map(|at| {
let rest = &readme[at..];
let end = rest
.find(|c: char| !c.is_ascii_digit() && c != '.')
.unwrap_or(rest.len());
&rest[..end]
})
.filter(|v: &&str| !v.is_empty())
.collect();
assert!(
spelled.len() >= 2,
"the README states the pin in both shapes"
);
for v in spelled {
assert_eq!(v, brazen_pin(), "a README brazen version drifted");
}
}
#[test]
fn parse_reads_the_inline_source_spelling() {
let manifest = "[dependencies]\nbrazen = \"=0.0.9\"\nserde = \"1\"\n";
assert_eq!(parse_brazen_pin(manifest), Some("0.0.9"));
}
#[test]
fn parse_reads_the_normalized_published_spelling() {
let manifest = "[dependencies.serde]\nversion = \"1\"\n\n\
[dependencies.brazen]\nversion = \"=0.0.9\"\n";
assert_eq!(parse_brazen_pin(manifest), Some("0.0.9"));
}
#[test]
fn parse_declines_a_manifest_without_an_exact_pin() {
assert_eq!(parse_brazen_pin("brazen = \"0.0.9\""), None);
assert_eq!(
parse_brazen_pin("[dependencies.serde]\nversion = \"=1.0.0\"\n"),
None
);
assert_eq!(parse_brazen_pin(""), None);
}