Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions ninja_env/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,46 @@ name = "ninja_env"
version = "0.1.0"
edition = "2024"
rust-version = "1.85.0"
publish = false

[dependencies]

[lints.clippy]
pedantic = { level = "warn", priority = -1 }

# 1. hygiene
# Unfortunately, due to an 'unused-braces' false positive with
# single line rstest fixtures, and the fact that fixtures do
# not permit 'expect' attributes, we must disable this deny.
# allow_attributes = "deny"
allow_attributes_without_reason = "deny"
blanket_clippy_restriction_lints = "deny"

# 2. debugging leftovers
# Disabled pending further investigation into applicability.
# dbg_macro = "deny"
# print_stdout = "deny"
# print_stderr = "deny"

# 3. panic-prone operations
unwrap_used = "deny"
# Expect used in tests. Discouraged in implementation code.
# expect_used = "deny"
indexing_slicing = "deny"
string_slice = "deny"
integer_division = "deny"
integer_division_remainder_used = "deny"

# 4. portability
host_endian_bytes = "deny"
little_endian_bytes = "deny"
big_endian_bytes = "deny"

# 5. nursery idiom polish
or_fun_call = "deny"
option_if_let_else = "deny"
use_self = "deny"
string_lit_as_bytes = "deny"

# 6. numerical foot-guns
float_arithmetic = "deny"
6 changes: 3 additions & 3 deletions test_support/src/env.rs
Original file line number Diff line number Diff line change
Expand Up @@ -104,12 +104,12 @@ pub struct NinjaEnvGuard {
///
/// ```
/// use ninja_env::NINJA_ENV;
/// use std::path::Path;
/// use test_support::env::{SystemEnv, override_ninja_env};
///
/// let env = SystemEnv::new();
/// let guard = override_ninja_env(&env, Path::new("/tmp/ninja"));
/// assert_eq!(std::env::var(NINJA_ENV).unwrap(), "/tmp/ninja");
/// let path = std::env::temp_dir().join("ninja");
/// let guard = override_ninja_env(&env, path.as_path());
/// assert_eq!(std::env::var(NINJA_ENV).unwrap(), path.to_string_lossy());
/// drop(guard);
/// assert!(std::env::var(NINJA_ENV).is_err());
/// ```
Expand Down
17 changes: 10 additions & 7 deletions tests/ninja_env_tests.rs
Original file line number Diff line number Diff line change
@@ -1,25 +1,27 @@
//! Tests for overriding the `NINJA_ENV` variable via a mock environment.

use mockable::MockEnv;
use netsuke::runner::NINJA_ENV;
use ninja_env::NINJA_ENV;
use rstest::rstest;
use serial_test::serial;
use std::path::Path;
use test_support::{env::override_ninja_env, env_lock::EnvLock};

#[rstest]
#[serial]
fn override_ninja_env_sets_and_restores() {
let before = std::env::var_os(NINJA_ENV);
let original = before.clone().map(|v| v.to_string_lossy().into_owned());
let original = before
.as_ref()
.and_then(|v| v.to_str().map(ToOwned::to_owned));
let mut env = MockEnv::new();
env.expect_raw()
.withf(|k| k == NINJA_ENV)
.returning(move |_| original.clone().ok_or(std::env::VarError::NotPresent));
{
let _guard = override_ninja_env(&env, Path::new("/tmp/ninja"));
let target = std::env::temp_dir().join("ninja");
let _guard = override_ninja_env(&env, target.as_path());
let after = std::env::var(NINJA_ENV).expect("NINJA_ENV should be set after override");
assert_eq!(after, "/tmp/ninja");
assert_eq!(after, target.to_string_lossy().as_ref());
}
let restored = std::env::var_os(NINJA_ENV);
assert_eq!(restored, before);
Expand All @@ -40,9 +42,10 @@ fn override_ninja_env_unset_removes_variable() {
.withf(|k| k == NINJA_ENV)
.returning(|_| Err(std::env::VarError::NotPresent));
{
let _guard = override_ninja_env(&env, Path::new("/tmp/ninja"));
let target = std::env::temp_dir().join("ninja");
let _guard = override_ninja_env(&env, target.as_path());
let after = std::env::var(NINJA_ENV).expect("NINJA_ENV should be set after override");
assert_eq!(after, "/tmp/ninja");
assert_eq!(after, target.to_string_lossy().as_ref());
}
assert!(std::env::var(NINJA_ENV).is_err());

Expand Down