From a0d26c6aaf7e880dc6c37830ecd983e5537c97ce Mon Sep 17 00:00:00 2001 From: Scott Schafer Date: Tue, 10 Jun 2025 06:06:08 -0600 Subject: [PATCH] test: Ensure all examples have a test --- tests/examples.rs | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/tests/examples.rs b/tests/examples.rs index 66dd94be..02e961c8 100644 --- a/tests/examples.rs +++ b/tests/examples.rs @@ -1,3 +1,5 @@ +use std::collections::BTreeSet; + #[test] fn custom_error() { let target = "custom_error"; @@ -63,3 +65,40 @@ fn assert_example(target: &str, expected: snapbox::Data) { .success() .stdout_eq(expected.raw()); } + +#[test] +fn ensure_all_examples_have_tests() { + let path = snapbox::utils::current_rs!(); + let actual = std::fs::read_to_string(&path).unwrap(); + let actual = actual + .lines() + .filter_map(|l| { + if l.starts_with("fn ") + && !l.starts_with("fn all_examples_have_tests") + && !l.starts_with("fn assert_example") + { + Some(l[3..l.len() - 4].to_string()) + } else { + None + } + }) + .collect::>(); + + let expected = std::fs::read_dir("examples") + .unwrap() + .map(|res| res.map(|e| e.path().file_stem().unwrap().display().to_string())) + .collect::, std::io::Error>>() + .unwrap(); + + let mut diff = expected.difference(&actual).collect::>(); + diff.sort(); + + let mut need_added = String::new(); + for name in &diff { + need_added.push_str(&format!("{name}\n")); + } + assert!( + diff.is_empty(), + "\n`Please add a test for the following examples to `tests/examples.rs`:\n{need_added}", + ); +}