use std::path::{Path, PathBuf}; use status::Code; use xatu::SourceFile; fn source_file(path: &str) -> SourceFile { SourceFile { path: PathBuf::from(path), source: std::fs::read_to_string(testdata_path(path)).expect("fixture should be readable"), } } fn testdata_path(path: &str) -> PathBuf { if Path::new(path).exists() { return PathBuf::from(path); } let runfiles = PathBuf::from(std::env::var("TEST_SRCDIR").expect("TEST_SRCDIR should be set")); let workspace = std::env::var("TEST_WORKSPACE").expect("TEST_WORKSPACE should be set"); runfiles.join(workspace).join("src/xatu").join(path) } #[test] fn future_sight_reports_clean_sources_as_clean() { let report = xatu::future_sight(vec![source_file("testdata/clean.nix")]) .expect("fixture should parse"); assert!(report.is_clean()); } #[test] fn future_sight_rejects_parse_errors() { let error = xatu::future_sight(vec![source_file("testdata/invalid.nix")]) .expect_err("fixture should fail to parse"); assert_eq!(error.code(), Code::FailedPrecondition); } #[test] fn future_sight_reports_empty_inherit_findings() { let report = xatu::future_sight(vec![source_file("testdata/empty_inherit.nix")]) .expect("fixture should parse"); assert_eq!(report.diagnostics.len(), 1); let diagnostic = &report.diagnostics[0]; assert_eq!( report.files.get(diagnostic.file_id).path, PathBuf::from("testdata/empty_inherit.nix"), ); assert_eq!(diagnostic.finding.rule_id, "empty_inherit"); }