From 9a62664fb1d867c7e9d2bf11664ad5dddcafd046 Mon Sep 17 00:00:00 2001 From: Philipp Zander Date: Mon, 13 May 2024 19:29:48 +0200 Subject: [PATCH] test `nix_state_create`'s `lookupPath` argument (cherry picked from commit 6e5a259f60725b632e52d4839e6e3c285d6971d4) --- rust/Cargo.lock | 19 +++++++++++++++++++ rust/nix-expr/Cargo.toml | 3 ++- rust/nix-expr/src/eval_state.rs | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 53 insertions(+), 1 deletion(-) diff --git a/rust/Cargo.lock b/rust/Cargo.lock index fe37409..f9800e7 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -98,6 +98,12 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "fastrand" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" + [[package]] name = "glob" version = "0.3.1" @@ -192,6 +198,7 @@ dependencies = [ "nix-c-raw", "nix-store", "nix-util", + "tempfile", ] [[package]] @@ -339,6 +346,18 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "tempfile" +version = "3.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +dependencies = [ + "cfg-if", + "fastrand", + "rustix", + "windows-sys 0.52.0", +] + [[package]] name = "unicode-ident" version = "1.0.12" diff --git a/rust/nix-expr/Cargo.toml b/rust/nix-expr/Cargo.toml index 66a1f25..2733579 100644 --- a/rust/nix-expr/Cargo.toml +++ b/rust/nix-expr/Cargo.toml @@ -11,4 +11,5 @@ nix-store = { path = "../nix-store" } nix-util = { path = "../nix-util" } nix-c-raw = { path = "../nix-c-raw" } lazy_static = "1.4.0" -ctor = "0.2.7" \ No newline at end of file +ctor = "0.2.7" +tempfile = "3.10.1" diff --git a/rust/nix-expr/src/eval_state.rs b/rust/nix-expr/src/eval_state.rs index b473629..935d75a 100644 --- a/rust/nix-expr/src/eval_state.rs +++ b/rust/nix-expr/src/eval_state.rs @@ -385,6 +385,7 @@ pub fn test_init() { #[cfg(test)] mod tests { use ctor::ctor; + use std::io::Write as _; use super::*; @@ -403,6 +404,37 @@ mod tests { .unwrap(); } + #[test] + fn eval_state_lookup_path() { + let import_expression = "import + import "; + let integer0 = 83; + let integer1 = 103; + let mut test_file0 = tempfile::NamedTempFile::new().unwrap(); + let mut test_file1 = tempfile::NamedTempFile::new().unwrap(); + writeln!(test_file0, "{integer0}").unwrap(); + writeln!(test_file1, "{integer1}").unwrap(); + gc_registering_current_thread(|| { + let es = EvalState::new(Store::open("auto").unwrap(), []).unwrap(); + assert!(es.eval_from_string(import_expression, "").is_err()); + + let es = EvalState::new( + Store::open("auto").unwrap(), + [ + format!("test_file0={}", test_file0.path().to_str().unwrap()).as_str(), + format!("test_file1={}", test_file1.path().to_str().unwrap()).as_str(), + ], + ) + .unwrap(); + let v = es + .require_int(&es.eval_from_string(import_expression, "").unwrap()) + .unwrap(); + assert_eq!(v, integer0 + integer1); + }) + .unwrap(); + test_file0.close().unwrap(); + test_file1.close().unwrap(); + } + #[test] fn eval_state_eval_from_string() { gc_registering_current_thread(|| {