From 84577827b42f6e172f8fd3b94f57a3fca68e2a96 Mon Sep 17 00:00:00 2001 From: mag123c Date: Thu, 14 May 2026 22:01:22 +0900 Subject: [PATCH] fix(parser): merge gemini env-var tests to avoid cargo-parallel race MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The two `GEMINI_CLI_HOME` tests ran in parallel under cargo test and clobbered each other's env state — case 2's `remove_var` ran while case 1 was mid-assertion, producing intermittent failures on main CI. Combine both scenarios into a single `#[test]` so they execute serially within one thread. --- src/parsers/gemini.rs | 32 +++++++++++--------------------- 1 file changed, 11 insertions(+), 21 deletions(-) diff --git a/src/parsers/gemini.rs b/src/parsers/gemini.rs index d2921e4..e815a89 100644 --- a/src/parsers/gemini.rs +++ b/src/parsers/gemini.rs @@ -597,36 +597,26 @@ mod tests { assert_eq!(entries.len(), 9); } + // `GEMINI_CLI_HOME` is process-global; splitting into two `#[test]`s races + // because cargo runs tests in parallel and each test's restore step can + // observe the other test's `set_var`. Keep both scenarios in one test so + // they execute serially within a single thread. #[test] - fn test_gemini_cli_home_env_var_overrides_home() { - // Other tests use `with_data_dir`; only `new()` reads this env var, - // so concurrent reads don't collide on data_dir state. + fn test_gemini_cli_home_env_var() { let saved = std::env::var("GEMINI_CLI_HOME").ok(); - std::env::set_var("GEMINI_CLI_HOME", "/tmp/toktrack-gemini-env-test"); - let parser = GeminiParser::new(); + // Case 1 — non-empty value overrides home. + std::env::set_var("GEMINI_CLI_HOME", "/tmp/toktrack-gemini-env-test"); assert_eq!( - parser.data_dir(), + GeminiParser::new().data_dir(), Path::new("/tmp/toktrack-gemini-env-test/.gemini/tmp") ); - // Restore prior env state. - match saved { - Some(v) => std::env::set_var("GEMINI_CLI_HOME", v), - None => std::env::remove_var("GEMINI_CLI_HOME"), - } - } - - #[test] - fn test_gemini_cli_home_empty_string_falls_through() { - let saved = std::env::var("GEMINI_CLI_HOME").ok(); + // Case 2 — empty value is treated as unset (matches gemini-cli JS falsiness). std::env::set_var("GEMINI_CLI_HOME", ""); + assert_ne!(GeminiParser::new().data_dir(), Path::new("/.gemini/tmp")); - let parser = GeminiParser::new(); - // Empty value should be ignored (matches gemini-cli JS falsiness). - // Resulting data_dir should NOT be just "/.gemini/tmp". - assert_ne!(parser.data_dir(), Path::new("/.gemini/tmp")); - + // Restore prior env state. match saved { Some(v) => std::env::set_var("GEMINI_CLI_HOME", v), None => std::env::remove_var("GEMINI_CLI_HOME"),