use markdown::{tokenize, Block};
use regex::Regex;
use std::{fs::read_to_string, path::Path};
#[test]
fn ci_badge() {
let readme = read_to_string("README.md").unwrap();
let regex = Regex::new("(?m)/actions/workflows/(.*?)(?:/|$)").unwrap();
let filename = regex
.captures_iter(&readme)
.map(|captures| captures.get(1).expect("a capture").as_str())
.reduce(|prev, curr| {
assert_eq!(prev, curr);
prev
})
.expect("at least one match");
let path = format!(".github/workflows/{filename}");
assert!(Path::new(&path).exists());
}
#[test]
fn limited_character_set_in_headings() {
let readme = read_to_string("README.md").unwrap();
let tokens = tokenize(&readme);
tokens
.into_iter()
.filter_map(|block| match block {
Block::Header(spans, _) => Some(spans),
_ => None,
})
.for_each(|spans| {
assert_eq!(spans.len(), 1);
let span = spans.get(0).unwrap();
let text = match span {
markdown::Span::Text(text) => text,
_ => panic!("heading contains something other than plain text"),
};
assert!(
text.chars()
.all(|c| c.is_alphanumeric() || c == ' ' || c == '_' || c == '-'),
"{}",
text
);
});
}