use predicates::prelude::*;
#[test]
#[ignore = "Needs string interpolation support for println"]
fn test_issue_096_env_args_basic() {
let script = r#"
use std::env
fun main() {
let args = env::args()
println("Args count:", args.len())
}
main()
"#;
let temp_file = std::env::temp_dir().join("issue_096_env_args_basic.ruchy");
std::fs::write(&temp_file, script).unwrap();
assert_cmd::cargo::cargo_bin_cmd!("ruchy")
.arg(&temp_file)
.assert()
.success()
.stdout(predicate::str::contains("Args count: 1"));
std::fs::remove_file(temp_file).unwrap();
}
#[test]
#[ignore = "Script argument passing not yet implemented in CLI"]
fn test_issue_096_env_args_multiple() {
let script = r#"
use std::env
fun main() {
let args = env::args()
println("Total args:", args.len())
let mut i = 0
while i < args.len() {
println("Arg:", i, args[i])
i = i + 1
}
}
main()
"#;
let temp_file = std::env::temp_dir().join("issue_096_env_args_multiple.ruchy");
std::fs::write(&temp_file, script).unwrap();
assert_cmd::cargo::cargo_bin_cmd!("ruchy")
.arg(&temp_file)
.arg("arg1")
.arg("arg2")
.assert()
.success()
.stdout(predicate::str::contains("Total args: 3"))
.stdout(predicate::str::contains("Arg 1: arg1"))
.stdout(predicate::str::contains("Arg 2: arg2"));
std::fs::remove_file(temp_file).unwrap();
}
#[test]
fn test_issue_096_env_var_get() {
let script = r#"
use std::env
fun main() {
// Set a test environment variable for this test
let result = env::var("RUCHY_TEST_VAR")
match result {
Ok(value) => println("Value:", value),
Err(_) => println("Not found"),
}
}
main()
"#;
let temp_file = std::env::temp_dir().join("issue_096_env_var_get.ruchy");
std::fs::write(&temp_file, script).unwrap();
assert_cmd::cargo::cargo_bin_cmd!("ruchy")
.env("RUCHY_TEST_VAR", "test_value_123")
.arg(&temp_file)
.assert()
.success()
.stdout(predicate::str::contains("Value: test_value_123"));
std::fs::remove_file(temp_file).unwrap();
}
#[test]
fn test_issue_096_env_var_not_found() {
let script = r#"
use std::env
fun main() {
let result = env::var("RUCHY_NONEXISTENT_VAR_XYZ")
match result {
Ok(value) => println("Found: ", value),
Err(_) => println("Not found"),
}
}
main()
"#;
let temp_file = std::env::temp_dir().join("issue_096_env_var_not_found.ruchy");
std::fs::write(&temp_file, script).unwrap();
assert_cmd::cargo::cargo_bin_cmd!("ruchy")
.env_remove("RUCHY_NONEXISTENT_VAR_XYZ") .arg(&temp_file)
.assert()
.success()
.stdout(predicate::str::contains("Not found"));
std::fs::remove_file(temp_file).unwrap();
}
#[test]
fn test_issue_096_env_args_nonempty() {
let script = r#"
use std::env
fun main() {
let args = env::args()
if args.len() > 0 {
println("Has args: yes")
println("First arg exists: yes")
} else {
println("Has args: no")
}
}
main()
"#;
let temp_file = std::env::temp_dir().join("issue_096_env_args_nonempty.ruchy");
std::fs::write(&temp_file, script).unwrap();
assert_cmd::cargo::cargo_bin_cmd!("ruchy")
.arg(&temp_file)
.assert()
.success()
.stdout(predicate::str::contains("Has args: yes"))
.stdout(predicate::str::contains("First arg exists: yes"));
std::fs::remove_file(temp_file).unwrap();
}
#[test]
fn test_issue_096_std_env_import() {
let script = r#"
use std::env
fun main() {
println("Import successful")
}
main()
"#;
let temp_file = std::env::temp_dir().join("issue_096_std_env_import.ruchy");
std::fs::write(&temp_file, script).unwrap();
assert_cmd::cargo::cargo_bin_cmd!("ruchy")
.arg(&temp_file)
.assert()
.success()
.stdout(predicate::str::contains("Import successful"));
std::fs::remove_file(temp_file).unwrap();
}
#[test]
fn test_issue_096_env_var_common() {
let script = r#"
use std::env
fun main() {
// Try to get a common env var that should exist
let home = env::var("HOME")
match home {
Ok(_) => println("HOME exists: yes"),
Err(_) => println("HOME exists: no"),
}
}
main()
"#;
let temp_file = std::env::temp_dir().join("issue_096_env_var_common.ruchy");
std::fs::write(&temp_file, script).unwrap();
assert_cmd::cargo::cargo_bin_cmd!("ruchy")
.arg(&temp_file)
.assert()
.success()
.stdout(predicate::str::contains("HOME exists: yes"));
std::fs::remove_file(temp_file).unwrap();
}
#[test]
#[ignore = "Script argument passing not yet implemented in CLI"]
fn test_issue_096_cli_tool_pattern() {
let script = r#"
use std::env
fun main() {
let args = env::args()
if args.len() < 2 {
println("Usage: program <command>")
return
}
println("CLI tool started")
println("Args received:", args.len())
}
main()
"#;
let temp_file = std::env::temp_dir().join("issue_096_cli_tool_pattern.ruchy");
std::fs::write(&temp_file, script).unwrap();
assert_cmd::cargo::cargo_bin_cmd!("ruchy")
.arg(&temp_file)
.assert()
.success()
.stdout(predicate::str::contains("Usage: program <command>"));
std::fs::remove_file(temp_file).unwrap();
}