#![allow(missing_docs)]
use assert_cmd::Command;
use std::fs;
use tempfile::TempDir;
fn ruchy_cmd() -> Command {
assert_cmd::cargo::cargo_bin_cmd!("ruchy")
}
fn temp_dir() -> TempDir {
TempDir::new().expect("Failed to create temp directory")
}
#[test]
fn test_env_var_basic() {
let temp = temp_dir();
let source = temp.path().join("test.ruchy");
let code = r#"
fun main() {
// PATH should exist in all environments
let path = env_var("PATH");
println("PATH exists");
}
"#;
fs::write(&source, code).expect("Failed to write test file");
ruchy_cmd().arg("run").arg(&source).assert().success();
}
#[test]
fn test_env_var_compile() {
let temp = temp_dir();
let source = temp.path().join("test.ruchy");
let code = r#"
fun main() {
let home = env_var("HOME");
println("Home directory found");
}
"#;
fs::write(&source, code).expect("Failed to write test file");
ruchy_cmd()
.arg("compile")
.arg(&source)
.arg("-o")
.arg(temp.path().join("test_binary"))
.assert()
.success();
}
#[test]
fn test_env_var_custom() {
let temp = temp_dir();
let source = temp.path().join("test.ruchy");
let code = r#"
fun main() {
let value = env_var("TEST_RUCHY_VAR");
println(value);
}
"#;
fs::write(&source, code).expect("Failed to write test file");
ruchy_cmd()
.arg("run")
.arg(&source)
.env("TEST_RUCHY_VAR", "test_value_123")
.assert()
.success();
}
#[test]
#[ignore = "env_var error handling behavior changed"]
fn test_env_var_missing() {
let temp = temp_dir();
let source = temp.path().join("test.ruchy");
let code = r#"
fun main() {
let value = env_var("NONEXISTENT_VAR_XYZ");
println(value);
}
"#;
fs::write(&source, code).expect("Failed to write test file");
ruchy_cmd().arg("run").arg(&source).assert().failure();
}
#[test]
fn test_env_var_wrong_args() {
let temp = temp_dir();
let source = temp.path().join("test.ruchy");
let code = r"
fun main() {
let value = env_var(); // Missing argument
}
";
fs::write(&source, code).expect("Failed to write test file");
ruchy_cmd().arg("run").arg(&source).assert().failure();
}
#[test]
fn test_env_var_summary() {
println!("STDLIB Phase 1: env_var() Implementation");
println!("- Function: env_var(key: String) -> Result<String>");
println!("- Retrieves environment variable by key");
println!("- Returns error if variable doesn't exist");
println!();
println!("Three-Layer Implementation Required:");
println!("1. Runtime: builtin_env_var() in builtins.rs");
println!("2. Transpiler: env_var case in try_transpile_environment_function()");
println!("3. Environment: eval_env_var() in eval_builtin.rs");
}