diff --git a/ci/crates/pr-check/src/report.rs b/ci/crates/pr-check/src/report.rs index 94a6df49d..9f828a764 100644 --- a/ci/crates/pr-check/src/report.rs +++ b/ci/crates/pr-check/src/report.rs @@ -153,11 +153,9 @@ mod tests { ..passing_report() }; let reports = Reports::from_iter([report]); - assert!( - Comment::from(&reports) - .to_string() - .contains(&format!("Source: {source}\n")) - ); + let rendered = Comment::from(&reports).to_string(); + let expected = format!("Source: {source}"); + assert!(rendered.lines().any(|line| line == expected.as_str())); } } diff --git a/ci/crates/render/src/lib.rs b/ci/crates/render/src/lib.rs index d33045fc0..922b27f3e 100644 --- a/ci/crates/render/src/lib.rs +++ b/ci/crates/render/src/lib.rs @@ -188,20 +188,29 @@ mod tests { collections: vec![], }; let markdown = catalog.render()?; + let lines: Vec<_> = markdown.lines().collect(); assert_eq!( - markdown - .matches("Show Deprecated") + lines + .iter() + .filter(|line| line.trim() == "Show Deprecated") + .count(), + 3 + ); + assert_eq!( + lines + .iter() + .filter(|line| line.contains("[Active Tool](https://example.com)")) .count(), 3 ); assert_eq!( - markdown - .matches("[Active Tool](https://example.com)") + lines + .iter() + .filter(|line| line.contains("**Deprecated Tool**")) .count(), 3 ); - assert_eq!(markdown.matches("**Deprecated Tool**").count(), 3); assert!(!markdown.contains("[Deprecated Tool](")); assert!(!markdown.contains("
Security", ] { - let section = markdown.split_once(heading).context("Missing section")?.1; + let heading_position = lines + .iter() + .position(|line| line.trim() == heading) + .context("Missing section")?; + let section = &lines[heading_position + 1..]; let active_position = section - .find("[Active Tool]") + .iter() + .position(|line| line.contains("[Active Tool]")) .context("Missing active tool")?; - let details_position = section.find("
").context("Missing details")?; + let details_position = section + .iter() + .position(|line| line.trim() == "
") + .context("Missing details")?; assert!(active_position < details_position); - let hidden = section[details_position..] - .split_once("
") - .context("Unclosed details")? - .0; - assert!(hidden.contains("Show Deprecated\n\n- **Deprecated Tool**")); - assert!(hidden.contains( - "[:information_source:]() :warning: :copyright:" - )); - assert!(!hidden.contains("[Active Tool]")); + let hidden = §ion[details_position..]; + let hidden_end = hidden + .iter() + .position(|line| line.trim() == "
") + .context("Unclosed details")?; + let hidden = &hidden[..=hidden_end]; + assert!(hidden.windows(3).any(|window| { + window[0].trim() == "Show Deprecated" + && window[1].trim().is_empty() + && window[2].contains("- **Deprecated Tool**") + })); + assert!(hidden.iter().any(|line| { + line.contains("[:information_source:]() :warning: :copyright:") + })); + assert!(!hidden.iter().any(|line| line.contains("[Active Tool]"))); } Ok(()) } @@ -257,13 +280,21 @@ mod tests { collections: vec![], } .render()?; + let lines: Vec<_> = markdown.lines().collect(); assert_eq!( - markdown - .matches("Show Deprecated") + lines + .iter() + .filter(|line| line.trim() == "Show Deprecated") .count(), 1 ); - assert!(markdown.contains("\n\n- **Multi Tool** :warning: — Example tool\n\n
")); + assert!(lines.windows(4).any(|window| { + window[0].trim().is_empty() + && window[1].contains("- **Multi Tool** :warning:") + && window[1].contains("Example tool") + && window[2].trim().is_empty() + && window[3].trim() == "" + })); Ok(()) }