use ruchy::stdlib::env;
#[test]
fn test_env_var_get_existing() {
let result = env::var("PATH");
assert!(result.is_ok(), "PATH variable should exist");
assert!(!result.unwrap().is_empty(), "PATH should not be empty");
}
#[test]
fn test_env_var_get_nonexistent() {
let result = env::var("RUCHY_TEST_NONEXISTENT_VARIABLE_XYZ_999");
assert!(result.is_err(), "Nonexistent variable should return error");
}
#[test]
fn test_env_set_and_get_var() {
let key = "RUCHY_INTEGRATION_TEST_VAR";
let value = "integration_test_value";
assert!(env::set_var(key, value).is_ok());
let result = env::var(key);
assert!(result.is_ok());
assert_eq!(result.unwrap(), value);
env::remove_var(key).unwrap();
}
#[test]
fn test_env_set_var_overwrite() {
let key = "RUCHY_INTEGRATION_OVERWRITE_TEST";
env::set_var(key, "value1").unwrap();
assert_eq!(env::var(key).unwrap(), "value1");
env::set_var(key, "value2").unwrap();
assert_eq!(env::var(key).unwrap(), "value2");
env::remove_var(key).unwrap();
}
#[test]
fn test_env_remove_var() {
let key = "RUCHY_INTEGRATION_REMOVE_TEST";
env::set_var(key, "test_value").unwrap();
assert!(env::var(key).is_ok());
env::remove_var(key).unwrap();
assert!(
env::var(key).is_err(),
"Variable should not exist after removal"
);
}
#[test]
fn test_env_remove_nonexistent_var() {
let result = env::remove_var("RUCHY_INTEGRATION_NONEXISTENT_999");
assert!(result.is_ok(), "Removing nonexistent var should not fail");
}
#[test]
fn test_env_vars_returns_hashmap() {
let vars = env::vars().unwrap();
assert!(
!vars.is_empty(),
"Environment should have at least some variables"
);
assert!(
vars.contains_key("PATH"),
"PATH should be in environment variables"
);
}
#[test]
fn test_env_vars_includes_set_variable() {
let key = "RUCHY_INTEGRATION_VARS_TEST";
let value = "vars_test_value";
env::set_var(key, value).unwrap();
let vars = env::vars().unwrap();
assert_eq!(vars.get(key), Some(&value.to_string()));
env::remove_var(key).unwrap();
}
#[test]
fn test_env_current_dir() {
let dir = env::current_dir().unwrap();
assert!(!dir.is_empty(), "Current directory should not be empty");
assert!(
std::path::Path::new(&dir).exists(),
"Current directory should exist"
);
}
#[test]
fn test_env_set_current_dir() {
use tempfile::TempDir;
let original = env::current_dir().unwrap();
let temp_dir = TempDir::new().unwrap();
let temp_path = temp_dir.path().to_str().unwrap();
assert!(env::set_current_dir(temp_path).is_ok());
let new_dir = env::current_dir().unwrap();
assert!(
new_dir.contains(temp_path)
|| std::path::Path::new(&new_dir).canonicalize().unwrap()
== std::path::Path::new(temp_path).canonicalize().unwrap()
);
env::set_current_dir(&original).unwrap();
}
#[test]
fn test_env_args() {
let args = env::args().unwrap();
assert!(
!args.is_empty(),
"Args should contain at least program name"
);
assert!(!args[0].is_empty(), "Program name should not be empty");
}
#[test]
fn test_env_temp_dir() {
let temp = env::temp_dir().unwrap();
assert!(!temp.is_empty(), "Temp directory path should not be empty");
assert!(
std::path::Path::new(&temp).exists(),
"Temp directory should exist"
);
}
#[test]
fn test_env_workflow_complete() {
let key = "RUCHY_INTEGRATION_WORKFLOW_TEST";
env::set_var(key, "workflow_value_1").unwrap();
assert_eq!(env::var(key).unwrap(), "workflow_value_1");
env::set_var(key, "workflow_value_2").unwrap();
assert_eq!(env::var(key).unwrap(), "workflow_value_2");
let all_vars = env::vars().unwrap();
assert_eq!(all_vars.get(key), Some(&"workflow_value_2".to_string()));
env::remove_var(key).unwrap();
assert!(env::var(key).is_err());
let all_vars_after = env::vars().unwrap();
assert!(!all_vars_after.contains_key(key));
}
#[test]
fn test_env_special_characters_in_values() {
let key = "RUCHY_INTEGRATION_SPECIAL_CHARS";
env::set_var(key, "value with spaces").unwrap();
assert_eq!(env::var(key).unwrap(), "value with spaces");
env::set_var(key, "value=with=equals").unwrap();
assert_eq!(env::var(key).unwrap(), "value=with=equals");
env::set_var(key, "value:with:colons").unwrap();
assert_eq!(env::var(key).unwrap(), "value:with:colons");
env::set_var(key, "").unwrap();
assert_eq!(env::var(key).unwrap(), "");
env::remove_var(key).unwrap();
}