diff --git a/src/xatu/BUILD b/src/xatu/BUILD index 0bc0330..3b3550b 100644 --- a/src/xatu/BUILD +++ b/src/xatu/BUILD @@ -24,6 +24,20 @@ rust_test( deps = [":xatu_lib"], ) +rust_test( + name = "xatu_test", + srcs = ["xatu_test.rs"], + data = [ + "testdata/clean.nix", + "testdata/empty_inherit.nix", + "testdata/invalid.nix", + ], + deps = [ + ":xatu_lib", + "//src/status:status", + ], +) + rust_binary( name = "xatu", crate_name = "xatu_cli", diff --git a/src/xatu/testdata/clean.nix b/src/xatu/testdata/clean.nix new file mode 100644 index 0000000..a48f8c9 --- /dev/null +++ b/src/xatu/testdata/clean.nix @@ -0,0 +1 @@ +{ inherit foo; } diff --git a/src/xatu/testdata/empty_inherit.nix b/src/xatu/testdata/empty_inherit.nix new file mode 100644 index 0000000..73a66e4 --- /dev/null +++ b/src/xatu/testdata/empty_inherit.nix @@ -0,0 +1 @@ +{ inherit; } diff --git a/src/xatu/testdata/invalid.nix b/src/xatu/testdata/invalid.nix new file mode 100644 index 0000000..98232c6 --- /dev/null +++ b/src/xatu/testdata/invalid.nix @@ -0,0 +1 @@ +{ diff --git a/src/xatu/xatu_test.rs b/src/xatu/xatu_test.rs new file mode 100644 index 0000000..e1ef141 --- /dev/null +++ b/src/xatu/xatu_test.rs @@ -0,0 +1,53 @@ +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"); +}