main-spex 0.21.0

AI-first development framework that turns specifications into deterministic, verifiable code
#[cfg(test)]
mod tests {
    use super::super::*;
    use crate::commands::check::fixtures::{check, scoped_file};
    use crate::commands::check::runners::Hit;
    use crate::rule::CheckKind;
    use tempfile::tempdir;

    fn run(pattern: &str, negate: bool, files: &[ScopedFile]) -> Vec<Hit> {
        let check = check(CheckKind::Glob {
            pattern: pattern.to_string(),
            negate,
        });
        let files: Vec<&ScopedFile> = files.iter().collect();
        run_glob(&check, pattern, negate, &files).expect("glob outcome")
    }

    #[test]
    fn forbidden_pattern_reports_matching_paths() {
        let dir = tempdir().expect("temp dir");
        let bak = scoped_file(&dir, "notes.bak", "");
        let src = scoped_file(&dir, "src/main.rs", "");

        let hits = run("**/*.bak", false, &[bak, src]);

        assert_eq!(hits.len(), 1);
        assert_eq!(hits[0].location, Some(Location::in_file("notes.bak")));
    }

    #[test]
    fn negated_pattern_reports_when_required_path_absent() {
        let dir = tempdir().expect("temp dir");
        let src = scoped_file(&dir, "src/main.rs", "");

        let hits = run("**/LICENSE", true, &[src]);

        assert_eq!(hits.len(), 1);
        assert!(hits[0].location.is_none());
    }
}