diff --git a/src/extract.rs b/src/extract.rs index b389728..0244082 100644 --- a/src/extract.rs +++ b/src/extract.rs @@ -18,3 +18,48 @@ pub(crate) fn extract_links(md: &str) -> HashSet { links } + +#[cfg(test)] +mod test { + use super::*; + use std::iter::FromIterator; + + #[test] + fn test_extract_markdown_links() { + let md = "This is [a test](https://endler.dev)."; + let links = extract_links(md); + assert_eq!( + links, + HashSet::from_iter([Url::parse("https://endler.dev").unwrap()].iter().cloned()) + ) + } + + #[test] + fn test_skip_markdown_anchors() { + let md = "This is [a test](#lol)."; + let links = extract_links(md); + assert_eq!(links, HashSet::new()) + } + + #[test] + fn test_skip_markdown_iternal_urls() { + let md = "This is [a test](./internal)."; + let links = extract_links(md); + assert_eq!(links, HashSet::new()) + } + + #[test] + fn test_non_markdown_links() { + let md = "https://endler.dev and https://hello-rust.show/foo/bar?lol=1"; + let links = extract_links(md); + let expected = HashSet::from_iter( + [ + Url::parse("https://endler.dev").unwrap(), + Url::parse("https://hello-rust.show/foo/bar?lol=1").unwrap(), + ] + .iter() + .cloned(), + ); + assert_eq!(links, expected) + } +}