use ruchy::stdlib::env;
use std::collections::HashMap;
use tempfile::TempDir;
#[test]
fn test_var_success() {
env::set_var("TEST_VAR_123", "test_value").unwrap();
let result = env::var("TEST_VAR_123");
assert!(result.is_ok());
assert_eq!(result.unwrap(), "test_value");
env::remove_var("TEST_VAR_123").unwrap();
}
#[test]
fn test_var_missing() {
let result = env::var("NONEXISTENT_VAR_XYZ_999");
assert!(result.is_err());
}
#[test]
fn test_set_var_and_get() {
env::set_var("RUCHY_TEST_SET", "set_value").unwrap();
let result = env::var("RUCHY_TEST_SET");
assert_eq!(result.unwrap(), "set_value");
env::remove_var("RUCHY_TEST_SET").unwrap();
}
#[test]
fn test_remove_var() {
env::set_var("RUCHY_TEST_REMOVE", "temporary").unwrap();
assert!(env::var("RUCHY_TEST_REMOVE").is_ok());
env::remove_var("RUCHY_TEST_REMOVE").unwrap();
assert!(env::var("RUCHY_TEST_REMOVE").is_err());
}
#[test]
fn test_vars_returns_hashmap() {
let result = env::vars();
assert!(result.is_ok());
let vars: HashMap<String, String> = result.unwrap();
assert!(!vars.is_empty());
assert!(vars.contains_key("PATH") || vars.contains_key("Path"));
}
#[test]
fn test_vars_contains_custom() {
env::set_var("RUCHY_CUSTOM_VAR", "custom_value").unwrap();
let vars = env::vars().unwrap();
assert_eq!(
vars.get("RUCHY_CUSTOM_VAR"),
Some(&"custom_value".to_string())
);
env::remove_var("RUCHY_CUSTOM_VAR").unwrap();
}
#[test]
fn test_current_dir_success() {
let result = env::current_dir();
assert!(result.is_ok());
let dir = result.unwrap();
assert!(!dir.is_empty());
assert!(std::path::Path::new(&dir).exists());
}
#[test]
fn test_set_current_dir_success() {
let temp_dir = TempDir::new().unwrap();
let original = env::current_dir().unwrap();
let result = env::set_current_dir(temp_dir.path().to_str().unwrap());
assert!(result.is_ok());
let new_dir = env::current_dir().unwrap();
assert!(new_dir.contains(temp_dir.path().file_name().unwrap().to_str().unwrap()));
env::set_current_dir(&original).unwrap();
}
#[test]
fn test_set_current_dir_invalid() {
let result = env::set_current_dir("/nonexistent/invalid/path/xyz");
assert!(result.is_err());
let err = result.unwrap_err();
assert!(
err.contains("No such file") || err.contains("NotFound") || err.contains("cannot find")
);
}
#[test]
fn test_args_not_empty() {
let result = env::args();
assert!(result.is_ok());
let args = result.unwrap();
assert!(!args.is_empty()); }
#[test]
fn test_temp_dir_exists() {
let result = env::temp_dir();
assert!(result.is_ok());
let temp = result.unwrap();
assert!(!temp.is_empty());
assert!(std::path::Path::new(&temp).exists());
}
use proptest::prelude::*;
proptest! {
#[test]
fn property_set_get_roundtrip(
key in "[A-Z_]{5,20}",
value in "[ -~]{1,100}" ) {
let test_key = format!("RUCHY_PROP_{key}");
env::set_var(&test_key, &value).unwrap();
let result = env::var(&test_key).unwrap();
prop_assert_eq!(result, value);
env::remove_var(&test_key).unwrap();
}
#[test]
fn property_remove_makes_var_missing(
key in "[A-Z_]{5,20}"
) {
let test_key = format!("RUCHY_REM_{key}");
env::set_var(&test_key, "temp").unwrap();
env::remove_var(&test_key).unwrap();
prop_assert!(env::var(&test_key).is_err());
}
#[test]
fn property_vars_always_contains_path(
_dummy in 0..100i32 ) {
let vars = env::vars().unwrap();
prop_assert!(
vars.contains_key("PATH") || vars.contains_key("Path"),
"Environment should contain PATH variable"
);
}
}
#[test]
fn test_var_empty_string() {
env::set_var("RUCHY_EMPTY", "").unwrap();
let result = env::var("RUCHY_EMPTY");
assert_eq!(result.unwrap(), "");
env::remove_var("RUCHY_EMPTY").unwrap();
}
#[test]
fn test_var_unicode() {
env::set_var("RUCHY_UNICODE", "Hello δΈη π").unwrap();
let result = env::var("RUCHY_UNICODE");
assert_eq!(result.unwrap(), "Hello δΈη π");
env::remove_var("RUCHY_UNICODE").unwrap();
}
#[test]
fn test_var_special_chars() {
let special = r#"!@#$%^&*(){}[]|\:;"'<>,.?/~`"#;
env::set_var("RUCHY_SPECIAL", special).unwrap();
let result = env::var("RUCHY_SPECIAL");
assert_eq!(result.unwrap(), special);
env::remove_var("RUCHY_SPECIAL").unwrap();
}
#[test]
fn test_current_dir_is_absolute() {
let dir = env::current_dir().unwrap();
assert!(std::path::Path::new(&dir).is_absolute());
}
#[test]
fn test_env_workflow() {
env::set_var("RUCHY_WORKFLOW", "step1").unwrap();
let all_vars = env::vars().unwrap();
assert_eq!(all_vars.get("RUCHY_WORKFLOW"), Some(&"step1".to_string()));
env::set_var("RUCHY_WORKFLOW", "step2").unwrap();
assert_eq!(env::var("RUCHY_WORKFLOW").unwrap(), "step2");
env::remove_var("RUCHY_WORKFLOW").unwrap();
assert!(env::var("RUCHY_WORKFLOW").is_err());
}
#[test]
fn test_dir_workflow() {
let original = env::current_dir().unwrap();
let temp_dir = TempDir::new().unwrap();
env::set_current_dir(temp_dir.path().to_str().unwrap()).unwrap();
let new_dir = env::current_dir().unwrap();
assert_ne!(new_dir, original);
env::set_current_dir(&original).unwrap();
assert_eq!(env::current_dir().unwrap(), original);
}