use once_cell::sync::Lazy;
use regex::Regex;
use crate::types::html::*;
pub static REGEX: Lazy<Regex> = Lazy::new(|| {
Regex::new(r"(?i)(?m)(?s)<h1( .*?)?>(?P<headline>.*?)\s*</h1>").unwrap()
});
#[allow(dead_code)]
pub fn from_html_str_into_headline_str(html_str: &HtmlStr) -> Option<&str> {
if let Some(captures) = (*REGEX).captures(html_str) {
if let Some(x) = captures.name("headline") {
return Some(x.as_str())
}
}
None
}
#[cfg(test)]
mod tests {
use super::*;
use ::indoc::indoc;
#[test]
fn test_from_html_str_into_headline_str_x_present_x_h1_lowercase_and_plain() {
let html_str = indoc!{r#"
lorem ipsum
<h1>alfa bravo</h1>
lorem ipsum
"#};
let option = from_html_str_into_headline_str(&html_str);
assert!(option.is_some());
let headline_str = option.unwrap();
assert_eq!(headline_str, "alfa bravo");
}
#[test]
fn test_from_html_str_into_headline_str_x_present_x_h1_uppercase_and_extra() {
let html_str = indoc!{r#"
lorem ipsum
<H1 class="foo">alfa bravo</H1>
lorem ipsum
"#};
let option = from_html_str_into_headline_str(&html_str);
assert!(option.is_some());
let headline_str = option.unwrap();
assert_eq!(headline_str, "alfa bravo");
}
#[test]
fn test_from_html_str_into_headline_str_x_absent() {
let html_str = indoc!{r#"
lorem ipsum
alfa bravo
lorem ipsum
"#};
let option = from_html_str_into_headline_str(&html_str);
assert!(option.is_none());
}
}